Apply all post-1.8.1 patches 1_8_2
authorDenis Vlasenko <vda.linux@googlemail.com>
Sat, 24 Nov 2007 04:37:59 +0000 (04:37 -0000)
committerDenis Vlasenko <vda.linux@googlemail.com>
Sat, 24 Nov 2007 04:37:59 +0000 (04:37 -0000)
Makefile
archival/libunarchive/decompress_unzip.c
archival/libunarchive/get_header_tar.c
archival/tar.c
coreutils/tr.c
networking/inetd.c
scripts/trylink
shell/lash.c

index b2ce6d4939e670d649c324be3edbc5aae085a9bb..ac0e55027dcf79676b5bd56ff7077217b384dd7b 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -1,6 +1,6 @@
 VERSION = 1
 PATCHLEVEL = 8
-SUBLEVEL = 1
+SUBLEVEL = 2
 EXTRAVERSION =
 NAME = Unnamed
 
index 0572bee6819fe8773f8598031946a7bb13718255..04d6f1556f9f8824a4184d50aea611e67e374bed 100644 (file)
@@ -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)) {
index e8ef92994fba889e076bbabe791a7af17ae244a4..bbf088cd8cac19c149b361c0277c9952097d7f4b 100644 (file)
@@ -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 */
index 3fe188656e04807195f53e719df7f6c63f13da8a..aac706b9650aeb36406b1028441e1ee836462dcc 100644 (file)
@@ -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 */
index 9521bbcd507f5da3cf5b08b8e847aaaf56f39f41..e60e08b255cc0a4bdcad88dba261beb5fa58ce96 100644 (file)
@@ -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;
index 94d3df6e25629489734178b2ac5c0e7838a96ccb..70c480f0f6d92fb7614d3833ba62ad6f33233fad 100644 (file)
@@ -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);
        }
index 7fe262baaba3be988a38b9bea752616dd699e5b9..4fea6fe765b7617d203b8b24f3bfbcab052e5730 100755 (executable)
@@ -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 \
index ce1ce7f6a2b64ca82d37a53d7faa34ad0ab15130..781dfdb5aac0381cb38810947ae8a1fb466adb24 100644 (file)
@@ -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));
        }