aboutsummaryrefslogtreecommitdiff
path: root/miscutils
diff options
context:
space:
mode:
authorDenis Vlasenko <vda.linux@googlemail.com>2007-11-04 04:10:17 +0000
committerDenis Vlasenko <vda.linux@googlemail.com>2007-11-04 04:10:17 +0000
commitbfc3d82256c45fb1e6e04ca85fac8a65b34b72a1 (patch)
treeefe5bed86f389cec7e7e4f73b12b58783327e4b2 /miscutils
parent681023650e69f6e4fa959c5c6f0480d4a0edf906 (diff)
downloadbusybox-w32-bfc3d82256c45fb1e6e04ca85fac8a65b34b72a1.tar.gz
busybox-w32-bfc3d82256c45fb1e6e04ca85fac8a65b34b72a1.tar.bz2
busybox-w32-bfc3d82256c45fb1e6e04ca85fac8a65b34b72a1.zip
ifconfig: code shrink
adjtimex: code shrink libbb: move nth_string function into libbb hdparm: nth_string was here text data bss dec hex filename 730013 10334 12032 752379 b7afb busybox_old 730093 10134 12032 752259 b7a83 busybox_unstripped
Diffstat (limited to 'miscutils')
-rw-r--r--miscutils/adjtimex.c98
-rw-r--r--miscutils/hdparm.c27
2 files changed, 69 insertions, 56 deletions
diff --git a/miscutils/adjtimex.c b/miscutils/adjtimex.c
index 67dd0a93b..07f083428 100644
--- a/miscutils/adjtimex.c
+++ b/miscutils/adjtimex.c
@@ -14,34 +14,46 @@
14#include "libbb.h" 14#include "libbb.h"
15#include <sys/timex.h> 15#include <sys/timex.h>
16 16
17static const struct { 17static const uint16_t statlist_bit[] = {
18 int bit; 18 STA_PLL,
19 const char *name; 19 STA_PPSFREQ,
20} statlist[] = { 20 STA_PPSTIME,
21 { STA_PLL, "PLL" }, 21 STA_FLL,
22 { STA_PPSFREQ, "PPSFREQ" }, 22 STA_INS,
23 { STA_PPSTIME, "PPSTIME" }, 23 STA_DEL,
24 { STA_FLL, "FFL" }, 24 STA_UNSYNC,
25 { STA_INS, "INS" }, 25 STA_FREQHOLD,
26 { STA_DEL, "DEL" }, 26 STA_PPSSIGNAL,
27 { STA_UNSYNC, "UNSYNC" }, 27 STA_PPSJITTER,
28 { STA_FREQHOLD, "FREQHOLD" }, 28 STA_PPSWANDER,
29 { STA_PPSSIGNAL, "PPSSIGNAL" }, 29 STA_PPSERROR,
30 { STA_PPSJITTER, "PPSJITTER" }, 30 STA_CLOCKERR,
31 { STA_PPSWANDER, "PPSWANDER" }, 31 0
32 { STA_PPSERROR, "PPSERROR" },
33 { STA_CLOCKERR, "CLOCKERR" },
34 { 0, NULL }
35}; 32};
33static const char statlist_name[] =
34 "PLL" "\0"
35 "PPSFREQ" "\0"
36 "PPSTIME" "\0"
37 "FFL" "\0"
38 "INS" "\0"
39 "DEL" "\0"
40 "UNSYNC" "\0"
41 "FREQHOLD" "\0"
42 "PPSSIGNAL" "\0"
43 "PPSJITTER" "\0"
44 "PPSWANDER" "\0"
45 "PPSERROR" "\0"
46 "CLOCKERR"
47;
36 48
37static const char *const ret_code_descript[] = { 49static const char ret_code_descript[] =
38 "clock synchronized", 50 "clock synchronized" "\0"
39 "insert leap second", 51 "insert leap second" "\0"
40 "delete leap second", 52 "delete leap second" "\0"
41 "leap second in progress", 53 "leap second in progress" "\0"
42 "leap second has occurred", 54 "leap second has occurred" "\0"
43 "clock not synchronized" 55 "clock not synchronized"
44}; 56;
45 57
46int adjtimex_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; 58int adjtimex_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
47int adjtimex_main(int argc, char **argv) 59int adjtimex_main(int argc, char **argv)
@@ -52,7 +64,7 @@ int adjtimex_main(int argc, char **argv)
52 unsigned opt; 64 unsigned opt;
53 char *opt_o, *opt_f, *opt_p, *opt_t; 65 char *opt_o, *opt_f, *opt_p, *opt_t;
54 struct timex txc; 66 struct timex txc;
55 int i, ret, sep; 67 int i, ret;
56 const char *descript; 68 const char *descript;
57 txc.modes=0; 69 txc.modes=0;
58 70
@@ -81,33 +93,42 @@ int adjtimex_main(int argc, char **argv)
81 93
82 ret = adjtimex(&txc); 94 ret = adjtimex(&txc);
83 95
84 if (ret < 0) perror("adjtimex"); 96 if (ret < 0) {
97 bb_perror_nomsg_and_die();
98 }
99
100 if (!(opt & OPT_quiet)) {
101 int sep;
102 const char *name;
85 103
86 if (!(opt & OPT_quiet) && ret>=0) {
87 printf( 104 printf(
88 " mode: %d\n" 105 " mode: %d\n"
89 "-o offset: %ld\n" 106 "-o offset: %ld\n"
90 "-f frequency: %ld\n" 107 "-f frequency: %ld\n"
91 " maxerror: %ld\n" 108 " maxerror: %ld\n"
92 " esterror: %ld\n" 109 " esterror: %ld\n"
93 " status: %d ( ", 110 " status: %d (",
94 txc.modes, txc.offset, txc.freq, txc.maxerror, 111 txc.modes, txc.offset, txc.freq, txc.maxerror,
95 txc.esterror, txc.status); 112 txc.esterror, txc.status);
96 113
97 /* representative output of next code fragment: 114 /* representative output of next code fragment:
98 "PLL | PPSTIME" */ 115 "PLL | PPSTIME" */
99 sep=0; 116 name = statlist_name;
100 for (i=0; statlist[i].name; i++) { 117 sep = 0;
101 if (txc.status & statlist[i].bit) { 118 for (i = 0; statlist_bit[i]; i++) {
102 if (sep) fputs(" | ",stdout); 119 if (txc.status & statlist_bit[i]) {
103 fputs(statlist[i].name,stdout); 120 if (sep)
104 sep=1; 121 fputs(" | ", stdout);
122 fputs(name, stdout);
123 sep = 1;
105 } 124 }
125 name += strlen(name) + 1;
106 } 126 }
107 127
108 descript = "error"; 128 descript = "error";
109 if (ret >= 0 && ret <= 5) descript = ret_code_descript[ret]; 129 if (ret <= 5)
110 printf(" )\n" 130 descript = nth_string(ret_code_descript, ret);
131 printf(")\n"
111 "-p timeconstant: %ld\n" 132 "-p timeconstant: %ld\n"
112 " precision: %ld\n" 133 " precision: %ld\n"
113 " tolerance: %ld\n" 134 " tolerance: %ld\n"
@@ -119,5 +140,6 @@ int adjtimex_main(int argc, char **argv)
119 txc.precision, txc.tolerance, txc.tick, 140 txc.precision, txc.tolerance, txc.tick,
120 (long)txc.time.tv_sec, (long)txc.time.tv_usec, ret, descript); 141 (long)txc.time.tv_sec, (long)txc.time.tv_usec, ret, descript);
121 } 142 }
122 return (ret<0); 143
144 return 0;
123} 145}
diff --git a/miscutils/hdparm.c b/miscutils/hdparm.c
index c8129d791..93b1aacb3 100644
--- a/miscutils/hdparm.c
+++ b/miscutils/hdparm.c
@@ -491,15 +491,6 @@ static uint8_t mode_loop(uint16_t mode_sup, uint16_t mode_sel, int cc, uint8_t *
491 return err_dma; 491 return err_dma;
492} 492}
493 493
494static const char *nth_str(const char *strings, int n)
495{
496 while (n) {
497 n--;
498 strings += strlen(strings) + 1;
499 }
500 return strings;
501}
502
503static const char pkt_str[] ALIGN1 = 494static const char pkt_str[] ALIGN1 =
504 "Direct-access device" "\0" /* word 0, bits 12-8 = 00 */ 495 "Direct-access device" "\0" /* word 0, bits 12-8 = 00 */
505 "Sequential-access device" "\0" /* word 0, bits 12-8 = 01 */ 496 "Sequential-access device" "\0" /* word 0, bits 12-8 = 01 */
@@ -710,7 +701,7 @@ static void identify(uint16_t *val)
710 } else if (!(val[GEN_CONFIG] & NOT_ATAPI)) { 701 } else if (!(val[GEN_CONFIG] & NOT_ATAPI)) {
711 dev = ATAPI_DEV; 702 dev = ATAPI_DEV;
712 eqpt = (val[GEN_CONFIG] & EQPT_TYPE) >> SHIFT_EQPT; 703 eqpt = (val[GEN_CONFIG] & EQPT_TYPE) >> SHIFT_EQPT;
713 printf("ATAPI %s, with ", eqpt <= 0xf ? nth_str(pkt_str, eqpt) : "unknown"); 704 printf("ATAPI %s, with ", eqpt <= 0xf ? nth_string(pkt_str, eqpt) : "unknown");
714 like_std = 3; 705 like_std = 3;
715 } else 706 } else
716 /* "Unknown device type:\n\tbits 15&14 of general configuration word 0 both set to 1.\n" */ 707 /* "Unknown device type:\n\tbits 15&14 of general configuration word 0 both set to 1.\n" */
@@ -748,7 +739,7 @@ static void identify(uint16_t *val)
748 if (val[MINOR] && (val[MINOR] <= MINOR_MAX)) { 739 if (val[MINOR] && (val[MINOR] <= MINOR_MAX)) {
749 if (like_std < 3) like_std = 3; 740 if (like_std < 3) like_std = 3;
750 std = actual_ver[val[MINOR]]; 741 std = actual_ver[val[MINOR]];
751 if (std) printf("\n\tUsed: %s ", nth_str(minor_str, val[MINOR])); 742 if (std) printf("\n\tUsed: %s ", nth_string(minor_str, val[MINOR]));
752 743
753 } 744 }
754 /* looks like when they up-issue the std, they obsolete one; 745 /* looks like when they up-issue the std, they obsolete one;
@@ -847,7 +838,7 @@ static void identify(uint16_t *val)
847 jj = val[GEN_CONFIG] >> 1; 838 jj = val[GEN_CONFIG] >> 1;
848 for (ii = 1; ii < 15; ii++) { 839 for (ii = 1; ii < 15; ii++) {
849 if (jj & 0x0001) 840 if (jj & 0x0001)
850 printf("\t%s\n", nth_str(ata1_cfg_str, ii)); 841 printf("\t%s\n", nth_string(ata1_cfg_str, ii));
851 jj >>=1; 842 jj >>=1;
852 } 843 }
853 } 844 }
@@ -1070,7 +1061,7 @@ static void identify(uint16_t *val)
1070 jj = val[CMDS_SUPP_0]; 1061 jj = val[CMDS_SUPP_0];
1071 kk = val[CMDS_EN_0]; 1062 kk = val[CMDS_EN_0];
1072 for (ii = 0; ii < NUM_CMD_FEAT_STR; ii++) { 1063 for (ii = 0; ii < NUM_CMD_FEAT_STR; ii++) {
1073 const char *feat_str = nth_str(cmd_feat_str, ii); 1064 const char *feat_str = nth_string(cmd_feat_str, ii);
1074 if ((jj & 0x8000) && (*feat_str != '\0')) { 1065 if ((jj & 0x8000) && (*feat_str != '\0')) {
1075 printf("\t%s\t%s\n", (kk & 0x8000) ? " *" : "", feat_str); 1066 printf("\t%s\t%s\n", (kk & 0x8000) ? " *" : "", feat_str);
1076 } 1067 }
@@ -1088,7 +1079,7 @@ static void identify(uint16_t *val)
1088 } 1079 }
1089 /* Removable Media Status Notification feature set */ 1080 /* Removable Media Status Notification feature set */
1090 if ((val[RM_STAT] & RM_STAT_BITS) == RM_STAT_SUP) 1081 if ((val[RM_STAT] & RM_STAT_BITS) == RM_STAT_SUP)
1091 printf("\t%s supported\n", nth_str(cmd_feat_str, 27)); 1082 printf("\t%s supported\n", nth_string(cmd_feat_str, 27));
1092 1083
1093 /* security */ 1084 /* security */
1094 if ((eqpt != CDROM) && (like_std > 3) 1085 if ((eqpt != CDROM) && (like_std > 3)
@@ -1100,7 +1091,7 @@ static void identify(uint16_t *val)
1100 jj = val[SECU_STATUS]; 1091 jj = val[SECU_STATUS];
1101 if (jj) { 1092 if (jj) {
1102 for (ii = 0; ii < NUM_SECU_STR; ii++) { 1093 for (ii = 0; ii < NUM_SECU_STR; ii++) {
1103 printf("\t%s\t%s\n", (!(jj & 0x0001)) ? "not" : "", nth_str(secu_str, ii)); 1094 printf("\t%s\t%s\n", (!(jj & 0x0001)) ? "not" : "", nth_string(secu_str, ii));
1104 jj >>=1; 1095 jj >>=1;
1105 } 1096 }
1106 if (val[SECU_STATUS] & SECU_ENABLED) { 1097 if (val[SECU_STATUS] & SECU_ENABLED) {
@@ -1182,13 +1173,13 @@ static void dump_identity(const struct hd_driveid *id)
1182 id->model, id->fw_rev, id->serial_no); 1173 id->model, id->fw_rev, id->serial_no);
1183 for (i = 0; i <= 15; i++) { 1174 for (i = 0; i <= 15; i++) {
1184 if (id->config & (1<<i)) 1175 if (id->config & (1<<i))
1185 printf(" %s", nth_str(cfg_str, i)); 1176 printf(" %s", nth_string(cfg_str, i));
1186 } 1177 }
1187 printf(" }\n RawCHS=%u/%u/%u, TrkSize=%u, SectSize=%u, ECCbytes=%u\n" 1178 printf(" }\n RawCHS=%u/%u/%u, TrkSize=%u, SectSize=%u, ECCbytes=%u\n"
1188 " BuffType=(%u) %s, BuffSize=%ukB, MaxMultSect=%u", 1179 " BuffType=(%u) %s, BuffSize=%ukB, MaxMultSect=%u",
1189 id->cyls, id->heads, id->sectors, id->track_bytes, 1180 id->cyls, id->heads, id->sectors, id->track_bytes,
1190 id->sector_bytes, id->ecc_bytes, 1181 id->sector_bytes, id->ecc_bytes,
1191 id->buf_type, nth_str(BuffType, (id->buf_type > 3) ? 0 : id->buf_type), 1182 id->buf_type, nth_string(BuffType, (id->buf_type > 3) ? 0 : id->buf_type),
1192 id->buf_size/2, id->max_multsect); 1183 id->buf_size/2, id->max_multsect);
1193 if (id->max_multsect) { 1184 if (id->max_multsect) {
1194 printf(", MultSect="); 1185 printf(", MultSect=");
@@ -1294,7 +1285,7 @@ static void dump_identity(const struct hd_driveid *id)
1294 if ((id->minor_rev_num && id->minor_rev_num <= 31) 1285 if ((id->minor_rev_num && id->minor_rev_num <= 31)
1295 || (id->major_rev_num && id->minor_rev_num <= 31) 1286 || (id->major_rev_num && id->minor_rev_num <= 31)
1296 ) { 1287 ) {
1297 printf("\n Drive conforms to: %s: ", (id->minor_rev_num <= 31) ? nth_str(minor_str, id->minor_rev_num) : "unknown"); 1288 printf("\n Drive conforms to: %s: ", (id->minor_rev_num <= 31) ? nth_string(minor_str, id->minor_rev_num) : "unknown");
1298 if (id->major_rev_num != 0x0000 && /* NOVAL_0 */ 1289 if (id->major_rev_num != 0x0000 && /* NOVAL_0 */
1299 id->major_rev_num != 0xFFFF) { /* NOVAL_1 */ 1290 id->major_rev_num != 0xFFFF) { /* NOVAL_1 */
1300 for (i = 0; i <= 15; i++) { 1291 for (i = 0; i <= 15; i++) {