From 26ccd3d062a1949d3fd73b01cdf55e700bde1981 Mon Sep 17 00:00:00 2001 From: Ron Yorston Date: Tue, 4 Aug 2015 17:10:37 +0100 Subject: less: fix botched attempt to use last column Commit 1ecb996 attempted to make read_lines() use the last column of the terminal (as re_wrap() did). There were two problems with this: - The size of the buffer allocated for lines wasn't increased to allow for the extra character. - The test for width overflow was moved after the point where the next character was added to the buffer. This caused a buffer overflow in certain circumstances. For example, if the line beyond the end of the display was wider than the display read_lines() would initially read the partial line into a buffer. When the user moved down read_lines() would be called again to ensure the rest of the line was read. This would place the next character in the partial line before checking for overflow. This can be fixed by moving the test for overflow back to where it was before commit 1ecb996 and changing the comparison to `>` rather than `>=`. There are two other places where buffers are created without allowing for width+1 characters. Signed-off-by: Ron Yorston Signed-off-by: Denys Vlasenko --- miscutils/less.c | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) (limited to 'miscutils') diff --git a/miscutils/less.c b/miscutils/less.c index 7a441bf7e..ccdb15fdc 100644 --- a/miscutils/less.c +++ b/miscutils/less.c @@ -456,7 +456,7 @@ static void read_lines(void) if (option_mask32 & FLAG_N) w -= 8; - p = current_line = ((char*)xmalloc(w + 4)) + 4; + p = current_line = ((char*)xmalloc(w + 5)) + 4; if (!last_terminated) { const char *cp = flines[max_fline]; p = stpcpy(p, cp); @@ -509,6 +509,16 @@ static void read_lines(void) *--p = '\0'; continue; } + { + size_t new_last_line_pos = last_line_pos + 1; + if (c == '\t') { + new_last_line_pos += 7; + new_last_line_pos &= (~7); + } + if ((int)new_last_line_pos > w) + break; + last_line_pos = new_last_line_pos; + } /* ok, we will eat this char */ readpos++; if (c == '\n') { @@ -520,16 +530,6 @@ static void read_lines(void) if (c == '\0') c = '\n'; *p++ = c; *p = '\0'; - { - size_t new_last_line_pos = last_line_pos + 1; - if (c == '\t') { - new_last_line_pos += 7; - new_last_line_pos &= (~7); - } - if ((int)new_last_line_pos >= w) - break; - last_line_pos = new_last_line_pos; - } } /* end of "read chars until we have a line" loop */ #if 0 //BUG: also triggers on this: @@ -573,7 +573,7 @@ static void read_lines(void) break; } max_fline++; - current_line = ((char*)xmalloc(w + 4)) + 4; + current_line = ((char*)xmalloc(w + 5)) + 4; p = current_line; last_line_pos = 0; } /* end of "read lines until we reach cur_fline" loop */ @@ -755,7 +755,7 @@ static void print_found(const char *line) char *growline; regmatch_t match_structs; - char buf[width]; + char buf[width+1]; const char *str = line; char *p = buf; size_t n; @@ -814,7 +814,7 @@ void print_found(const char *line); static void print_ascii(const char *str) { - char buf[width]; + char buf[width+1]; char *p; size_t n; -- cgit v1.2.3-55-g6feb From d9892fa0c3abf28b71996e5bc7c133f29f987a7b Mon Sep 17 00:00:00 2001 From: Bartosz Golaszewski Date: Fri, 4 Sep 2015 10:35:22 +0200 Subject: i2c-tools: remove duplicate definitions Most applets include linux' user API headers instead of duplicating the definitions. Make it the case for i2c-tools as well. Signed-off-by: Bartosz Golaszewski Signed-off-by: Denys Vlasenko --- miscutils/i2c_tools.c | 102 +------------------------------------------------- 1 file changed, 2 insertions(+), 100 deletions(-) (limited to 'miscutils') diff --git a/miscutils/i2c_tools.c b/miscutils/i2c_tools.c index 38d90ff10..b78860277 100644 --- a/miscutils/i2c_tools.c +++ b/miscutils/i2c_tools.c @@ -61,113 +61,15 @@ #include "libbb.h" -/* - * /dev/i2c-X ioctl commands. The ioctl's parameter is always an unsigned long, - * except for: - * - I2C_FUNCS, takes pointer to an unsigned long - * - I2C_RDWR, takes pointer to struct i2c_rdwr_ioctl_data - * - I2C_SMBUS, takes pointer to struct i2c_smbus_ioctl_data - */ - -/* - * NOTE: Slave address is 7 or 10 bits, but 10-bit addresses - * are not supported due to code brokenness. - */ - -/* Use this slave address. */ -#define I2C_SLAVE 0x0703 -/* Use this slave address, even if it is already in use by a driver. */ -#define I2C_SLAVE_FORCE 0x0706 -/* 0 for 7 bit addrs, != 0 for 10 bit. */ -#define I2C_TENBIT 0x0704 -/* Get the adapter functionality mask. */ -#define I2C_FUNCS 0x0705 -/* Combined R/W transfer (one STOP only). */ -#define I2C_RDWR 0x0707 -/* != 0 to use PEC with SMBus. */ -#define I2C_PEC 0x0708 -/* SMBus transfer. */ -#define I2C_SMBUS 0x0720 - -/* Structure used in the I2C_SMBUS ioctl call. */ -struct i2c_smbus_ioctl_data { - uint8_t read_write; - uint8_t command; - uint32_t size; - union i2c_smbus_data *data; -}; +#include +#include -/* Structure used in the I2C_RDWR ioctl call. */ -struct i2c_rdwr_ioctl_data { - struct i2c_msg *msgs; /* Pointers to i2c_msgs. */ - uint32_t nmsgs; /* Number of i2c_msgs. */ -}; - -/* As specified in SMBus standard. */ -#define I2C_SMBUS_BLOCK_MAX 32 -/* Not specified but we use same structure. */ -#define I2C_SMBUS_I2C_BLOCK_MAX 32 - -/* Data for SMBus Messages. */ -union i2c_smbus_data { - uint8_t byte; - uint16_t word; - /* block[0] is used for length and one more for PEC */ - uint8_t block[I2C_SMBUS_BLOCK_MAX + 2]; -}; - -#define I2C_RDRW_IOCTL_MAX_MSGS 42 #define I2C_MAX_REGS 256 -/* Smbus_access read or write markers. */ -#define I2C_SMBUS_READ 1 -#define I2C_SMBUS_WRITE 0 - -/* SMBus transaction types (size parameter in the below functions). */ -#define I2C_SMBUS_QUICK 0 -#define I2C_SMBUS_BYTE 1 -#define I2C_SMBUS_BYTE_DATA 2 -#define I2C_SMBUS_WORD_DATA 3 -#define I2C_SMBUS_PROC_CALL 4 -#define I2C_SMBUS_BLOCK_DATA 5 -#define I2C_SMBUS_I2C_BLOCK_BROKEN 6 -#define I2C_SMBUS_BLOCK_PROC_CALL 7 -#define I2C_SMBUS_I2C_BLOCK_DATA 8 - #define DETECT_MODE_AUTO 0 #define DETECT_MODE_QUICK 1 #define DETECT_MODE_READ 2 -/* Defines to determine what functionality is present. */ -#define I2C_FUNC_I2C 0x00000001 -#define I2C_FUNC_10BIT_ADDR 0x00000002 -#define I2C_FUNC_PROTOCOL_MANGLING 0x00000004 -#define I2C_FUNC_SMBUS_PEC 0x00000008 -#define I2C_FUNC_SMBUS_BLOCK_PROC_CALL 0x00008000 -#define I2C_FUNC_SMBUS_QUICK 0x00010000 -#define I2C_FUNC_SMBUS_READ_BYTE 0x00020000 -#define I2C_FUNC_SMBUS_WRITE_BYTE 0x00040000 -#define I2C_FUNC_SMBUS_READ_BYTE_DATA 0x00080000 -#define I2C_FUNC_SMBUS_WRITE_BYTE_DATA 0x00100000 -#define I2C_FUNC_SMBUS_READ_WORD_DATA 0x00200000 -#define I2C_FUNC_SMBUS_WRITE_WORD_DATA 0x00400000 -#define I2C_FUNC_SMBUS_PROC_CALL 0x00800000 -#define I2C_FUNC_SMBUS_READ_BLOCK_DATA 0x01000000 -#define I2C_FUNC_SMBUS_WRITE_BLOCK_DATA 0x02000000 -#define I2C_FUNC_SMBUS_READ_I2C_BLOCK 0x04000000 -#define I2C_FUNC_SMBUS_WRITE_I2C_BLOCK 0x08000000 - -#define I2C_FUNC_SMBUS_BYTE (I2C_FUNC_SMBUS_READ_BYTE | \ - I2C_FUNC_SMBUS_WRITE_BYTE) -#define I2C_FUNC_SMBUS_BYTE_DATA (I2C_FUNC_SMBUS_READ_BYTE_DATA | \ - I2C_FUNC_SMBUS_WRITE_BYTE_DATA) -#define I2C_FUNC_SMBUS_WORD_DATA (I2C_FUNC_SMBUS_READ_WORD_DATA | \ - I2C_FUNC_SMBUS_WRITE_WORD_DATA) -#define I2C_FUNC_SMBUS_BLOCK_DATA (I2C_FUNC_SMBUS_READ_BLOCK_DATA | \ - I2C_FUNC_SMBUS_WRITE_BLOCK_DATA) -#define I2C_FUNC_SMBUS_I2C_BLOCK (I2C_FUNC_SMBUS_READ_I2C_BLOCK | \ - I2C_FUNC_SMBUS_WRITE_I2C_BLOCK) - /* * This is needed for ioctl_or_perror_and_die() since it only accepts pointers. */ -- cgit v1.2.3-55-g6feb From 2beb52499eccaee26e7e5c6fc10df73f6802efd9 Mon Sep 17 00:00:00 2001 From: Bartosz Golaszewski Date: Fri, 4 Sep 2015 10:38:48 +0200 Subject: i2c-tools: rename remaining defines Rename the defines not present in linux UAPI headers to better reflect their purpose. Signed-off-by: Bartosz Golaszewski Signed-off-by: Denys Vlasenko --- miscutils/i2c_tools.c | 46 +++++++++++++++++++++++----------------------- 1 file changed, 23 insertions(+), 23 deletions(-) (limited to 'miscutils') diff --git a/miscutils/i2c_tools.c b/miscutils/i2c_tools.c index b78860277..4b26b7bdc 100644 --- a/miscutils/i2c_tools.c +++ b/miscutils/i2c_tools.c @@ -64,11 +64,11 @@ #include #include -#define I2C_MAX_REGS 256 +#define I2CDUMP_NUM_REGS 256 -#define DETECT_MODE_AUTO 0 -#define DETECT_MODE_QUICK 1 -#define DETECT_MODE_READ 2 +#define I2CDETECT_MODE_AUTO 0 +#define I2CDETECT_MODE_QUICK 1 +#define I2CDETECT_MODE_READ 2 /* * This is needed for ioctl_or_perror_and_die() since it only accepts pointers. @@ -720,14 +720,14 @@ int i2cset_main(int argc, char **argv) #if ENABLE_I2CDUMP static int read_block_data(int buf_fd, int mode, int *block) { - uint8_t cblock[I2C_SMBUS_BLOCK_MAX + I2C_MAX_REGS]; + uint8_t cblock[I2C_SMBUS_BLOCK_MAX + I2CDUMP_NUM_REGS]; int res, blen = 0, tmp, i; if (mode == I2C_SMBUS_BLOCK_DATA || mode == I2C_SMBUS_I2C_BLOCK_DATA) { res = i2c_smbus_read_block_data(buf_fd, 0, cblock); blen = res; } else { - for (res = 0; res < I2C_MAX_REGS; res += tmp) { + for (res = 0; res < I2CDUMP_NUM_REGS; res += tmp) { tmp = i2c_smbus_read_i2c_block_data( buf_fd, res, I2C_SMBUS_BLOCK_MAX, cblock + res); @@ -736,14 +736,14 @@ static int read_block_data(int buf_fd, int mode, int *block) } } - if (res >= I2C_MAX_REGS) - res = I2C_MAX_REGS; + if (res >= I2CDUMP_NUM_REGS) + res = I2CDUMP_NUM_REGS; for (i = 0; i < res; i++) block[i] = cblock[i]; if (mode != I2C_SMBUS_BLOCK_DATA) - for (i = res; i < I2C_MAX_REGS; i++) + for (i = res; i < I2CDUMP_NUM_REGS; i++) block[i] = -1; } @@ -759,7 +759,7 @@ static void dump_data(int bus_fd, int mode, unsigned first, printf(" 0 1 2 3 4 5 6 7 8 9 a b c d e f" " 0123456789abcdef\n"); - for (i = 0; i < I2C_MAX_REGS; i += 0x10) { + for (i = 0; i < I2CDUMP_NUM_REGS; i += 0x10) { if (mode == I2C_SMBUS_BLOCK_DATA && i >= blen) break; if (i/16 < first/16) @@ -1200,7 +1200,7 @@ int i2cdetect_main(int argc UNUSED_PARAM, char **argv) opt_F = (1 << 4), opt_l = (1 << 5); const char *const optstr = "yaqrFl"; - int fd, bus_num, i, j, mode = DETECT_MODE_AUTO, status; + int fd, bus_num, i, j, mode = I2CDETECT_MODE_AUTO, status; unsigned first = 0x03, last = 0x77, opts; unsigned long funcs; @@ -1231,9 +1231,9 @@ int i2cdetect_main(int argc UNUSED_PARAM, char **argv) } if (opts & opt_r) - mode = DETECT_MODE_READ; + mode = I2CDETECT_MODE_READ; else if (opts & opt_q) - mode = DETECT_MODE_QUICK; + mode = I2CDETECT_MODE_QUICK; if (opts & opt_a) { first = 0x00; @@ -1250,14 +1250,14 @@ int i2cdetect_main(int argc UNUSED_PARAM, char **argv) if (!(funcs & (I2C_FUNC_SMBUS_QUICK | I2C_FUNC_SMBUS_READ_BYTE))) { no_support("detection commands"); } else - if (mode == DETECT_MODE_QUICK && !(funcs & I2C_FUNC_SMBUS_QUICK)) { + if (mode == I2CDETECT_MODE_QUICK && !(funcs & I2C_FUNC_SMBUS_QUICK)) { no_support("SMBus Quick Write command"); } else - if (mode == DETECT_MODE_READ && !(funcs & I2C_FUNC_SMBUS_READ_BYTE)) { + if (mode == I2CDETECT_MODE_READ && !(funcs & I2C_FUNC_SMBUS_READ_BYTE)) { no_support("SMBus Receive Byte command"); } - if (mode == DETECT_MODE_AUTO) { + if (mode == I2CDETECT_MODE_AUTO) { if (!(funcs & I2C_FUNC_SMBUS_QUICK)) will_skip("SMBus Quick Write"); if (!(funcs & I2C_FUNC_SMBUS_READ_BYTE)) @@ -1273,19 +1273,19 @@ int i2cdetect_main(int argc UNUSED_PARAM, char **argv) for(j = 0; j < 16; j++) { fflush_all(); - if (mode == DETECT_MODE_AUTO) { + if (mode == I2CDETECT_MODE_AUTO) { if ((i+j >= 0x30 && i+j <= 0x37) || (i+j >= 0x50 && i+j <= 0x5F)) - mode = DETECT_MODE_READ; + mode = I2CDETECT_MODE_READ; else - mode = DETECT_MODE_QUICK; + mode = I2CDETECT_MODE_QUICK; } /* Skip unwanted addresses. */ if (i+j < first || i+j > last - || (mode == DETECT_MODE_READ && !(funcs & I2C_FUNC_SMBUS_READ_BYTE)) - || (mode == DETECT_MODE_QUICK && !(funcs & I2C_FUNC_SMBUS_QUICK))) + || (mode == I2CDETECT_MODE_READ && !(funcs & I2C_FUNC_SMBUS_READ_BYTE)) + || (mode == I2CDETECT_MODE_QUICK && !(funcs & I2C_FUNC_SMBUS_QUICK))) { printf(" "); continue; @@ -1303,14 +1303,14 @@ int i2cdetect_main(int argc UNUSED_PARAM, char **argv) } switch (mode) { - case DETECT_MODE_READ: + case I2CDETECT_MODE_READ: /* * This is known to lock SMBus on various * write-only chips (mainly clock chips). */ status = i2c_smbus_read_byte(fd); break; - default: /* DETECT_MODE_QUICK: */ + default: /* I2CDETECT_MODE_QUICK: */ /* * This is known to corrupt the Atmel * AT24RF08 EEPROM. -- cgit v1.2.3-55-g6feb From d60752f8c9be5689a249ad518deb38061d4bc45e Mon Sep 17 00:00:00 2001 From: Denys Vlasenko Date: Wed, 7 Oct 2015 22:42:45 +0200 Subject: build system: -fno-builtin-printf Benefits are: drops reference to out-of-line putchar(), fixes a few cases of failed string merge. function old new delta i2cdump_main 1488 1502 +14 sha256_process_block64 423 433 +10 sendmail_main 1183 1185 +2 list_table 1114 1116 +2 i2cdetect_main 1235 1237 +2 fdisk_main 2852 2854 +2 builtin_type 119 121 +2 unicode_conv_to_printable2 325 324 -1 scan_recursive 380 378 -2 mkfs_minix_main 2687 2684 -3 buffer_fill_and_print 178 169 -9 putchar 152 - -152 ------------------------------------------------------------------------------ (add/remove: 0/2 grow/shrink: 7/4 up/down: 34/-167) Total: -133 bytes text data bss dec hex filename 937788 932 17676 956396 e97ec busybox_old 937564 932 17676 956172 e970c busybox_unstripped Signed-off-by: Denys Vlasenko --- Makefile.flags | 3 ++ coreutils/uniq.c | 2 +- coreutils/who.c | 2 +- editors/diff.c | 4 +- editors/ed.c | 2 +- loginutils/add-remove-shell.c | 4 +- mailutils/mail.c | 2 +- mailutils/sendmail.c | 2 +- miscutils/hdparm.c | 58 +++++++++++++------------- miscutils/i2c_tools.c | 26 ++++++------ networking/arping.c | 2 +- networking/brctl.c | 4 +- printutils/lpd.c | 8 ++-- procps/iostat.c | 2 +- procps/powertop.c | 2 +- shell/ash.c | 2 +- shell/hush.c | 2 +- shell/shell_common.c | 2 +- util-linux/fdformat.c | 4 +- util-linux/fdisk.c | 94 +++++++++++++++++++++---------------------- util-linux/fdisk_gpt.c | 4 +- util-linux/fsck_minix.c | 16 ++++---- util-linux/getopt.c | 2 +- util-linux/ipcrm.c | 2 +- 24 files changed, 127 insertions(+), 124 deletions(-) (limited to 'miscutils') diff --git a/Makefile.flags b/Makefile.flags index 2bc83d1d9..b6cd32e42 100644 --- a/Makefile.flags +++ b/Makefile.flags @@ -56,6 +56,9 @@ CFLAGS += $(call cc-option,-falign-functions=1 -falign-jumps=1 -falign-labels=1 # Defeat .eh_frame bloat (gcc 4.6.3 x86-32 defconfig: 20% smaller busybox binary): CFLAGS += $(call cc-option,-fno-unwind-tables,) CFLAGS += $(call cc-option,-fno-asynchronous-unwind-tables,) +# No automatic printf->puts,putchar conversions +# (try disabling this and comparing assembly, it's instructive) +CFLAGS += $(call cc-option,-fno-builtin-printf,) # FIXME: These warnings are at least partially to be concerned about and should # be fixed.. diff --git a/coreutils/uniq.c b/coreutils/uniq.c index 9208d34ec..e0133998a 100644 --- a/coreutils/uniq.c +++ b/coreutils/uniq.c @@ -112,7 +112,7 @@ int uniq_main(int argc UNUSED_PARAM, char **argv) /* %7lu matches GNU coreutils 6.9 */ printf("%7lu ", dups + 1); } - printf("%s\n", old_line); + puts(old_line); } free(old_line); } diff --git a/coreutils/who.c b/coreutils/who.c index 8337212c9..f694d0c60 100644 --- a/coreutils/who.c +++ b/coreutils/who.c @@ -81,7 +81,7 @@ int who_main(int argc UNUSED_PARAM, char **argv) opt_complementary = "=0"; opt = getopt32(argv, do_users ? "" : "aH"); if (opt & 2) // -H - printf("USER\t\tTTY\t\tIDLE\tTIME\t\t HOST\n"); + puts("USER\t\tTTY\t\tIDLE\tTIME\t\t HOST"); setutxent(); while ((ut = getutxent()) != NULL) { diff --git a/editors/diff.c b/editors/diff.c index e0adcee59..a892cfdf2 100644 --- a/editors/diff.c +++ b/editors/diff.c @@ -433,7 +433,7 @@ static void fetch(FILE_and_pos_t *ft, const off_t *ix, int a, int b, int ch) for (j = 0, col = 0; j < ix[i] - ix[i - 1]; j++) { int c = fgetc(ft->ft_fp); if (c == EOF) { - printf("\n\\ No newline at end of file\n"); + puts("\n\\ No newline at end of file"); return; } ft->ft_pos++; @@ -692,7 +692,7 @@ static bool diff(FILE* fp[2], char *file[2]) continue; printf(",%d", (a < b) ? b - a + 1 : 0); } - printf(" @@\n"); + puts(" @@"); /* * Output changes in "unified" diff format--the old and new lines * are printed together. diff --git a/editors/ed.c b/editors/ed.c index f0e5e4d5d..a4c419099 100644 --- a/editors/ed.c +++ b/editors/ed.c @@ -206,7 +206,7 @@ static void doCommands(void) if (fileName) printf("\"%s\"\n", fileName); else - printf("No file name\n"); + puts("No file name"); break; } free(fileName); diff --git a/loginutils/add-remove-shell.c b/loginutils/add-remove-shell.c index e492b6e5a..9419ff5e7 100644 --- a/loginutils/add-remove-shell.c +++ b/loginutils/add-remove-shell.c @@ -100,7 +100,7 @@ int add_remove_shell_main(int argc UNUSED_PARAM, char **argv) cpp++; } /* copy shell name from old to new file */ - printf("%s\n", line); + puts(line); next_line: free(line); } @@ -112,7 +112,7 @@ int add_remove_shell_main(int argc UNUSED_PARAM, char **argv) char **cpp = argv; while (*cpp) { if (*cpp != dont_add) - printf("%s\n", *cpp); + puts(*cpp); cpp++; } } diff --git a/mailutils/mail.c b/mailutils/mail.c index 199f64407..a7e43c0d1 100644 --- a/mailutils/mail.c +++ b/mailutils/mail.c @@ -154,7 +154,7 @@ void FAST_FUNC encode_base64(char *fname, const char *text, const char *eol) // encode the buffer we just read in bb_uuencode(dst_buf, src_buf, size, bb_uuenc_tbl_base64); if (fname) { - printf("%s\n", eol); + puts(eol); } else { src_buf += size; len -= size; diff --git a/mailutils/sendmail.c b/mailutils/sendmail.c index 9455b4e7a..4355e4dc5 100644 --- a/mailutils/sendmail.c +++ b/mailutils/sendmail.c @@ -375,7 +375,7 @@ int sendmail_main(int argc UNUSED_PARAM, char **argv) // N.B. we need to escape the leading dot regardless of // whether it is single or not character on the line if ('.' == s[0] /*&& '\0' == s[1] */) - printf("."); + bb_putchar('.'); // dump read line send_r_n(s); free(s); diff --git a/miscutils/hdparm.c b/miscutils/hdparm.c index f0e9c9d75..9c486e7aa 100644 --- a/miscutils/hdparm.c +++ b/miscutils/hdparm.c @@ -763,9 +763,9 @@ static void identify(uint16_t *val) ) { like_std = 5; if ((val[CONFIG]==STBY_NID_VAL) || (val[CONFIG]==STBY_ID_VAL)) - printf("powers-up in standby; SET FEATURES subcmd spins-up.\n"); + puts("powers-up in standby; SET FEATURES subcmd spins-up."); if (((val[CONFIG]==STBY_NID_VAL) || (val[CONFIG]==PWRD_NID_VAL)) && (val[GEN_CONFIG] & INCOMPLETE)) - printf("\n\tWARNING: ID response incomplete.\n\tFollowing data may be incorrect.\n\n"); + puts("\n\tWARNING: ID response incomplete.\n\tFollowing data may be incorrect.\n"); } /* output the model and serial numbers and the fw revision */ @@ -875,7 +875,7 @@ static void identify(uint16_t *val) if (min_std == 0xffff) min_std = like_std > 4 ? like_std - 3 : 1; - printf("Configuration:\n"); + puts("Configuration:"); /* more info from the general configuration word */ if ((eqpt != CDROM) && (like_std == 1)) { jj = val[GEN_CONFIG] >> 1; @@ -909,7 +909,7 @@ static void identify(uint16_t *val) mm = 0; bbbig = 0; if ((ll > 0x00FBFC10) && (!val[LCYLS])) - printf("\tCHS addressing not supported\n"); + puts("\tCHS addressing not supported"); else { jj = val[WHATS_VALID] & OK_W54_58; printf("\tLogical\t\tmax\tcurrent\n" @@ -980,7 +980,7 @@ static void identify(uint16_t *val) !(val[CAPAB_0] & IORDY_SUP) ? "(may be)" : "", (val[CAPAB_0] & IORDY_OFF) ? "" :"not"); } else - printf("no IORDY\n"); + puts("no IORDY"); if ((like_std == 1) && val[BUF_TYPE]) { printf("\tBuffer type: %04x: %s%s\n", val[BUF_TYPE], @@ -1012,13 +1012,13 @@ static void identify(uint16_t *val) } printf("\tR/W multiple sector transfer: "); if ((like_std < 3) && !(val[SECTOR_XFER_MAX] & SECTOR_XFER)) - printf("not supported\n"); + puts("not supported"); else { printf("Max = %u\tCurrent = ", val[SECTOR_XFER_MAX] & SECTOR_XFER); if (val[SECTOR_XFER_CUR] & MULTIPLE_SETTING_VALID) printf("%u\n", val[SECTOR_XFER_CUR] & SECTOR_XFER); else - printf("?\n"); + puts("?"); } if ((like_std > 3) && (val[CMDS_SUPP_1] & 0x0008)) { /* We print out elsewhere whether the APM feature is enabled or @@ -1040,7 +1040,7 @@ static void identify(uint16_t *val) } else { /* ATAPI */ if (eqpt != CDROM && (val[CAPAB_0] & SWRST_REQ)) - printf("\tATA sw reset required\n"); + puts("\tATA sw reset required"); if (val[PKT_REL] || val[SVC_NBSY]) { printf("\tOverlap support:"); @@ -1056,7 +1056,7 @@ static void identify(uint16_t *val) /* DMA stuff. Check that only one DMA mode is selected. */ printf("\tDMA: "); if (!(val[CAPAB_0] & DMA_SUP)) - printf("not supported\n"); + puts("not supported"); else { if (val[DMA_MODE] && !val[SINGLE_DMA] && !val[MULTI_DMA]) printf(" sdma%u\n", (val[DMA_MODE] & MODE) >> 8); @@ -1079,7 +1079,7 @@ static void identify(uint16_t *val) bb_putchar('\n'); if ((dev == ATAPI_DEV) && (eqpt != CDROM) && (val[CAPAB_0] & DMA_IL_SUP)) - printf("\t\tInterleaved DMA support\n"); + puts("\t\tInterleaved DMA support"); if ((val[WHATS_VALID] & OK_W64_70) && (val[DMA_TIME_MIN] || val[DMA_TIME_NORM]) @@ -1121,8 +1121,8 @@ static void identify(uint16_t *val) } if ((val[CMDS_SUPP_1] & VALID) == VALID_VAL) { - printf("Commands/features:\n" - "\tEnabled\tSupported:\n"); + puts("Commands/features:\n" + "\tEnabled\tSupported:"); jj = val[CMDS_SUPP_0]; kk = val[CMDS_EN_0]; for (ii = 0; ii < NUM_CMD_FEAT_STR; ii++) { @@ -1150,7 +1150,7 @@ static void identify(uint16_t *val) if ((eqpt != CDROM) && (like_std > 3) && (val[SECU_STATUS] || val[ERASE_TIME] || val[ENH_ERASE_TIME]) ) { - printf("Security:\n"); + puts("Security:"); if (val[PSWD_CODE] && (val[PSWD_CODE] != NOVAL_1)) printf("\tMaster password revision code = %u\n", val[PSWD_CODE]); jj = val[SECU_STATUS]; @@ -1366,7 +1366,7 @@ static NOINLINE void dump_identity(const struct hd_driveid *id) } } #endif /* __NEW_HD_DRIVE_ID */ - printf("\n\n * current active mode\n\n"); + puts("\n\n * current active mode\n"); } #endif @@ -1507,7 +1507,7 @@ static void bus_state_value(unsigned value) else if (value == BUSSTATE_OFF) on_off(0); else if (value == BUSSTATE_TRISTATE) - printf(" (tristate)\n"); + puts(" (tristate)"); else printf(" (unknown: %u)\n", value); } @@ -1531,7 +1531,7 @@ static void interpret_standby(uint8_t standby) printf("vendor-specific"); if (standby == 254) printf("reserved"); - printf(")\n"); + puts(")"); } static const uint8_t xfermode_val[] ALIGN1 = { @@ -1582,7 +1582,7 @@ static void interpret_xfermode(unsigned xfermode) printf("UltraDMA mode%u", xfermode - 64); else printf("unknown"); - printf(")\n"); + puts(")"); } #endif /* HDIO_DRIVE_CMD */ @@ -1633,7 +1633,7 @@ static void process_dev(char *devname) if (noisy_piomode) { printf(" attempting to "); if (piomode == 255) - printf("auto-tune PIO mode\n"); + puts("auto-tune PIO mode"); else if (piomode < 100) printf("set PIO mode to %d\n", piomode); else if (piomode < 200) @@ -1762,7 +1762,7 @@ static void process_dev(char *devname) #ifndef WIN_STANDBYNOW2 #define WIN_STANDBYNOW2 0x94 #endif - printf(" issuing standby command\n"); + puts(" issuing standby command"); args[0] = WIN_STANDBYNOW1; ioctl_alt_or_warn(HDIO_DRIVE_CMD, args, WIN_STANDBYNOW2); } @@ -1773,13 +1773,13 @@ static void process_dev(char *devname) #ifndef WIN_SLEEPNOW2 #define WIN_SLEEPNOW2 0x99 #endif - printf(" issuing sleep command\n"); + puts(" issuing sleep command"); args[0] = WIN_SLEEPNOW1; ioctl_alt_or_warn(HDIO_DRIVE_CMD, args, WIN_SLEEPNOW2); } if (set_seagate) { args[0] = 0xfb; - printf(" disabling Seagate auto powersaving mode\n"); + puts(" disabling Seagate auto powersaving mode"); ioctl_or_warn(fd, HDIO_DRIVE_CMD, &args); } if (getset_standby == IS_SET) { @@ -1815,17 +1815,17 @@ static void process_dev(char *devname) if (!ioctl_or_warn(fd, HDIO_GET_32BIT, &parm)) { printf(" IO_support\t=%3ld (", parm); if (parm == 0) - printf("default 16-bit)\n"); + puts("default 16-bit)"); else if (parm == 2) - printf("16-bit)\n"); + puts("16-bit)"); else if (parm == 1) - printf("32-bit)\n"); + puts("32-bit)"); else if (parm == 3) - printf("32-bit w/sync)\n"); + puts("32-bit w/sync)"); else if (parm == 8) - printf("Request-Queue-Bypass)\n"); + puts("Request-Queue-Bypass)"); else - printf("\?\?\?)\n"); + puts("\?\?\?)"); } } if (getset_unmask) { @@ -1837,7 +1837,7 @@ static void process_dev(char *devname) if (!ioctl_or_warn(fd, HDIO_GET_DMA, &parm)) { printf(fmt, "using_dma", parm); if (parm == 8) - printf(" (DMA-Assisted-PIO)\n"); + puts(" (DMA-Assisted-PIO)"); else on_off(parm != 0); } @@ -1921,7 +1921,7 @@ static void process_dev(char *devname) id.multsect_valid &= ~1; dump_identity(&id); } else if (errno == -ENOMSG) - printf(" no identification info available\n"); + puts(" no identification info available"); else if (ENABLE_IOCTL_HEX2STR_ERROR) /* To be coherent with ioctl_or_warn */ bb_perror_msg("HDIO_GET_IDENTITY"); else diff --git a/miscutils/i2c_tools.c b/miscutils/i2c_tools.c index 4b26b7bdc..292ff88dd 100644 --- a/miscutils/i2c_tools.c +++ b/miscutils/i2c_tools.c @@ -701,7 +701,7 @@ int i2cset_main(int argc, char **argv) } if (status < 0) { - printf("Warning - readback failed\n"); + puts("Warning - readback failed"); } else if (status != val) { printf("Warning - data mismatch - wrote " @@ -756,8 +756,8 @@ static void dump_data(int bus_fd, int mode, unsigned first, { int i, j, res; - printf(" 0 1 2 3 4 5 6 7 8 9 a b c d e f" - " 0123456789abcdef\n"); + puts(" 0 1 2 3 4 5 6 7 8 9 a b c d e f" + " 0123456789abcdef"); for (i = 0; i < I2CDUMP_NUM_REGS; i += 0x10) { if (mode == I2C_SMBUS_BLOCK_DATA && i >= blen) @@ -826,22 +826,22 @@ static void dump_data(int bus_fd, int mode, unsigned first, break; /* Skip unwanted registers */ if (i+j < first || i+j > last) { - printf(" "); + bb_putchar(' '); continue; } res = block[i+j]; if (res < 0) { - printf("X"); + bb_putchar('X'); } else if (res == 0x00 || res == 0xff) { - printf("."); + bb_putchar('.'); } else if (res < 32 || res >= 127) { - printf("?"); + bb_putchar('?'); } else { - printf("%c", res); + bb_putchar(res); } } - printf("\n"); + bb_putchar('\n'); } } @@ -850,7 +850,7 @@ static void dump_word_data(int bus_fd, unsigned first, unsigned last) int i, j, rv; /* Word data. */ - printf(" 0,8 1,9 2,a 3,b 4,c 5,d 6,e 7,f\n"); + puts(" 0,8 1,9 2,a 3,b 4,c 5,d 6,e 7,f"); for (i = 0; i < 256; i += 8) { if (i/8 < first/8) continue; @@ -871,7 +871,7 @@ static void dump_word_data(int bus_fd, unsigned first, unsigned last) else printf("%04x ", rv & 0xffff); } - printf("\n"); + bb_putchar('\n'); } } @@ -1267,7 +1267,7 @@ int i2cdetect_main(int argc UNUSED_PARAM, char **argv) if (!(opts & opt_y)) confirm_action(-1, -1, -1, 0); - printf(" 0 1 2 3 4 5 6 7 8 9 a b c d e f\n"); + puts(" 0 1 2 3 4 5 6 7 8 9 a b c d e f"); for (i = 0; i < 128; i += 16) { printf("%02x: ", i); for(j = 0; j < 16; j++) { @@ -1325,7 +1325,7 @@ int i2cdetect_main(int argc UNUSED_PARAM, char **argv) else printf("%02x ", i+j); } - printf("\n"); + bb_putchar('\n'); } return 0; diff --git a/networking/arping.c b/networking/arping.c index ce7fa299c..ef205e5e6 100644 --- a/networking/arping.c +++ b/networking/arping.c @@ -249,7 +249,7 @@ static void recv_pack(unsigned char *buf, int len, struct sockaddr_ll *FROM) unsigned diff = MONOTONIC_US() - last; printf(" %u.%03ums\n", diff / 1000, diff % 1000); } else { - printf(" UNSOLICITED?\n"); + puts(" UNSOLICITED?"); } fflush_all(); } diff --git a/networking/brctl.c b/networking/brctl.c index 8043d600b..c01a86998 100644 --- a/networking/brctl.c +++ b/networking/brctl.c @@ -217,7 +217,7 @@ int brctl_main(int argc UNUSED_PARAM, char **argv) arm_ioctl(args, BRCTL_GET_BRIDGES, (unsigned long) bridx, MAX_PORTS); num = xioctl(fd, SIOCGIFBR, args); - printf("bridge name\tbridge id\t\tSTP enabled\tinterfaces\n"); + puts("bridge name\tbridge id\t\tSTP enabled\tinterfaces"); for (i = 0; i < num; i++) { char ifname[IFNAMSIZ]; int j, tabs; @@ -236,7 +236,7 @@ int brctl_main(int argc UNUSED_PARAM, char **argv) /* print bridge id */ x = (unsigned char *) &bi.bridge_id; for (j = 0; j < 8; j++) { - printf("%.2x", x[j]); + printf("%02x", x[j]); if (j == 1) bb_putchar('.'); } diff --git a/printutils/lpd.c b/printutils/lpd.c index eaf42c08b..c98bbb347 100644 --- a/printutils/lpd.c +++ b/printutils/lpd.c @@ -200,7 +200,7 @@ int lpd_main(int argc UNUSED_PARAM, char *argv[]) if (2 != s[0] && 3 != s[0]) goto unsupported_cmd; if (spooling & (1 << (s[0]-1))) { - printf("Duplicated subcommand\n"); + puts("Duplicated subcommand"); goto err_exit; } // get filename @@ -208,7 +208,7 @@ int lpd_main(int argc UNUSED_PARAM, char *argv[]) fname = strchr(s, ' '); if (!fname) { // bad_fname: - printf("No or bad filename\n"); + puts("No or bad filename"); goto err_exit; } *fname++ = '\0'; @@ -219,13 +219,13 @@ int lpd_main(int argc UNUSED_PARAM, char *argv[]) // get length expected_len = bb_strtou(s + 1, NULL, 10); if (errno || expected_len < 0) { - printf("Bad length\n"); + puts("Bad length"); goto err_exit; } if (2 == s[0] && expected_len > 16 * 1024) { // SECURITY: // ctrlfile can't be big (we want to read it back later!) - printf("File is too big\n"); + puts("File is too big"); goto err_exit; } diff --git a/procps/iostat.c b/procps/iostat.c index 8d272c87c..c290c594b 100644 --- a/procps/iostat.c +++ b/procps/iostat.c @@ -142,7 +142,7 @@ static void print_timestamp(void) /* %x: date representation for the current locale */ /* %X: time representation for the current locale */ strftime(buf, sizeof(buf), "%x %X", &G.tmtime); - printf("%s\n", buf); + puts(buf); } static cputime_t get_smp_uptime(void) diff --git a/procps/powertop.c b/procps/powertop.c index 1de5d329e..18418100f 100644 --- a/procps/powertop.c +++ b/procps/powertop.c @@ -704,7 +704,7 @@ int powertop_main(int UNUSED_PARAM argc, char UNUSED_PARAM **argv) /* Get number of CPUs */ G.total_cpus = get_cpu_count(); - printf("Collecting data for "DEFAULT_SLEEP_STR" seconds\n"); + puts("Collecting data for "DEFAULT_SLEEP_STR" seconds"); #if ENABLE_FEATURE_USE_TERMIOS tcgetattr(0, (void *)&G.init_settings); diff --git a/shell/ash.c b/shell/ash.c index b835415b5..7d20b8860 100644 --- a/shell/ash.c +++ b/shell/ash.c @@ -9681,7 +9681,7 @@ preadfd(void) } # if ENABLE_ASH_IDLE_TIMEOUT else if (errno == EAGAIN && timeout > 0) { - printf("\007timed out waiting for input: auto-logout\n"); + puts("\007timed out waiting for input: auto-logout"); exitshell(); } # endif diff --git a/shell/hush.c b/shell/hush.c index bccd9c1e9..f085ed3eb 100644 --- a/shell/hush.c +++ b/shell/hush.c @@ -6794,7 +6794,7 @@ static int checkjobs(struct pipe *fg_pipe) int sig = WTERMSIG(status); if (i == fg_pipe->num_cmds-1) /* TODO: use strsignal() instead for bash compat? but that's bloat... */ - printf("%s\n", sig == SIGINT || sig == SIGPIPE ? "" : get_signame(sig)); + puts(sig == SIGINT || sig == SIGPIPE ? "" : get_signame(sig)); /* TODO: if (WCOREDUMP(status)) + " (core dumped)"; */ /* TODO: MIPS has 128 sigs (1..128), what if sig==128 here? * Maybe we need to use sig | 128? */ diff --git a/shell/shell_common.c b/shell/shell_common.c index 2b6f7dc92..8c9607c8c 100644 --- a/shell/shell_common.c +++ b/shell/shell_common.c @@ -380,7 +380,7 @@ static void printlim(unsigned opts, const struct rlimit *limit, val = limit->rlim_cur; if (val == RLIM_INFINITY) - printf("unlimited\n"); + puts("unlimited"); else { val >>= l->factor_shift; printf("%llu\n", (long long) val); diff --git a/util-linux/fdformat.c b/util-linux/fdformat.c index 6f49cec8f..6ef6445e6 100644 --- a/util-linux/fdformat.c +++ b/util-linux/fdformat.c @@ -93,7 +93,7 @@ int fdformat_main(int argc UNUSED_PARAM, char **argv) } xioctl(fd, FDFMTEND, NULL); - printf("done\n"); + puts("Done"); /* VERIFY */ if (verify) { @@ -126,7 +126,7 @@ int fdformat_main(int argc UNUSED_PARAM, char **argv) if (ENABLE_FEATURE_CLEAN_UP) free(data); - printf("done\n"); + puts("Done"); } if (ENABLE_FEATURE_CLEAN_UP) close(fd); diff --git a/util-linux/fdisk.c b/util-linux/fdisk.c index 7fe70fb72..f49ce95a4 100644 --- a/util-linux/fdisk.c +++ b/util-linux/fdisk.c @@ -1102,11 +1102,11 @@ warn_geometry(void) printf(" sectors"); if (!g_cylinders) printf(" cylinders"); - printf( #if ENABLE_FEATURE_FDISK_WRITABLE - " (settable in the extra functions menu)" + puts(" (settable in the extra functions menu)"); +#else + bb_putchar('\n'); #endif - "\n"); return 1; } @@ -1150,7 +1150,7 @@ read_extended(int ext) p = pex->part_table; if (!get_start_sect(p)) { - printf("Bad offset in primary extended partition\n"); + puts("Bad offset in primary extended partition"); return; } @@ -1450,8 +1450,8 @@ static int get_boot(void) current_label_type = LABEL_OSF; return 0; } - printf("This disk has both DOS and BSD magic.\n" - "Give the 'b' command to go to BSD mode.\n"); + puts("This disk has both DOS and BSD magic.\n" + "Give the 'b' command to go to BSD mode."); } #endif @@ -1461,9 +1461,9 @@ static int get_boot(void) #else if (!valid_part_table_flag(MBRbuffer)) { if (what == OPEN_MAIN) { - printf("Device contains neither a valid DOS " - "partition table, nor Sun, SGI, OSF or GPT " - "disklabel\n"); + puts("Device contains neither a valid DOS " + "partition table, nor Sun, SGI, OSF or GPT " + "disklabel"); #ifdef __sparc__ IF_FEATURE_SUN_LABEL(create_sunlabel();) #else @@ -1596,7 +1596,7 @@ read_int(sector_t low, sector_t dflt, sector_t high, sector_t base, const char * } if (value >= low && value <= high) break; - printf("Value is out of range\n"); + puts("Value is out of range"); } return value; } @@ -1641,7 +1641,7 @@ get_existing_partition(int warn, unsigned max) printf("Selected partition %u\n", pno+1); return pno; } - printf("No partition is defined yet!\n"); + puts("No partition is defined yet!"); return -1; not_unique: @@ -1668,7 +1668,7 @@ get_nonexisting_partition(int warn, unsigned max) printf("Selected partition %u\n", pno+1); return pno; } - printf("All primary partitions have been defined already!\n"); + puts("All primary partitions have been defined already!"); return -1; not_unique: @@ -1703,10 +1703,10 @@ toggle_dos_compatibility_flag(void) dos_compatible_flag = 1 - dos_compatible_flag; if (dos_compatible_flag) { sector_offset = g_sectors; - printf("DOS Compatibility flag is set\n"); + printf("DOS Compatibility flag is %sset\n", ""); } else { sector_offset = 1; - printf("DOS Compatibility flag is not set\n"); + printf("DOS Compatibility flag is %sset\n", "not "); } } @@ -1813,16 +1813,16 @@ change_sysid(void) sys = read_hex(get_sys_types()); if (!sys && !LABEL_IS_SGI && !LABEL_IS_SUN) { - printf("Type 0 means free space to many systems\n" - "(but not to Linux). Having partitions of\n" - "type 0 is probably unwise.\n"); + puts("Type 0 means free space to many systems\n" + "(but not to Linux). Having partitions of\n" + "type 0 is probably unwise."); /* break; */ } if (!LABEL_IS_SUN && !LABEL_IS_SGI) { if (IS_EXTENDED(sys) != IS_EXTENDED(p->sys_ind)) { - printf("You cannot change a partition into" - " an extended one or vice versa\n"); + puts("You cannot change a partition into" + " an extended one or vice versa"); break; } } @@ -1830,10 +1830,10 @@ change_sysid(void) if (sys < 256) { #if ENABLE_FEATURE_SUN_LABEL if (LABEL_IS_SUN && i == 2 && sys != SUN_WHOLE_DISK) - printf("Consider leaving partition 3 " - "as Whole disk (5),\n" - "as SunOS/Solaris expects it and " - "even Linux likes it\n\n"); + puts("Consider leaving partition 3 " + "as Whole disk (5),\n" + "as SunOS/Solaris expects it and " + "even Linux likes it\n"); #endif #if ENABLE_FEATURE_SGI_LABEL if (LABEL_IS_SGI && @@ -1842,10 +1842,10 @@ change_sysid(void) (i == 8 && sys != 0) ) ) { - printf("Consider leaving partition 9 " - "as volume header (0),\nand " - "partition 11 as entire volume (6)" - "as IRIX expects it\n\n"); + puts("Consider leaving partition 9 " + "as volume header (0),\nand " + "partition 11 as entire volume (6)" + "as IRIX expects it\n"); } #endif if (sys == origsys) @@ -2067,7 +2067,7 @@ fix_partition_table_order(void) int i,k; if (!wrong_p_order(NULL)) { - printf("Ordering is already correct\n\n"); + puts("Ordering is already correct\n"); return; } @@ -2095,7 +2095,7 @@ fix_partition_table_order(void) if (i) fix_chain_of_logicals(); - printf("Done.\n"); + puts("Done"); } #endif @@ -2178,7 +2178,7 @@ list_table(int xtra) * if this is a sgi, sun or aix labeled disk... */ if (LABEL_IS_DOS && wrong_p_order(NULL)) { /* FIXME */ - printf("\nPartition table entries are not in disk order\n"); + puts("\nPartition table entries are not in disk order"); } } @@ -2192,7 +2192,7 @@ x_list_table(int extend) printf("\nDisk %s: %u heads, %u sectors, %u cylinders\n\n", disk_device, g_heads, g_sectors, g_cylinders); - printf("Nr AF Hd Sec Cyl Hd Sec Cyl Start Size ID\n"); + puts("Nr AF Hd Sec Cyl Hd Sec Cyl Start Size ID"); for (i = 0; i < g_partitions; i++) { pe = &ptes[i]; p = (extend ? pe->ext_pointer : pe->part_table); @@ -2419,7 +2419,7 @@ add_partition(int n, int sys) limit = first[i] - 1; } if (start > limit) { - printf("No free sectors available\n"); + puts("No free sectors available"); if (n > 4) g_partitions--; return; @@ -2490,9 +2490,9 @@ new_partition(void) return; } if (LABEL_IS_AIX) { - printf("Sorry - this fdisk cannot handle AIX disk labels.\n" + puts("Sorry - this fdisk cannot handle AIX disk labels.\n" "If you want to add DOS-type partitions, create a new empty DOS partition\n" -"table first (use 'o'). This will destroy the present disk contents.\n"); +"table first (use 'o'). This will destroy the present disk contents."); return; } @@ -2500,7 +2500,7 @@ new_partition(void) free_primary += !ptes[i].part_table->sys_ind; if (!free_primary && g_partitions >= MAXIMUM_PARTS) { - printf("The maximum number of partitions has been created\n"); + puts("The maximum number of partitions has been created"); return; } @@ -2508,8 +2508,8 @@ new_partition(void) if (extended_offset) add_logical(); else - printf("You must delete some partition and add " - "an extended partition first\n"); + puts("You must delete some partition and add " + "an extended partition first"); } else { char c, line[80]; snprintf(line, sizeof(line), @@ -2547,7 +2547,7 @@ reread_partition_table(int leave) { int i; - printf("Calling ioctl() to re-read partition table\n"); + puts("Calling ioctl() to re-read partition table"); sync(); /* Users with slow external USB disks on a 320MHz ARM system (year 2011) * report that sleep is needed, otherwise BLKRRPART may fail with -EIO: @@ -2558,10 +2558,10 @@ reread_partition_table(int leave) "failed, kernel still uses old table"); #if 0 if (dos_changed) - printf( + puts( "\nWARNING: If you have created or modified any DOS 6.x\n" "partitions, please see the fdisk manual page for additional\n" - "information\n"); + "information"); #endif if (leave) { @@ -2589,7 +2589,7 @@ write_table(void) } } else if (LABEL_IS_SGI) { - /* no test on change? the printf below might be mistaken */ + /* no test on change? the "altered" msg below might be mistaken */ sgi_write_table(); } else if (LABEL_IS_SUN) { @@ -2601,7 +2601,7 @@ write_table(void) } } - printf("The partition table has been altered.\n"); + puts("The partition table has been altered."); reread_partition_table(1); } #endif /* FEATURE_FDISK_WRITABLE */ @@ -2744,8 +2744,8 @@ xselect(void) user_sectors = g_sectors = read_int(1, g_sectors, 63, 0, "Number of sectors"); if (dos_compatible_flag) { sector_offset = g_sectors; - printf("Warning: setting sector offset for DOS " - "compatiblity\n"); + puts("Warning: setting sector offset for DOS " + "compatiblity"); } update_units(); break; @@ -3024,7 +3024,7 @@ int fdisk_main(int argc UNUSED_PARAM, char **argv) sgi_get_bootfile()); if (read_maybe_empty("Please enter the name of the " "new boot file: ") == '\n') - printf("Boot file unchanged\n"); + puts("Boot file unchanged"); else sgi_set_bootfile(line_ptr); } @@ -3106,8 +3106,8 @@ int fdisk_main(int argc UNUSED_PARAM, char **argv) #if ENABLE_FEATURE_FDISK_ADVANCED case 'x': if (LABEL_IS_SGI) { - printf("\n\tSorry, no experts menu for SGI " - "partition tables available\n\n"); + puts("\n\tSorry, no experts menu for SGI " + "partition tables available\n"); } else xselect(); break; diff --git a/util-linux/fdisk_gpt.c b/util-linux/fdisk_gpt.c index 5786d5f7d..715e227ca 100644 --- a/util-linux/fdisk_gpt.c +++ b/util-linux/fdisk_gpt.c @@ -106,7 +106,7 @@ gpt_list_table(int xtra UNUSED_PARAM) (unsigned long long)SWAP_LE64(gpt_hdr->first_usable_lba), (unsigned long long)SWAP_LE64(gpt_hdr->last_usable_lba)); - printf("Number Start (sector) End (sector) Size Code Name\n"); + puts("Number Start (sector) End (sector) Size Code Name"); for (i = 0; i < n_parts; i++) { gpt_partition *p = gpt_part(i); if (p->lba_start) { @@ -119,7 +119,7 @@ gpt_list_table(int xtra UNUSED_PARAM) numstr6, 0x0700 /* FIXME */); gpt_print_wide(p->name, 18); - printf("\n"); + bb_putchar('\n'); } } } diff --git a/util-linux/fsck_minix.c b/util-linux/fsck_minix.c index 33767a1af..d2f3524b4 100644 --- a/util-linux/fsck_minix.c +++ b/util-linux/fsck_minix.c @@ -371,9 +371,9 @@ static int ask(const char *string, int def) } } if (def) - printf("y\n"); + puts("y"); else { - printf("n\n"); + puts("n"); errors_uncorrected = 1; } return def; @@ -405,7 +405,7 @@ static void check_mount(void) if (isatty(0) && isatty(1)) cont = ask("Do you really want to continue", 0); if (!cont) { - printf("Check aborted\n"); + puts("Check aborted"); exit(EXIT_SUCCESS); } } @@ -470,8 +470,8 @@ static void write_block(unsigned nr, void *addr) if (!nr) return; if (nr < FIRSTZONE || nr >= ZONES) { - printf("Internal error: trying to write bad block\n" - "Write request ignored\n"); + puts("Internal error: trying to write bad block\n" + "Write request ignored"); errors_uncorrected = 1; return; } @@ -659,7 +659,7 @@ static void read_tables(void) if (INODE_BUFFER_SIZE != read(dev_fd, inode_buffer, INODE_BUFFER_SIZE)) die("can't read inodes"); if (NORM_FIRSTZONE != FIRSTZONE) { - printf("warning: firstzone!=norm_firstzone\n"); + puts("warning: firstzone!=norm_firstzone"); errors_uncorrected = 1; } get_dirsize(); @@ -713,7 +713,7 @@ static void get_inode_common(unsigned nr, uint16_t i_mode) } else links++; if (!++inode_count[nr]) { - printf("Warning: inode count too big\n"); + puts("Warning: inode count too big"); inode_count[nr]--; errors_uncorrected = 1; } @@ -1299,7 +1299,7 @@ int fsck_minix_main(int argc UNUSED_PARAM, char **argv) } if (changed) { write_tables(); - printf("FILE SYSTEM HAS BEEN CHANGED\n"); + puts("FILE SYSTEM HAS BEEN CHANGED"); sync(); } else if (OPT_repair) write_superblock(); diff --git a/util-linux/getopt.c b/util-linux/getopt.c index 58df1c823..b9dadf13c 100644 --- a/util-linux/getopt.c +++ b/util-linux/getopt.c @@ -378,7 +378,7 @@ int getopt_main(int argc, char **argv) if (compatible) { /* For some reason, the original getopt gave no error * when there were no arguments. */ - printf(" --\n"); + puts(" --"); return 0; } bb_error_msg_and_die("missing optstring argument"); diff --git a/util-linux/ipcrm.c b/util-linux/ipcrm.c index 888f70ef8..38d81af50 100644 --- a/util-linux/ipcrm.c +++ b/util-linux/ipcrm.c @@ -119,7 +119,7 @@ int ipcrm_main(int argc, char **argv) if (remove_ids(what, &argv[2])) fflush_stdout_and_exit(EXIT_FAILURE); - printf("resource(s) deleted\n"); + puts("resource(s) deleted"); return 0; } } -- cgit v1.2.3-55-g6feb From 7f3a2a22569eb8e4c9fcc1c7f4e51fe0c6155dae Mon Sep 17 00:00:00 2001 From: Denys Vlasenko Date: Thu, 8 Oct 2015 11:24:44 +0200 Subject: join some common strings, -400 bytes function old new delta print_intel_cstates 499 511 +12 file_insert 355 364 +9 dpkg_main 2944 2940 -4 ifenslave_main 645 640 -5 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 2/2 up/down: 21/-9) Total: 12 bytes text data bss dec hex filename 937564 932 17676 956172 e970c busybox_old 937164 932 17676 955772 e957c busybox_unstripped Signed-off-by: Denys Vlasenko --- archival/dpkg.c | 8 +++--- archival/libarchive/data_extract_to_command.c | 2 +- debianutils/run_parts.c | 2 +- editors/vi.c | 8 +++--- findutils/xargs.c | 2 +- miscutils/i2c_tools.c | 36 +++++++++++++-------------- networking/httpd.c | 6 ++--- networking/ifenslave.c | 8 +++--- procps/powertop.c | 4 +-- runit/runsv.c | 4 +-- util-linux/mkfs_minix.c | 10 ++++---- 11 files changed, 45 insertions(+), 45 deletions(-) (limited to 'miscutils') diff --git a/archival/dpkg.c b/archival/dpkg.c index 151f0ca43..df7a0db64 100644 --- a/archival/dpkg.c +++ b/archival/dpkg.c @@ -1151,13 +1151,13 @@ static int check_deps(deb_file_t **deb_file, int deb_start /*, int dep_max_count if (result && number_of_alternatives == 0) { if (root_of_alternatives) bb_error_msg_and_die( - "package %s %sdepends on %s, " - "which cannot be satisfied", + "package %s %sdepends on %s, which %s", name_hashtable[package_node->name], package_edge->type == EDGE_PRE_DEPENDS ? "pre-" : "", - name_hashtable[root_of_alternatives->name]); + name_hashtable[root_of_alternatives->name], + "cannot be satisfied"); bb_error_msg_and_die( - "package %s %sdepends on %s, which %s\n", + "package %s %sdepends on %s, which %s", name_hashtable[package_node->name], package_edge->type == EDGE_PRE_DEPENDS ? "pre-" : "", name_hashtable[package_edge->name], diff --git a/archival/libarchive/data_extract_to_command.c b/archival/libarchive/data_extract_to_command.c index 5b32c2ec8..6f5317a0e 100644 --- a/archival/libarchive/data_extract_to_command.c +++ b/archival/libarchive/data_extract_to_command.c @@ -118,7 +118,7 @@ void FAST_FUNC data_extract_to_command(archive_handle_t *archive_handle) bb_error_msg_and_die("'%s' returned status %d", archive_handle->tar__to_command, WEXITSTATUS(status)); if (WIFSIGNALED(status)) - bb_error_msg_and_die("'%s' terminated on signal %d", + bb_error_msg_and_die("'%s' terminated by signal %d", archive_handle->tar__to_command, WTERMSIG(status)); if (!BB_MMU) { diff --git a/debianutils/run_parts.c b/debianutils/run_parts.c index 527fae227..dd6fe7d49 100644 --- a/debianutils/run_parts.c +++ b/debianutils/run_parts.c @@ -189,7 +189,7 @@ int run_parts_main(int argc UNUSED_PARAM, char **argv) if (ret < 0) bb_perror_msg("can't execute '%s'", name); else /* ret > 0 */ - bb_error_msg("%s exited with code %d", name, ret & 0xff); + bb_error_msg("%s: exit status %u", name, ret & 0xff); if (option_mask32 & OPT_e) xfunc_die(); diff --git a/editors/vi.c b/editors/vi.c index 3db597ae1..f355712ab 100644 --- a/editors/vi.c +++ b/editors/vi.c @@ -2910,10 +2910,10 @@ static int file_insert(const char *fn, char *p, int initial) int fd, size; struct stat statbuf; - if (p < text || p > end) { - status_line_bold("Trying to insert file outside of memory"); - return cnt; - } + if (p < text) + p = text; + if (p > end) + p = end; fd = open(fn, O_RDONLY); if (fd < 0) { diff --git a/findutils/xargs.c b/findutils/xargs.c index 25e47ec89..5870b8a16 100644 --- a/findutils/xargs.c +++ b/findutils/xargs.c @@ -122,7 +122,7 @@ static int xargs_exec(void) return 124; } if (status >= 0x180) { - bb_error_msg("%s: terminated by signal %d", + bb_error_msg("'%s' terminated by signal %d", G.args[0], status - 0x180); return 125; } diff --git a/miscutils/i2c_tools.c b/miscutils/i2c_tools.c index 292ff88dd..d77e6bacf 100644 --- a/miscutils/i2c_tools.c +++ b/miscutils/i2c_tools.c @@ -358,7 +358,7 @@ static void check_read_funcs(int fd, int mode, int data_addr, int pec) break; #endif /* ENABLE_I2CDUMP */ default: - bb_error_msg_and_die("Programmer goofed!"); + bb_error_msg_and_die("internal error"); } check_funcs_test_end(funcs, pec, err); } @@ -1022,33 +1022,33 @@ static const struct i2c_func i2c_funcs_tab[] = { { .value = I2C_FUNC_I2C, .name = "I2C" }, { .value = I2C_FUNC_SMBUS_QUICK, - .name = "SMBus Quick Command" }, + .name = "SMBus quick command" }, { .value = I2C_FUNC_SMBUS_WRITE_BYTE, - .name = "SMBus Send Byte" }, + .name = "SMBus send byte" }, { .value = I2C_FUNC_SMBUS_READ_BYTE, - .name = "SMBus Receive Byte" }, + .name = "SMBus receive byte" }, { .value = I2C_FUNC_SMBUS_WRITE_BYTE_DATA, - .name = "SMBus Write Byte" }, + .name = "SMBus write byte" }, { .value = I2C_FUNC_SMBUS_READ_BYTE_DATA, - .name = "SMBus Read Byte" }, + .name = "SMBus read byte" }, { .value = I2C_FUNC_SMBUS_WRITE_WORD_DATA, - .name = "SMBus Write Word" }, + .name = "SMBus write word" }, { .value = I2C_FUNC_SMBUS_READ_WORD_DATA, - .name = "SMBus Read Word" }, + .name = "SMBus read word" }, { .value = I2C_FUNC_SMBUS_PROC_CALL, - .name = "SMBus Process Call" }, + .name = "SMBus process call" }, { .value = I2C_FUNC_SMBUS_WRITE_BLOCK_DATA, - .name = "SMBus Block Write" }, + .name = "SMBus block write" }, { .value = I2C_FUNC_SMBUS_READ_BLOCK_DATA, - .name = "SMBus Block Read" }, + .name = "SMBus block read" }, { .value = I2C_FUNC_SMBUS_BLOCK_PROC_CALL, - .name = "SMBus Block Process Call" }, + .name = "SMBus block process call" }, { .value = I2C_FUNC_SMBUS_PEC, .name = "SMBus PEC" }, { .value = I2C_FUNC_SMBUS_WRITE_I2C_BLOCK, - .name = "I2C Block Write" }, + .name = "I2C block write" }, { .value = I2C_FUNC_SMBUS_READ_I2C_BLOCK, - .name = "I2C Block Read" }, + .name = "I2C block read" }, { .value = 0, .name = NULL } }; @@ -1251,17 +1251,17 @@ int i2cdetect_main(int argc UNUSED_PARAM, char **argv) no_support("detection commands"); } else if (mode == I2CDETECT_MODE_QUICK && !(funcs & I2C_FUNC_SMBUS_QUICK)) { - no_support("SMBus Quick Write command"); + no_support("SMBus quick write"); } else if (mode == I2CDETECT_MODE_READ && !(funcs & I2C_FUNC_SMBUS_READ_BYTE)) { - no_support("SMBus Receive Byte command"); + no_support("SMBus receive byte"); } if (mode == I2CDETECT_MODE_AUTO) { if (!(funcs & I2C_FUNC_SMBUS_QUICK)) - will_skip("SMBus Quick Write"); + will_skip("SMBus quick write"); if (!(funcs & I2C_FUNC_SMBUS_READ_BYTE)) - will_skip("SMBus Receive Byte"); + will_skip("SMBus receive byte"); } if (!(opts & opt_y)) diff --git a/networking/httpd.c b/networking/httpd.c index feaaa94d5..00169c36d 100644 --- a/networking/httpd.c +++ b/networking/httpd.c @@ -1222,12 +1222,12 @@ static NOINLINE void cgi_io_loop_and_exit(int fromCgi_rd, int toCgi_wr, int post out_cnt += count; count = 0; /* "Status" header format is: "Status: 302 Redirected\r\n" */ - if (out_cnt >= 8 && memcmp(rbuf, "Status: ", 8) == 0) { + if (out_cnt >= 7 && memcmp(rbuf, "Status:", 7) == 0) { /* send "HTTP/1.0 " */ if (full_write(STDOUT_FILENO, HTTP_200, 9) != 9) break; - rbuf += 8; /* skip "Status: " */ - count = out_cnt - 8; + rbuf += 7; /* skip "Status:" */ + count = out_cnt - 7; out_cnt = -1; /* buffering off */ } else if (out_cnt >= 4) { /* Did CGI add "HTTP"? */ diff --git a/networking/ifenslave.c b/networking/ifenslave.c index c3be8180b..6b234adee 100644 --- a/networking/ifenslave.c +++ b/networking/ifenslave.c @@ -577,8 +577,8 @@ int ifenslave_main(int argc UNUSED_PARAM, char **argv) /* Can't work with this slave, */ /* remember the error and skip it */ bb_perror_msg( - "skipping %s: can't get flags", - slave_ifname); + "skipping %s: can't get %s", + slave_ifname, "flags"); res = rv; continue; } @@ -595,8 +595,8 @@ int ifenslave_main(int argc UNUSED_PARAM, char **argv) /* Can't work with this slave, */ /* remember the error and skip it */ bb_perror_msg( - "skipping %s: can't get settings", - slave_ifname); + "skipping %s: can't get %s", + slave_ifname, "settings"); res = rv; continue; } diff --git a/procps/powertop.c b/procps/powertop.c index 18418100f..ce85f4191 100644 --- a/procps/powertop.c +++ b/procps/powertop.c @@ -591,7 +591,7 @@ static NOINLINE void print_intel_cstates(void) if (!edx || !(ecx & 1)) return; - printf("Your CPU supports the following C-states: "); + printf("Your %s the following C-states: ", "CPU supports"); i = 0; while (edx) { if (edx & 7) @@ -602,7 +602,7 @@ static NOINLINE void print_intel_cstates(void) bb_putchar('\n'); /* Print BIOS C-States */ - printf("Your BIOS reports the following C-states: "); + printf("Your %s the following C-states: ", "BIOS reports"); for (i = 0; i < ARRAY_SIZE(bios_table); i++) if (bios_table[i]) printf("C%u ", i); diff --git a/runit/runsv.c b/runit/runsv.c index d941e897d..94d286059 100644 --- a/runit/runsv.c +++ b/runit/runsv.c @@ -114,7 +114,7 @@ struct globals { static void fatal2_cannot(const char *m1, const char *m2) { - bb_perror_msg_and_die("%s: fatal: cannot %s%s", dir, m1, m2); + bb_perror_msg_and_die("%s: fatal: can't %s%s", dir, m1, m2); /* was exiting 111 */ } static void fatal_cannot(const char *m) @@ -124,7 +124,7 @@ static void fatal_cannot(const char *m) } static void fatal2x_cannot(const char *m1, const char *m2) { - bb_error_msg_and_die("%s: fatal: cannot %s%s", dir, m1, m2); + bb_error_msg_and_die("%s: fatal: can't %s%s", dir, m1, m2); /* was exiting 111 */ } static void warn_cannot(const char *m) diff --git a/util-linux/mkfs_minix.c b/util-linux/mkfs_minix.c index d65a5161c..88d797584 100644 --- a/util-linux/mkfs_minix.c +++ b/util-linux/mkfs_minix.c @@ -576,11 +576,11 @@ static void setup_tables(void) for (i = MINIX_ROOT_INO; i <= SB_INODES; i++) unmark_inode(i); G.inode_buffer = xzalloc(INODE_BUFFER_SIZE); - printf("%ld inodes\n", (long)SB_INODES); - printf("%ld blocks\n", (long)SB_ZONES); - printf("Firstdatazone=%ld (%ld)\n", (long)SB_FIRSTZONE, (long)norm_firstzone); - printf("Zonesize=%d\n", BLOCK_SIZE << SB_ZONE_SIZE); - printf("Maxsize=%ld\n", (long)SB_MAXSIZE); + printf("%lu inodes\n", (unsigned long)SB_INODES); + printf("%lu blocks\n", (unsigned long)SB_ZONES); + printf("Firstdatazone=%lu (%lu)\n", (unsigned long)SB_FIRSTZONE, (unsigned long)norm_firstzone); + printf("Zonesize=%u\n", BLOCK_SIZE << SB_ZONE_SIZE); + printf("Maxsize=%lu\n", (unsigned long)SB_MAXSIZE); } int mkfs_minix_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; -- cgit v1.2.3-55-g6feb From 02859aaeb29fb83167364291f1ce26b54c23803b Mon Sep 17 00:00:00 2001 From: Denys Vlasenko Date: Fri, 9 Oct 2015 18:16:40 +0200 Subject: use auto_string() where appropriate to kill a few statics Custom linker script 'busybox_ldscript' found, using it function old new delta static.str 4 - -4 static.passwd 4 0 -4 bb_ask 322 311 -11 ether_print 63 47 -16 UNSPEC_print 82 66 -16 INET_sprint 59 38 -21 INET6_sprint 54 30 -24 make_human_readable_str 292 235 -57 ------------------------------------------------------------------------------ (add/remove: 0/1 grow/shrink: 0/7 up/down: 0/-153) Total: -153 bytes text data bss dec hex filename 939880 992 17480 958352 e9f90 busybox_old 939736 992 17456 958184 e9ee8 busybox_unstripped Signed-off-by: Denys Vlasenko --- libbb/bb_askpass.c | 6 ++---- libbb/human_readable.c | 9 +-------- miscutils/devfsd.c | 19 +++++++++---------- networking/interface.c | 24 ++++++------------------ 4 files changed, 18 insertions(+), 40 deletions(-) (limited to 'miscutils') diff --git a/libbb/bb_askpass.c b/libbb/bb_askpass.c index 1927ba9e9..c2580b9eb 100644 --- a/libbb/bb_askpass.c +++ b/libbb/bb_askpass.c @@ -1,7 +1,6 @@ /* vi: set sw=4 ts=4: */ /* * Ask for a password - * I use a static buffer in this function. Plan accordingly. * * Copyright (C) 1999-2004 by Erik Andersen * @@ -23,8 +22,8 @@ char* FAST_FUNC bb_ask(const int fd, int timeout, const char *prompt) { /* Was static char[BIGNUM] */ enum { sizeof_passwd = 128 }; - static char *passwd; + char *passwd; char *ret; int i; struct sigaction sa, oldsa; @@ -62,8 +61,7 @@ char* FAST_FUNC bb_ask(const int fd, int timeout, const char *prompt) alarm(timeout); } - if (!passwd) - passwd = xmalloc(sizeof_passwd); + passwd = auto_string(xmalloc(sizeof_passwd)); ret = passwd; i = 0; while (1) { diff --git a/libbb/human_readable.c b/libbb/human_readable.c index 0b2eb777e..5c7fc076f 100644 --- a/libbb/human_readable.c +++ b/libbb/human_readable.c @@ -37,8 +37,6 @@ const char* FAST_FUNC make_human_readable_str(unsigned long long val, '\0', 'K', 'M', 'G', 'T', 'P', 'E', 'Z', 'Y' }; - static char *str; - unsigned frac; /* 0..9 - the fractional digit */ const char *u; const char *fmt; @@ -81,12 +79,7 @@ const char* FAST_FUNC make_human_readable_str(unsigned long long val, #endif } - if (!str) { - /* sufficient for any width of val */ - str = xmalloc(sizeof(val)*3 + 2 + 3); - } - sprintf(str, fmt, val, frac, *u); - return str; + return auto_string(xasprintf(fmt, val, frac, *u)); } diff --git a/miscutils/devfsd.c b/miscutils/devfsd.c index 5a6aec6bd..9256567cc 100644 --- a/miscutils/devfsd.c +++ b/miscutils/devfsd.c @@ -1142,19 +1142,19 @@ static void signal_handler(int sig) static const char *get_variable(const char *variable, void *info) { - static char sbuf[sizeof(int)*3 + 2]; /* sign and NUL */ static char *hostname; struct get_variable_info *gv_info = info; const char *field_names[] = { - "hostname", "mntpt", "devpath", "devname", - "uid", "gid", "mode", hostname, mount_point, - gv_info->devpath, gv_info->devname, NULL + "hostname", "mntpt", "devpath", "devname", "uid", "gid", "mode", + NULL, mount_point, gv_info->devpath, gv_info->devname, NULL }; int i; if (!hostname) hostname = safe_gethostname(); + field_names[7] = hostname; + /* index_in_str_array returns i>=0 */ i = index_in_str_array(field_names, variable); @@ -1164,12 +1164,11 @@ static const char *get_variable(const char *variable, void *info) return field_names[i + 7]; if (i == 4) - sprintf(sbuf, "%u", gv_info->info->uid); - else if (i == 5) - sprintf(sbuf, "%u", gv_info->info->gid); - else if (i == 6) - sprintf(sbuf, "%o", gv_info->info->mode); - return sbuf; + return auto_string(xasprintf("%u", gv_info->info->uid)); + if (i == 5) + return auto_string(xasprintf("%u", gv_info->info->gid)); + /* i == 6 */ + return auto_string(xasprintf("%o", gv_info->info->mode)); } /* End Function get_variable */ static void service(struct stat statbuf, char *path) diff --git a/networking/interface.c b/networking/interface.c index b0572d04e..24bd13c57 100644 --- a/networking/interface.c +++ b/networking/interface.c @@ -89,13 +89,9 @@ struct in6_ifreq { /* Display an Internet socket address. */ static const char* FAST_FUNC INET_sprint(struct sockaddr *sap, int numeric) { - static char *buff; /* defaults to NULL */ - if (sap->sa_family == 0xFFFF || sap->sa_family == 0) return "[NONE SET]"; - free(buff); - buff = INET_rresolve((struct sockaddr_in *) sap, numeric, 0xffffff00); - return buff; + return auto_string(INET_rresolve((struct sockaddr_in *) sap, numeric, 0xffffff00)); } #ifdef UNUSED_AND_BUGGY @@ -171,13 +167,9 @@ static const struct aftype inet_aftype = { /* dirty! struct sockaddr usually doesn't suffer for inet6 addresses, fst. */ static const char* FAST_FUNC INET6_sprint(struct sockaddr *sap, int numeric) { - static char *buff; - if (sap->sa_family == 0xFFFF || sap->sa_family == 0) return "[NONE SET]"; - free(buff); - buff = INET6_rresolve((struct sockaddr_in6 *) sap, numeric); - return buff; + return auto_string(INET6_rresolve((struct sockaddr_in6 *) sap, numeric)); } #ifdef UNUSED @@ -223,13 +215,11 @@ static const struct aftype inet6_aftype = { /* Display an UNSPEC address. */ static char* FAST_FUNC UNSPEC_print(unsigned char *ptr) { - static char *buff; - + char *buff; char *pos; unsigned int i; - if (!buff) - buff = xmalloc(sizeof(struct sockaddr) * 3 + 1); + buff = auto_string(xmalloc(sizeof(struct sockaddr) * 3 + 1)); pos = buff; for (i = 0; i < sizeof(struct sockaddr); i++) { /* careful -- not every libc's sprintf returns # bytes written */ @@ -712,14 +702,12 @@ static const struct hwtype loop_hwtype = { /* Display an Ethernet address in readable format. */ static char* FAST_FUNC ether_print(unsigned char *ptr) { - static char *buff; - - free(buff); + char *buff; buff = xasprintf("%02X:%02X:%02X:%02X:%02X:%02X", (ptr[0] & 0377), (ptr[1] & 0377), (ptr[2] & 0377), (ptr[3] & 0377), (ptr[4] & 0377), (ptr[5] & 0377) ); - return buff; + return auto_string(buff); } static const struct hwtype ether_hwtype = { -- cgit v1.2.3-55-g6feb From 932302666b0354ede63504d1bef8393cab28db8b Mon Sep 17 00:00:00 2001 From: Denys Vlasenko Date: Sun, 11 Oct 2015 16:58:18 +0200 Subject: randconfig fix Signed-off-by: Denys Vlasenko --- miscutils/last.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'miscutils') diff --git a/miscutils/last.c b/miscutils/last.c index 6d8b58463..f8f34371a 100644 --- a/miscutils/last.c +++ b/miscutils/last.c @@ -34,7 +34,8 @@ && ((UT_LINESIZE != 32) || (UT_NAMESIZE != 32) || (UT_HOSTSIZE != 256)) #error struct utmpx member char[] size(s) have changed! #elif defined __UT_LINESIZE \ - && ((__UT_LINESIZE != 32) || (__UT_NAMESIZE != 64) || (__UT_HOSTSIZE != 256)) + && ((__UT_LINESIZE != 32) || (__UT_NAMESIZE != 32) || (__UT_HOSTSIZE != 256)) +/* __UT_NAMESIZE was checked with 64 above, but glibc-2.11 definitely uses 32! */ #error struct utmpx member char[] size(s) have changed! #endif -- cgit v1.2.3-55-g6feb