apply post-1.11.1 patches, bump version to 1.11.2 1_11_2
authorDenis Vlasenko <vda.linux@googlemail.com>
Thu, 21 Aug 2008 08:32:12 +0000 (08:32 -0000)
committerDenis Vlasenko <vda.linux@googlemail.com>
Thu, 21 Aug 2008 08:32:12 +0000 (08:32 -0000)
Makefile
applets/usage_compressed
coreutils/basename.c
modutils/insmod.c
shell/ash.c

index 6d0cc3898dfba2f7635d9e16dbf4b7928e03befe..fc9b3c1da0cb6643f59bb69008524264cac549e9 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -1,6 +1,6 @@
 VERSION = 1
 PATCHLEVEL = 11
-SUBLEVEL = 1
+SUBLEVEL = 2
 EXTRAVERSION =
 NAME = Unnamed
 
index 551b4b4ba0d45be0e7bde1a9c8cf3f8d881785a4..05ceafd4a96c9bfb0aeefb6bfe31057b28d1b0ea 100755 (executable)
@@ -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`
index a3085ede3079eded33e0f901725f06f1937c5416..8a05e92e5f58ac53b380e6065a8d307953791e87 100644 (file)
@@ -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;
 }
index 3fbb02b75c9b3fde1cb910c4381aab0cf16370ee..569adacca2cd53e02f41f82ef30c8aaeb2c7353f 100644 (file)
@@ -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;
index dd20fe33817f162f231581069a69461e12c1690c..45b00709ac624315a7e3bf3a0e1005d06461bb04 100644 (file)
@@ -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;