From: Denis Vlasenko Date: Sat, 24 Nov 2007 04:37:59 +0000 (-0000) Subject: Apply all post-1.8.1 patches X-Git-Tag: 1_8_2 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=c0eef0df8ce6521c38973b0ed91175e6fca19336;p=oweals%2Fbusybox.git Apply all post-1.8.1 patches --- diff --git a/Makefile b/Makefile index b2ce6d493..ac0e55027 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,6 @@ VERSION = 1 PATCHLEVEL = 8 -SUBLEVEL = 1 +SUBLEVEL = 2 EXTRAVERSION = NAME = Unnamed diff --git a/archival/libunarchive/decompress_unzip.c b/archival/libunarchive/decompress_unzip.c index 0572bee68..04d6f1556 100644 --- a/archival/libunarchive/decompress_unzip.c +++ b/archival/libunarchive/decompress_unzip.c @@ -1178,6 +1178,7 @@ unpack_gz_stream(int in, int out) ALLOC_STATE; bytebuffer_max = 0x8000; bytebuffer = xmalloc(bytebuffer_max); + gunzip_src_fd = in; again: if (!check_header_gzip(PASS_STATE_ONLY)) { diff --git a/archival/libunarchive/get_header_tar.c b/archival/libunarchive/get_header_tar.c index e8ef92994..bbf088cd8 100644 --- a/archival/libunarchive/get_header_tar.c +++ b/archival/libunarchive/get_header_tar.c @@ -59,8 +59,9 @@ char get_header_tar(archive_handle_t *archive_handle) char chksum[8]; /* 148-155 */ char typeflag; /* 156-156 */ char linkname[100]; /* 157-256 */ - char magic[6]; /* 257-262 */ - char version[2]; /* 263-264 */ + /* POSIX: "ustar" NUL "00" */ + /* GNU tar: "ustar " NUL */ + char magic[8]; /* 257-264 */ char uname[32]; /* 265-296 */ char gname[32]; /* 297-328 */ char devmajor[8]; /* 329-336 */ diff --git a/archival/tar.c b/archival/tar.c index 3fe188656..aac706b96 100644 --- a/archival/tar.c +++ b/archival/tar.c @@ -50,8 +50,9 @@ struct TarHeader { /* byte offset */ char chksum[8]; /* 148-155 */ char typeflag; /* 156-156 */ char linkname[NAME_SIZE]; /* 157-256 */ - char magic[6]; /* 257-262 */ - char version[2]; /* 263-264 */ + /* POSIX: "ustar" NUL "00" */ + /* GNU tar: "ustar " NUL */ + char magic[8]; /* 257-264 */ char uname[32]; /* 265-296 */ char gname[32]; /* 297-328 */ char devmajor[8]; /* 329-336 */ diff --git a/coreutils/tr.c b/coreutils/tr.c index 9521bbcd5..e60e08b25 100644 --- a/coreutils/tr.c +++ b/coreutils/tr.c @@ -173,7 +173,8 @@ int tr_main(int argc, char **argv) int idx = 1; int i; smalluint flags = 0; - size_t read_chars = 0, in_index = 0, out_index = 0, c, coded, last = -1; + ssize_t read_chars = 0; + size_t in_index = 0, out_index = 0, c, coded, last = -1; RESERVE_CONFIG_UBUFFER(output, BUFSIZ); RESERVE_CONFIG_BUFFER(vector, ASCII+1); RESERVE_CONFIG_BUFFER(invec, ASCII+1); @@ -223,8 +224,9 @@ int tr_main(int argc, char **argv) } read_chars = read(STDIN_FILENO, tr_buf, BUFSIZ); if (read_chars <= 0) { - if (write(STDOUT_FILENO, (char *)output, out_index) != out_index) - bb_perror_msg(bb_msg_write_error); + xwrite(STDOUT_FILENO, (char *)output, out_index); + if (read_chars < 0) + bb_perror_msg_and_die(bb_msg_read_error); exit(EXIT_SUCCESS); } in_index = 0; diff --git a/networking/inetd.c b/networking/inetd.c index 94d3df6e2..70c480f0f 100644 --- a/networking/inetd.c +++ b/networking/inetd.c @@ -813,7 +813,7 @@ static servtab_t *getconfigent(void) sep->se_bi = NULL; #endif argc = 0; - for (; cp; arg = skip(&cp)) { + for (arg = skip(&cp); cp; arg = skip(&cp)) { if (argc < MAXARGV) sep->se_argv[argc++] = xxstrdup(arg); } diff --git a/scripts/trylink b/scripts/trylink index 7fe262baa..4fea6fe76 100755 --- a/scripts/trylink +++ b/scripts/trylink @@ -46,6 +46,14 @@ try() { return $exitcode } +check_cc() { + if $CC $1 -shared -o /dev/null -xc /dev/null > /dev/null 2>&1; then + echo "$1"; + else + echo "$2"; + fi +} + EXE="$1" CC="$2" LDFLAGS="$3" @@ -53,6 +61,9 @@ O_FILES="$4" A_FILES="$5" LDLIBS="$6" +# The -Wl,--sort-section option is not supported by older versions of ld +SORT_SECTION=`check_cc "-Wl,--sort-section -Wl,alignment" ""` + # Sanitize lib list (dups, extra spaces etc) LDLIBS=`echo "$LDLIBS" | xargs -n1 | sort | uniq | xargs` @@ -64,7 +75,7 @@ test "x$l_list" != "x" && l_list="-Wl,--start-group $l_list -Wl,--end-group" try $CC $LDFLAGS \ -o $EXE \ -Wl,--sort-common \ - -Wl,--sort-section -Wl,alignment \ + $SORT_SECTION \ -Wl,--gc-sections \ -Wl,--start-group $O_FILES $A_FILES -Wl,--end-group \ $l_list \ @@ -88,7 +99,7 @@ while test "$LDLIBS"; do try $CC $LDFLAGS \ -o $EXE \ -Wl,--sort-common \ - -Wl,--sort-section -Wl,alignment \ + $SORT_SECTION \ -Wl,--gc-sections \ -Wl,--start-group $O_FILES $A_FILES -Wl,--end-group \ $l_list @@ -117,7 +128,7 @@ if ! test -f busybox_ldscript; then try $CC $LDFLAGS \ -o $EXE \ -Wl,--sort-common \ - -Wl,--sort-section -Wl,alignment \ + $SORT_SECTION \ -Wl,--gc-sections \ -Wl,--start-group $O_FILES $A_FILES -Wl,--end-group \ $l_list \ @@ -139,7 +150,7 @@ else try $CC $LDFLAGS \ -o $EXE \ -Wl,--sort-common \ - -Wl,--sort-section -Wl,alignment \ + $SORT_SECTION \ -Wl,--gc-sections \ -Wl,-T -Wl,busybox_ldscript \ -Wl,--start-group $O_FILES $A_FILES -Wl,--end-group \ @@ -174,7 +185,7 @@ if test "$CONFIG_BUILD_LIBBUSYBOX" = y; then -Wl,-soname="libbusybox.so.$BB_VER" \ -Wl,--undefined=lbb_main \ -Wl,--sort-common \ - -Wl,--sort-section -Wl,alignment \ + $SORT_SECTION \ -Wl,--start-group $A_FILES -Wl,--end-group \ $l_list \ -Wl,--warn-common \ @@ -195,7 +206,7 @@ if test "$CONFIG_FEATURE_SHARED_BUSYBOX" = y; then try $CC $LDFLAGS \ -o $EXE \ -Wl,--sort-common \ - -Wl,--sort-section -Wl,alignment \ + $SORT_SECTION \ -Wl,--gc-sections \ -Wl,--start-group $O_FILES -Wl,--end-group \ -L"$sharedlib_dir" -lbusybox \ @@ -234,7 +245,7 @@ int main(int argc, char **argv) try $CC $LDFLAGS "$sharedlib_dir/applet.c" \ -o $EXE \ -Wl,--sort-common \ - -Wl,--sort-section -Wl,alignment \ + $SORT_SECTION \ -Wl,--gc-sections \ -L"$sharedlib_dir" -lbusybox \ -Wl,--warn-common \ diff --git a/shell/lash.c b/shell/lash.c index ce1ce7f6a..781dfdb5a 100644 --- a/shell/lash.c +++ b/shell/lash.c @@ -157,8 +157,8 @@ static int shell_context; /* Type prompt trigger (PS1 or PS2) */ static char *cwd; static char *local_pending_command; static struct jobset job_list = { NULL, NULL }; -static int argc; -static char **argv; +static int global_argc; +static char **global_argv; static llist_t *close_me_list; static int last_return_code; static int last_bg_pid; @@ -810,16 +810,16 @@ static int expand_arguments(char *command) var = itoa(getpid()); break; case '#': - var = itoa(argc-1); + var = itoa(global_argc - 1); break; case '0':case '1':case '2':case '3':case '4': case '5':case '6':case '7':case '8':case '9': { int ixx = *(dst+1)-48+1; - if (ixx >= argc) { + if (ixx >= global_argc) { var = '\0'; } else { - var = argv[ixx]; + var = global_argv[ixx]; } } break; @@ -1492,12 +1492,13 @@ static inline void setup_job_control(void) #endif int lash_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; -int lash_main(int argc_l, char **argv_l) +int lash_main(int argc, char **argv) { unsigned opt; FILE *input = stdin; - argc = argc_l; - argv = argv_l; + + global_argc = argc; + global_argv = argv; #if ENABLE_FEATURE_EDITING line_input_state = new_line_input_t(FOR_SHELL); @@ -1510,7 +1511,7 @@ int lash_main(int argc_l, char **argv_l) job_list.fg = NULL; last_return_code = 1; - if (argv[0] && argv[0][0] == '-') { + if (global_argv[0] && global_argv[0][0] == '-') { FILE *prof_input; prof_input = fopen("/etc/profile", "r"); if (prof_input) { @@ -1522,13 +1523,13 @@ int lash_main(int argc_l, char **argv_l) } } - opt = getopt32(argv_l, "+ic:", &local_pending_command); + opt = getopt32(argv, "+ic:", &local_pending_command); #define LASH_OPT_i (1<<0) #define LASH_OPT_c (1<<1) if (opt & LASH_OPT_c) { input = NULL; optind++; - argv += optind; + global_argv += optind; } /* A shell is interactive if the `-i' flag was given, or if all of * the following conditions are met: @@ -1537,7 +1538,7 @@ int lash_main(int argc_l, char **argv_l) * standard input is a terminal * standard output is a terminal * Refer to Posix.2, the description of the `sh' utility. */ - if (argv[optind] == NULL && input == stdin + if (global_argv[optind] == NULL && input == stdin && isatty(STDIN_FILENO) && isatty(STDOUT_FILENO) ) { opt |= LASH_OPT_i; @@ -1550,9 +1551,9 @@ int lash_main(int argc_l, char **argv_l) "Enter 'help' for a list of built-in commands.\n\n", bb_banner); } - } else if (!local_pending_command && argv[optind]) { + } else if (!local_pending_command && global_argv[optind]) { //printf( "optind=%d argv[optind]='%s'\n", optind, argv[optind]); - input = xfopen(argv[optind], "r"); + input = xfopen(global_argv[optind], "r"); /* be lazy, never mark this closed */ llist_add_to(&close_me_list, (void *)(long)fileno(input)); }