Apply all post-1.8.1 patches
diff --git a/Makefile b/Makefile
index b2ce6d4..ac0e550 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 0572bee..04d6f15 100644
--- a/archival/libunarchive/decompress_unzip.c
+++ b/archival/libunarchive/decompress_unzip.c
@@ -1178,6 +1178,7 @@
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 e8ef929..bbf088c 100644
--- a/archival/libunarchive/get_header_tar.c
+++ b/archival/libunarchive/get_header_tar.c
@@ -59,8 +59,9 @@
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 3fe1886..aac706b 100644
--- a/archival/tar.c
+++ b/archival/tar.c
@@ -50,8 +50,9 @@
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 9521bbc..e60e08b 100644
--- a/coreutils/tr.c
+++ b/coreutils/tr.c
@@ -173,7 +173,8 @@
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 @@
}
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 94d3df6..70c480f 100644
--- a/networking/inetd.c
+++ b/networking/inetd.c
@@ -813,7 +813,7 @@
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 7fe262b..4fea6fe 100755
--- a/scripts/trylink
+++ b/scripts/trylink
@@ -46,6 +46,14 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
-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 @@
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 @@
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 ce1ce7f..781dfdb 100644
--- a/shell/lash.c
+++ b/shell/lash.c
@@ -157,8 +157,8 @@
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 @@
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 @@
#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 @@
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 @@
}
}
- 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 @@
* 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 @@
"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));
}