From 2957fc699207d8e855c7024f8f91c451cf018952 Mon Sep 17 00:00:00 2001 From: Denis Vlasenko Date: Thu, 21 Aug 2008 08:32:12 +0000 Subject: apply post-1.11.1 patches, bump version to 1.11.2 --- Makefile | 2 +- applets/usage_compressed | 17 ++++++++---- coreutils/basename.c | 2 +- modutils/insmod.c | 3 +- shell/ash.c | 72 +++++++++++++++++++++++++++++++++++------------- 5 files changed, 69 insertions(+), 27 deletions(-) diff --git a/Makefile b/Makefile index 6d0cc3898..fc9b3c1da 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,6 @@ VERSION = 1 PATCHLEVEL = 11 -SUBLEVEL = 1 +SUBLEVEL = 2 EXTRAVERSION = NAME = Unnamed diff --git a/applets/usage_compressed b/applets/usage_compressed index 551b4b4ba..05ceafd4a 100755 --- a/applets/usage_compressed +++ b/applets/usage_compressed @@ -14,14 +14,21 @@ exec >"$target" echo 'static const char packed_usage[] ALIGN1 = {' -# Extra effort to avoid using "od -t x1": -t is not available -# in non-CONFIG_DESKTOPed busybox od - -"$loc/usage" | bzip2 -1 | od -v -x \ +## Breaks on big-endian systems! +## # Extra effort to avoid using "od -t x1": -t is not available +## # in non-CONFIG_DESKTOPed busybox od +## +## "$loc/usage" | bzip2 -1 | od -v -x \ +## | $SED -e 's/^[^ ]*//' \ +## | $SED -e 's/ //g' \ +## | grep -v '^$' \ +## | $SED -e 's/\(..\)\(..\)/0x\2,0x\1,/g' + +"$loc/usage" | bzip2 -1 | od -v -t x1 \ | $SED -e 's/^[^ ]*//' \ | $SED -e 's/ //g' \ | grep -v '^$' \ -| $SED -e 's/\(..\)\(..\)/0x\2,0x\1,/g' +| $SED -e 's/\(..\)/0x\1,/g' echo '};' echo '#define SIZEOF_usage_messages' `expr 0 + $sz` diff --git a/coreutils/basename.c b/coreutils/basename.c index a3085ede3..8a05e92e5 100644 --- a/coreutils/basename.c +++ b/coreutils/basename.c @@ -48,5 +48,5 @@ int basename_main(int argc, char **argv) /* puts(s) will do, but we can do without stdio this way: */ s[m++] = '\n'; - return full_write(STDOUT_FILENO, s, m) == (ssize_t)m; + return full_write(STDOUT_FILENO, s, m) != (ssize_t)m; } diff --git a/modutils/insmod.c b/modutils/insmod.c index 3fbb02b75..569adacca 100644 --- a/modutils/insmod.c +++ b/modutils/insmod.c @@ -840,7 +840,8 @@ arch_apply_relocation(struct obj_file *f, ElfW(RelM) *rel, ElfW(Addr) v) { #if defined(__arm__) || defined(__i386__) || defined(__mc68000__) \ - || defined(__sh__) || defined(__s390__) || defined(__x86_64__) + || defined(__sh__) || defined(__s390__) || defined(__x86_64__) \ + || defined(__powerpc__) || defined(__mips__) struct arch_file *ifile = (struct arch_file *) f; #endif enum obj_reloc ret = obj_reloc_ok; diff --git a/shell/ash.c b/shell/ash.c index dd20fe338..45b00709a 100644 --- a/shell/ash.c +++ b/shell/ash.c @@ -1569,14 +1569,14 @@ static char *optionarg; /* set by nextopt (like getopt) */ static char *optptr; /* used by nextopt */ /* - * XXX - should get rid of. have all builtins use getopt(3). the - * library getopt must have the BSD extension static variable "optreset" - * otherwise it can't be used within the shell safely. + * XXX - should get rid of. Have all builtins use getopt(3). + * The library getopt must have the BSD extension static variable + * "optreset", otherwise it can't be used within the shell safely. * - * Standard option processing (a la getopt) for builtin routines. The - * only argument that is passed to nextopt is the option string; the - * other arguments are unnecessary. It return the character, or '\0' on - * end of input. + * Standard option processing (a la getopt) for builtin routines. + * The only argument that is passed to nextopt is the option string; + * the other arguments are unnecessary. It returns the character, + * or '\0' on end of input. */ static int nextopt(const char *optstring) @@ -1587,13 +1587,20 @@ nextopt(const char *optstring) p = optptr; if (p == NULL || *p == '\0') { + /* We ate entire "-param", take next one */ p = *argptr; - if (p == NULL || *p != '-' || *++p == '\0') + if (p == NULL) + return '\0'; + if (*p != '-') + return '\0'; + if (*++p == '\0') /* just "-" ? */ return '\0'; argptr++; - if (LONE_DASH(p)) /* check for "--" */ + if (LONE_DASH(p)) /* "--" ? */ return '\0'; + /* p => next "-param" */ } + /* p => some option char in the middle of a "-param" */ c = *p++; for (q = optstring; *q != c;) { if (*q == '\0') @@ -1602,8 +1609,11 @@ nextopt(const char *optstring) q++; } if (*++q == ':') { - if (*p == '\0' && (p = *argptr++) == NULL) - ash_msg_and_raise_error("no arg for -%c option", c); + if (*p == '\0') { + p = *argptr++; + if (p == NULL) + ash_msg_and_raise_error("no arg for -%c option", c); + } optionarg = p; p = NULL; } @@ -7428,8 +7438,10 @@ commandcmd(int argc ATTRIBUTE_UNUSED, char **argv ATTRIBUTE_UNUSED) else if (c != 'p') abort(); #endif - if (verify) + /* Mimic bash: just "command -v" doesn't complain, it's a nop */ + if (verify && (*argptr != NULL)) { return describe_command(*argptr, verify - VERIFY_BRIEF); + } return 0; } @@ -7788,16 +7800,33 @@ static void prehash(union node *); static void evaltree(union node *n, int flags) { + + struct jmploc *volatile savehandler = exception_handler; + struct jmploc jmploc; int checkexit = 0; void (*evalfn)(union node *, int); - unsigned isor; int status; + if (n == NULL) { TRACE(("evaltree(NULL) called\n")); - goto out; + goto out1; } TRACE(("pid %d, evaltree(%p: %d, %d) called\n", getpid(), n, n->type, flags)); + + exception_handler = &jmploc; + { + int err = setjmp(jmploc.loc); + if (err) { + /* if it was a signal, check for trap handlers */ + if (exception == EXSIG) + goto out; + /* continue on the way out */ + exception_handler = savehandler; + longjmp(exception_handler->loc, err); + } + } + switch (n->type) { default: #if DEBUG @@ -7843,19 +7872,20 @@ evaltree(union node *n, int flags) goto calleval; case NAND: case NOR: - case NSEMI: + case NSEMI: { + #if NAND + 1 != NOR #error NAND + 1 != NOR #endif #if NOR + 1 != NSEMI #error NOR + 1 != NSEMI #endif - isor = n->type - NAND; + unsigned is_or = n->type - NAND; evaltree( n->nbinary.ch1, - (flags | ((isor >> 1) - 1)) & EV_TESTED + (flags | ((is_or >> 1) - 1)) & EV_TESTED ); - if (!exitstatus == isor) + if (!exitstatus == is_or) break; if (!evalskip) { n = n->nbinary.ch2; @@ -7866,6 +7896,7 @@ evaltree(union node *n, int flags) break; } break; + } case NIF: evaltree(n->nif.test, EV_TESTED); if (evalskip) @@ -7886,8 +7917,11 @@ evaltree(union node *n, int flags) exitstatus = status; break; } + out: - if ((checkexit & exitstatus)) + exception_handler = savehandler; + out1: + if (checkexit & exitstatus) evalskip |= SKIPEVAL; else if (pendingsig && dotrap()) goto exexit; -- cgit v1.2.3