Ticket #4931: busybox1131.2.diff

File busybox1131.2.diff, 55.5 KB (added by jake1981 <oskari.rauta@…>, 9 years ago)

busybox-1.13.1 release 2

  • package/busybox/config/console-tools/Config.in

     
    102102          This program loads entries into the kernel's scancode-to-keycode 
    103103          map, allowing unusual keyboards to generate usable keycodes. 
    104104 
     105config BUSYBOX_CONFIG_SHOWKEY 
     106        bool "showkey" 
     107        default n 
     108        help 
     109          Showkey prints to standard output either the scan codes or the 
     110          keycode or the 'ascii' code of each key pressed. 
     111 
    105112config BUSYBOX_CONFIG_SETLOGCONS 
    106113        bool "setlogcons" 
    107114        default n 
  • package/busybox/config/util-linux/Config.in

     
    393393          will be unable to determine the current screen size, and will be 
    394394          unable to move the cursor. 
    395395 
     396config BUSYBOX_CONFIG_BLKID 
     397        bool "blkid" 
     398        default n 
     399        depends BUSYBOX_CONFIG_VOLUMEID 
     400        help 
     401          Print UUIDs on all filesystems 
     402 
    396403config BUSYBOX_CONFIG_VOLUMEID 
    397404        bool "Routines for detecting label and uuid on common filesystems" 
    398405        default n 
  • package/busybox/config/miscutils/Config.in

     
    187187          /dev/loop0.  If your /dev directory has normal names instead of 
    188188          devfs names, you don't want this. 
    189189 
     190config BUSYBOX_CONFIG_DEVMEM 
     191        bool "devmem" 
     192        default n 
     193        help 
     194          TODO 
     195 
    190196config BUSYBOX_CONFIG_EJECT 
    191197        bool "eject" 
    192198        default n 
  • package/busybox/patches/260-ash_debug.patch

     
     1diff -urpN busybox-1.13.3/shell/ash.c busybox-1.13.3-ash/shell/ash.c 
     2--- busybox-1.13.3/shell/ash.c  2009-02-26 12:46:55.000000000 +0100 
     3+++ busybox-1.13.3-ash/shell/ash.c      2009-04-01 01:16:44.000000000 +0200 
     4@@ -30,7 +30,7 @@ 
     5  */ 
     6  
     7 /* 
     8- * The follow should be set to reflect the type of system you have: 
     9+ * The following should be set to reflect the type of system you have: 
     10  *      JOBS -> 1 if you have Berkeley job control, 0 otherwise. 
     11  *      define SYSV if you are running under System V. 
     12  *      define DEBUG=1 to compile in debugging ('set -o debug' to turn on) 
     13@@ -40,6 +40,11 @@ 
     14  * a quit signal will generate a core dump. 
     15  */ 
     16 #define DEBUG 0 
     17+/* Tweak debug output verbosity here */ 
     18+#define DEBUG_TIME 0 
     19+#define DEBUG_PID 1 
     20+#define DEBUG_SIG 1 
     21+ 
     22 #define PROFILE 0 
     23  
     24 #define IFS_BROKEN 
     25@@ -47,9 +52,9 @@ 
     26 #define JOBS ENABLE_ASH_JOB_CONTROL 
     27  
     28 #if DEBUG 
     29-#ifndef _GNU_SOURCE 
     30-#define _GNU_SOURCE 
     31-#endif 
     32+# ifndef _GNU_SOURCE 
     33+#  define _GNU_SOURCE 
     34+# endif 
     35 #endif 
     36  
     37 #include "busybox.h" /* for applet_names */ 
     38@@ -57,15 +62,15 @@ 
     39 #include <setjmp.h> 
     40 #include <fnmatch.h> 
     41 #if JOBS || ENABLE_ASH_READ_NCHARS 
     42-#include <termios.h> 
     43+# include <termios.h> 
     44 #endif 
     45  
     46 #ifndef PIPE_BUF 
     47-#define PIPE_BUF 4096           /* amount of buffering in a pipe */ 
     48+# define PIPE_BUF 4096           /* amount of buffering in a pipe */ 
     49 #endif 
     50  
     51 #if defined(__uClinux__) 
     52-#error "Do not even bother, ash will not run on uClinux" 
     53+# error "Do not even bother, ash will not run on uClinux" 
     54 #endif 
     55  
     56  
     57@@ -76,14 +81,6 @@ 
     58 #define CMDTABLESIZE 31         /* should be prime */ 
     59  
     60  
     61-/* ============ Misc helpers */ 
     62- 
     63-#define xbarrier() do { __asm__ __volatile__ ("": : :"memory"); } while (0) 
     64- 
     65-/* C99 say: "char" declaration may be signed or unsigned default */ 
     66-#define signed_char2int(sc) ((int)((signed char)sc)) 
     67- 
     68- 
     69 /* ============ Shell options */ 
     70  
     71 static const char *const optletters_optnames[] = { 
     72@@ -245,7 +242,30 @@ extern struct globals_misc *const ash_pt 
     73 } while (0) 
     74  
     75  
     76+/* ============ DEBUG */ 
     77+#if DEBUG 
     78+static void trace_printf(const char *fmt, ...); 
     79+static void trace_vprintf(const char *fmt, va_list va); 
     80+# define TRACE(param)    trace_printf param 
     81+# define TRACEV(param)   trace_vprintf param 
     82+# define close(f) do { \ 
     83+       int dfd = (f); \ 
     84+       if (close(dfd) < 0) \ 
     85+               bb_error_msg("bug on %d: closing %d(%x)", \ 
     86+                       __LINE__, dfd, dfd); \ 
     87+} while (0) 
     88+#else 
     89+# define TRACE(param) 
     90+# define TRACEV(param) 
     91+#endif 
     92+ 
     93+ 
     94 /* ============ Utility functions */ 
     95+#define xbarrier() do { __asm__ __volatile__ ("": : :"memory"); } while (0) 
     96+ 
     97+/* C99 say: "char" declaration may be signed or unsigned by default */ 
     98+#define signed_char2int(sc) ((int)(signed char)(sc)) 
     99+ 
     100 static int isdigit_str9(const char *str) 
     101 { 
     102        int maxlen = 9 + 1; /* max 9 digits: 999999999 */ 
     103@@ -284,6 +304,12 @@ raise_exception(int e) 
     104        exception = e; 
     105        longjmp(exception_handler->loc, 1); 
     106 } 
     107+#if DEBUG 
     108+#define raise_exception(e) do { \ 
     109+       TRACE(("raising exception %d on line %d\n", (e), __LINE__)); \ 
     110+       raise_exception(e); \ 
     111+} while (0) 
     112+#endif 
     113  
     114 /* 
     115  * Called from trap.c when a SIGINT is received.  (If the user specifies 
     116@@ -316,6 +342,12 @@ raise_interrupt(void) 
     117        raise_exception(i); 
     118        /* NOTREACHED */ 
     119 } 
     120+#if DEBUG 
     121+#define raise_interrupt() do { \ 
     122+       TRACE(("raising interrupt on line %d\n", __LINE__)); \ 
     123+       raise_interrupt(); \ 
     124+} while (0) 
     125+#endif 
     126  
     127 #if ENABLE_ASH_OPTIMIZE_FOR_SIZE 
     128 static void 
     129@@ -334,7 +366,9 @@ force_int_on(void) 
     130                raise_interrupt(); 
     131 } 
     132 #define FORCE_INT_ON force_int_on() 
     133-#else 
     134+ 
     135+#else /* !ASH_OPTIMIZE_FOR_SIZE */ 
     136+ 
     137 #define INT_ON do { \ 
     138        xbarrier(); \ 
     139        if (--suppressint == 0 && intpending) \ 
     140@@ -346,7 +380,7 @@ force_int_on(void) 
     141        if (intpending) \ 
     142                raise_interrupt(); \ 
     143 } while (0) 
     144-#endif /* ASH_OPTIMIZE_FOR_SIZE */ 
     145+#endif /* !ASH_OPTIMIZE_FOR_SIZE */ 
     146  
     147 #define SAVE_INT(v) ((v) = suppressint) 
     148  
     149@@ -376,7 +410,6 @@ static void 
     150 onsig(int signo) 
     151 { 
     152        gotsig[signo - 1] = 1; 
     153-       pendingsig = signo; 
     154  
     155        if (/* exsig || */ (signo == SIGINT && !trap[SIGINT])) { 
     156                if (!suppressint) { 
     157@@ -384,6 +417,8 @@ onsig(int signo) 
     158                        raise_interrupt(); /* does not return */ 
     159                } 
     160                intpending = 1; 
     161+       } else { 
     162+               pendingsig = signo; 
     163        } 
     164 } 
     165  
     166@@ -684,6 +719,12 @@ trace_printf(const char *fmt, ...) 
     167  
     168        if (debug != 1) 
     169                return; 
     170+       if (DEBUG_TIME) 
     171+               fprintf(tracefile, "%u ", (int) time(NULL)); 
     172+       if (DEBUG_PID) 
     173+               fprintf(tracefile, "[%u] ", (int) getpid()); 
     174+       if (DEBUG_SIG) 
     175+               fprintf(tracefile, "pending s:%d i:%d(supp:%d) ", pendingsig, intpending, suppressint); 
     176        va_start(va, fmt); 
     177        vfprintf(tracefile, fmt, va); 
     178        va_end(va); 
     179@@ -694,6 +735,12 @@ trace_vprintf(const char *fmt, va_list v 
     180 { 
     181        if (debug != 1) 
     182                return; 
     183+       if (DEBUG_TIME) 
     184+               fprintf(tracefile, "%u ", (int) time(NULL)); 
     185+       if (DEBUG_PID) 
     186+               fprintf(tracefile, "[%u] ", (int) getpid()); 
     187+       if (DEBUG_SIG) 
     188+               fprintf(tracefile, "pending s:%d i:%d(supp:%d) ", pendingsig, intpending, suppressint); 
     189        vfprintf(tracefile, fmt, va); 
     190 } 
     191  
     192@@ -998,14 +1045,6 @@ showtree(union node *n) 
     193        shtree(n, 1, NULL, stdout); 
     194 } 
     195  
     196-#define TRACE(param)    trace_printf param 
     197-#define TRACEV(param)   trace_vprintf param 
     198- 
     199-#else 
     200- 
     201-#define TRACE(param) 
     202-#define TRACEV(param) 
     203- 
     204 #endif /* DEBUG */ 
     205  
     206  
     207@@ -3779,7 +3818,7 @@ dowait(int wait_flags, struct job *job) 
     208         * NB: _not_ safe_waitpid, we need to detect EINTR */ 
     209        pid = waitpid(-1, &status, 
     210                        (doing_jobctl ? (wait_flags | WUNTRACED) : wait_flags)); 
     211-       TRACE(("wait returns pid=%d, status=0x%x\n", pid, status)); 
     212+       TRACE(("wait returns pid=%d, status=0x%x, errno=%d(%s)\n", pid, status, errno, strerror(errno))); 
     213  
     214        if (pid <= 0) { 
     215                /* If we were doing blocking wait and (probably) got EINTR, 
     216@@ -5031,7 +5070,9 @@ redirect(union node *redir, int flags) 
     217                if (newfd < 0) { 
     218                        /* NTOFD/NFROMFD: copy redir->ndup.dupfd to fd */ 
     219                        if (redir->ndup.dupfd < 0) { /* "fd>&-" */ 
     220-                               close(fd); 
     221+                               /* Don't want to trigger debugging */ 
     222+                               if (fd != -1) 
     223+                                       close(fd); 
     224                        } else { 
     225                                copyfd(redir->ndup.dupfd, fd | COPYFD_EXACT); 
     226                        } 
     227@@ -5084,7 +5125,7 @@ popredir(int drop, int restore) 
     228                                /*close(fd);*/ 
     229                                copyfd(copy, fd | COPYFD_EXACT); 
     230                        } 
     231-                       close(copy); 
     232+                       close(copy & ~COPYFD_RESTORE); 
     233                } 
     234        } 
     235        redirlist = rp->next; 
     236@@ -7871,20 +7912,30 @@ dotrap(void) 
     237        pendingsig = 0; 
     238        xbarrier(); 
     239  
     240+       TRACE(("dotrap entered\n")); 
     241        for (i = 1, q = gotsig; i < NSIG; i++, q++) { 
     242                if (!*q) 
     243                        continue; 
     244-               *q = '\0'; 
     245  
     246                p = trap[i]; 
     247+               /* non-trapped SIGINT is handled separately by raise_interrupt, 
     248+                * don't upset it by resetting gotsig[SIGINT-1] */ 
     249+               if (i == SIGINT && !p) 
     250+                       continue; 
     251+ 
     252+               TRACE(("sig %d is active, will run handler '%s'\n", i, p)); 
     253+               *q = '\0'; 
     254                if (!p) 
     255                        continue; 
     256                skip = evalstring(p, SKIPEVAL); 
     257                exitstatus = savestatus; 
     258-               if (skip) 
     259+               if (skip) { 
     260+                       TRACE(("dotrap returns %d\n", skip)); 
     261                        return skip; 
     262+               } 
     263        } 
     264  
     265+       TRACE(("dotrap returns 0\n")); 
     266        return 0; 
     267 } 
     268  
     269@@ -7906,28 +7957,32 @@ static void prehash(union node *); 
     270 static void 
     271 evaltree(union node *n, int flags) 
     272 { 
     273- 
     274        struct jmploc *volatile savehandler = exception_handler; 
     275        struct jmploc jmploc; 
     276        int checkexit = 0; 
     277        void (*evalfn)(union node *, int); 
     278        int status; 
     279+       int int_level; 
     280+ 
     281+       SAVE_INT(int_level); 
     282  
     283        if (n == NULL) { 
     284                TRACE(("evaltree(NULL) called\n")); 
     285                goto out1; 
     286        } 
     287-       TRACE(("pid %d, evaltree(%p: %d, %d) called\n", 
     288-                       getpid(), n, n->type, flags)); 
     289+       TRACE(("evaltree(%p: %d, %d) called\n", n, n->type, flags)); 
     290  
     291        exception_handler = &jmploc; 
     292        { 
     293                int err = setjmp(jmploc.loc); 
     294                if (err) { 
     295                        /* if it was a signal, check for trap handlers */ 
     296-                       if (exception == EXSIG) 
     297+                       if (exception == EXSIG) { 
     298+                               TRACE(("exception %d (EXSIG) in evaltree, err=%d\n", exception, err)); 
     299                                goto out; 
     300+                       } 
     301                        /* continue on the way out */ 
     302+                       TRACE(("exception %d in evaltree, propagating err=%d\n", exception, err)); 
     303                        exception_handler = savehandler; 
     304                        longjmp(exception_handler->loc, err); 
     305                } 
     306@@ -8010,7 +8065,8 @@ evaltree(union node *n, int flags) 
     307                if (exitstatus == 0) { 
     308                        n = n->nif.ifpart; 
     309                        goto evaln; 
     310-               } else if (n->nif.elsepart) { 
     311+               } 
     312+               if (n->nif.elsepart) { 
     313                        n = n->nif.elsepart; 
     314                        goto evaln; 
     315                } 
     316@@ -8036,6 +8092,9 @@ evaltree(union node *n, int flags) 
     317  exexit: 
     318                raise_exception(EXEXIT); 
     319        } 
     320+ 
     321+       RESTORE_INT(int_level); 
     322+       TRACE(("leaving evaltree (no interrupts)\n")); 
     323 } 
     324  
     325 #if !defined(__alpha__) || (defined(__GNUC__) && __GNUC__ >= 3) 
     326@@ -8281,7 +8340,9 @@ evalpipe(union node *n, int flags) 
     327                if (prevfd >= 0) 
     328                        close(prevfd); 
     329                prevfd = pip[0]; 
     330-               close(pip[1]); 
     331+               /* Don't want to trigger debugging */ 
     332+               if (pip[1] != -1) 
     333+                       close(pip[1]); 
     334        } 
     335        if (n->npipe.pipe_backgnd == 0) { 
     336                exitstatus = waitforjob(jp); 
     337@@ -8913,6 +8974,7 @@ evalcommand(union node *cmd, int flags) 
     338                        if (forkshell(jp, cmd, FORK_FG) != 0) { 
     339                                exitstatus = waitforjob(jp); 
     340                                INT_ON; 
     341+                               TRACE(("forked child exited with %d\n", exitstatus)); 
     342                                break; 
     343                        } 
     344                        FORCE_INT_ON; 
     345@@ -12391,7 +12453,7 @@ readcmd(int argc UNUSED_PARAM, char **ar 
     346 #endif 
     347  
     348        status = 0; 
     349-       startword = 1; 
     350+       startword = 2; 
     351        backslash = 0; 
     352 #if ENABLE_ASH_READ_TIMEOUT 
     353        if (timeout) /* NB: ensuring end_ms is nonzero */ 
     354@@ -12399,6 +12461,8 @@ readcmd(int argc UNUSED_PARAM, char **ar 
     355 #endif 
     356        STARTSTACKSTR(p); 
     357        do { 
     358+               const char *is_ifs; 
     359+ 
     360 #if ENABLE_ASH_READ_TIMEOUT 
     361                if (end_ms) { 
     362                        struct pollfd pfd[1]; 
     363@@ -12428,25 +12492,34 @@ readcmd(int argc UNUSED_PARAM, char **ar 
     364                        continue; 
     365                } 
     366                if (!rflag && c == '\\') { 
     367-                       backslash++; 
     368+                       backslash = 1; 
     369                        continue; 
     370                } 
     371                if (c == '\n') 
     372                        break; 
     373-               if (startword && *ifs == ' ' && strchr(ifs, c)) { 
     374-                       continue; 
     375+               is_ifs = strchr(ifs, c); 
     376+               if (startword && is_ifs) { 
     377+                       if (isspace(c)) 
     378+                               continue; 
     379+                       /* non-space ifs char */ 
     380+                       startword--; 
     381+                       if (startword == 1) /* first one? */ 
     382+                               continue; 
     383                } 
     384                startword = 0; 
     385-               if (ap[1] != NULL && strchr(ifs, c) != NULL) { 
     386+               if (ap[1] != NULL && is_ifs) { 
     387+                       const char *beg; 
     388                        STACKSTRNUL(p); 
     389-                       setvar(*ap, stackblock(), 0); 
     390+                       beg = stackblock(); 
     391+                       setvar(*ap, beg, 0); 
     392                        ap++; 
     393-                       startword = 1; 
     394+                       /* can we skip one non-space ifs? (2: yes) */ 
     395+                       startword = isspace(c) ? 2 : 1; 
     396                        STARTSTACKSTR(p); 
     397-               } else { 
     398- put: 
     399-                       STPUTC(c, p); 
     400+                       continue; 
     401                } 
     402+ put: 
     403+               STPUTC(c, p); 
     404        } 
     405 /* end of do {} while: */ 
     406 #if ENABLE_ASH_READ_NCHARS 
     407@@ -12460,8 +12533,8 @@ readcmd(int argc UNUSED_PARAM, char **ar 
     408 #endif 
     409  
     410        STACKSTRNUL(p); 
     411-       /* Remove trailing blanks */ 
     412-       while ((char *)stackblock() <= --p && strchr(ifs, *p) != NULL) 
     413+       /* Remove trailing space ifs chars */ 
     414+       while ((char *)stackblock() <= --p && isspace(*p) && strchr(ifs, *p) != NULL) 
     415                *p = '\0'; 
     416        setvar(*ap, stackblock(), 0); 
     417        while (*++ap != NULL) 
     418@@ -13640,7 +13713,7 @@ int ash_main(int argc UNUSED_PARAM, char 
     419        exception_handler = &jmploc; 
     420 #if DEBUG 
     421        opentrace(); 
     422-       trace_puts("Shell args: "); 
     423+       TRACE(("Shell args: ")); 
     424        trace_puts_args(argv); 
     425 #endif 
     426        rootpid = getpid(); 
     427@@ -13692,8 +13765,14 @@ int ash_main(int argc UNUSED_PARAM, char 
     428        } 
     429  state3: 
     430        state = 4; 
     431-       if (minusc) 
     432+       if (minusc) { 
     433+               /* evalstring pushes parsefile stack. 
     434+                * Ensure we don't falsely claim that 0 (stdin) 
     435+                * is one of stacked source fds */ 
     436+               if (!sflag) 
     437+                       g_parsefile->fd = -1; 
     438                evalstring(minusc, 0); 
     439+       } 
     440  
     441        if (sflag || minusc == NULL) { 
     442 #if ENABLE_FEATURE_EDITING_SAVEHISTORY 
     443@@ -13720,14 +13799,6 @@ int ash_main(int argc UNUSED_PARAM, char 
     444        /* NOTREACHED */ 
     445 } 
     446  
     447-#if DEBUG 
     448-const char *applet_name = "debug stuff usage"; 
     449-int main(int argc, char **argv) 
     450-{ 
     451-       return ash_main(argc, argv); 
     452-} 
     453-#endif 
     454- 
     455  
     456 /*- 
     457  * Copyright (c) 1989, 1991, 1993, 1994 
     458diff -urpN busybox-1.13.3/shell/ash_test/ash-read/read_ifs.right busybox-1.13.3-ash/shell/ash_test/ash-read/read_ifs.right 
     459--- busybox-1.13.3/shell/ash_test/ash-read/read_ifs.right       1970-01-01 01:00:00.000000000 +0100 
     460+++ busybox-1.13.3-ash/shell/ash_test/ash-read/read_ifs.right   2009-04-01 01:16:44.000000000 +0200 
     461@@ -0,0 +1,7 @@ 
     462+.a. .b. .c. 
     463+.a. .b. .c. 
     464+.a. .. .b,c. 
     465+.a. .. .b,c. 
     466+.a. .. .c. 
     467+.a. .. .c. .d. 
     468+.a. .. .b,c,d  ,  ,. 
     469diff -urpN busybox-1.13.3/shell/ash_test/ash-read/read_ifs.tests busybox-1.13.3-ash/shell/ash_test/ash-read/read_ifs.tests 
     470--- busybox-1.13.3/shell/ash_test/ash-read/read_ifs.tests       1970-01-01 01:00:00.000000000 +0100 
     471+++ busybox-1.13.3-ash/shell/ash_test/ash-read/read_ifs.tests   2009-04-01 01:16:44.000000000 +0200 
     472@@ -0,0 +1,7 @@ 
     473+printf 'a\t\tb\tc\n' | ( IFS=$(printf "\t") read a b c; echo ".$a. .$b. .$c." ) 
     474+printf 'a\t\tb\tc\n' | ( IFS=$(printf " \t") read a b c; echo ".$a. .$b. .$c." ) 
     475+printf 'a,,b,c\n'    | ( IFS="," read a b c; echo ".$a. .$b. .$c." ) 
     476+printf 'a,,b,c\n'    | ( IFS=" ," read a b c; echo ".$a. .$b. .$c." ) 
     477+printf 'a ,, c\n'    | ( IFS=" ," read a b c; echo ".$a. .$b. .$c." ) 
     478+printf 'a ,, c d\n'  | ( IFS=" ," read a b c d; echo ".$a. .$b. .$c. .$d." ) 
     479+printf ' a,,b,c,d  ,  ,\n' | ( IFS=" ," read a b c; echo ".$a. .$b. .$c." ) 
  • package/busybox/patches/610-tail_cmdline.patch

     
     1diff -urpN busybox-1.13.3/coreutils/tail.c busybox-1.13.3-tail/coreutils/tail.c 
     2--- busybox-1.13.3/coreutils/tail.c     2009-02-26 12:47:02.000000000 +0100 
     3+++ busybox-1.13.3-tail/coreutils/tail.c        2009-03-27 03:34:57.000000000 +0100 
     4@@ -104,7 +104,7 @@ int tail_main(int argc, char **argv) 
     5        if (argv[1] && (argv[1][0] == '+' || argv[1][0] == '-') 
     6         && isdigit(argv[1][1]) 
     7        ) { 
     8-               count = eat_num(&argv[1][1]); 
     9+               count = eat_num(argv[1]); 
     10                argv++; 
     11                argc--; 
     12        } 
  • package/busybox/patches/110-wget_getopt_fix.patch

     
    1 --- a/networking/wget.c 
    2 +++ b/networking/wget.c 
    3 @@ -437,7 +437,7 @@ int wget_main(int argc ATTRIBUTE_UNUSED, 
    4                 "directory-prefix\0" Required_argument "P" 
    5                 "proxy\0"            Required_argument "Y" 
    6                 "user-agent\0"       Required_argument "U" 
     1diff -Naur busybox-1.13.3/networking/wget.c busybox-1.13.3.new/networking/wget.c 
     2--- busybox-1.13.3/networking/wget.c    2009-03-02 07:06:28.000000000 -0800 
     3+++ busybox-1.13.3.new/networking/wget.c        2009-04-08 06:19:20.000000000 -0700 
     4@@ -443,7 +443,7 @@ 
     5                // "tries\0"            Required_argument "t" 
     6                // "timeout\0"          Required_argument "T" 
     7                /* Ignored (we always use PASV): */ 
    78-               "passive-ftp\0"      No_argument       "\xff" 
    89+               "passive-ftp\0"      No_argument       "\xfd" 
    910                "header\0"           Required_argument "\xfe" 
  • package/busybox/patches/002-darwin_compile_fix.patch

     
    1 --- a/include/libbb.h 
    2 +++ b/include/libbb.h 
    3 @@ -83,7 +83,10 @@ 
    4  extern char **environ; 
    5   
    6  /* Set the group set for the current user to GROUPS (N of them).  */ 
    7 +#if !defined(__APPLE__) 
    8  int setgroups(size_t n, const gid_t *groups); 
    9 +#endif 
    10 + 
    11  #if defined(__GLIBC__) && __GLIBC__ < 2 
    12  int vdprintf(int d, const char *format, va_list ap); 
    13  #endif 
  • package/busybox/patches/620-tar_header.patch

     
     1diff -urpN busybox-1.13.3/archival/libunarchive/get_header_tar.c busybox-1.13.3-tar/archival/libunarchive/get_header_tar.c 
     2--- busybox-1.13.3/archival/libunarchive/get_header_tar.c       2009-02-26 12:46:40.000000000 +0100 
     3+++ busybox-1.13.3-tar/archival/libunarchive/get_header_tar.c   2009-04-01 01:15:26.000000000 +0200 
     4@@ -91,7 +91,7 @@ char FAST_FUNC get_header_tar(archive_ha 
     5  
     6  again_after_align: 
     7  
     8-#if ENABLE_DESKTOP 
     9+#if ENABLE_DESKTOP || ENABLE_FEATURE_TAR_AUTODETECT 
     10        /* to prevent misdetection of bz2 sig */ 
     11        *(uint32_t*)(&tar) = 0; 
     12        i = full_read(archive_handle->src_fd, &tar, 512); 
     13@@ -142,7 +142,7 @@ char FAST_FUNC get_header_tar(archive_ha 
     14 #if ENABLE_FEATURE_TAR_AUTODETECT 
     15                char FAST_FUNC (*get_header_ptr)(archive_handle_t *); 
     16  
     17- USE_DESKTOP(autodetect:) 
     18+ autodetect: 
     19                /* tar gz/bz autodetect: check for gz/bz2 magic. 
     20                 * If we see the magic, and it is the very first block, 
     21                 * we can switch to get_header_tar_gz/bz2/lzma(). 
     22diff -urpN busybox-1.13.3/archival/tar.c busybox-1.13.3-tar/archival/tar.c 
     23--- busybox-1.13.3/archival/tar.c       2009-02-26 12:56:00.000000000 +0100 
     24+++ busybox-1.13.3-tar/archival/tar.c   2009-04-01 01:15:39.000000000 +0200 
     25@@ -934,8 +934,10 @@ int tar_main(int argc UNUSED_PARAM, char 
     26                        tar_handle->src_fd = fileno(tar_stream); 
     27                        tar_handle->seek = seek_by_read; 
     28                } else { 
     29-                       if (ENABLE_FEATURE_TAR_AUTODETECT && flags == O_RDONLY) { 
     30-                               get_header_ptr = get_header_tar; 
     31+                       if (ENABLE_FEATURE_TAR_AUTODETECT 
     32+                        && get_header_ptr == get_header_tar 
     33+                        && flags == O_RDONLY 
     34+                       ) { 
     35                                tar_handle->src_fd = open_zipped(tar_filename); 
     36                                if (tar_handle->src_fd < 0) 
     37                                        bb_perror_msg_and_die("can't open '%s'", tar_filename); 
  • package/busybox/patches/640-hush_cmdline.patch

     
     1diff -urpN busybox-1.13.3/shell/hush.c busybox-1.13.3-hush/shell/hush.c 
     2--- busybox-1.13.3/shell/hush.c 2009-02-26 12:46:55.000000000 +0100 
     3+++ busybox-1.13.3-hush/shell/hush.c    2009-03-22 12:46:42.000000000 +0100 
     4@@ -458,8 +458,11 @@ struct globals { 
     5        smallint fake_mode; 
     6        /* these three support $?, $#, and $1 */ 
     7        smalluint last_return_code; 
     8-       char **global_argv; 
     9+       /* is global_argv and global_argv[1..n] malloced? (note: not [0]) */ 
     10+       smalluint global_args_malloced; 
     11+       /* how many non-NULL argv's we have. NB: $# + 1 */ 
     12        int global_argc; 
     13+       char **global_argv; 
     14 #if ENABLE_HUSH_LOOPS 
     15        unsigned depth_break_continue; 
     16        unsigned depth_of_loop; 
     17@@ -633,7 +636,7 @@ static char *unbackslash(char *src) 
     18        return dst; 
     19 } 
     20  
     21-static char **add_strings_to_strings(char **strings, char **add) 
     22+static char **add_strings_to_strings(char **strings, char **add, int need_to_dup) 
     23 { 
     24        int i; 
     25        unsigned count1; 
     26@@ -658,7 +661,7 @@ static char **add_strings_to_strings(cha 
     27        v[count1 + count2] = NULL; 
     28        i = count2; 
     29        while (--i >= 0) 
     30-               v[count1 + i] = add[i]; 
     31+               v[count1 + i] = (need_to_dup ? xstrdup(add[i]) : add[i]); 
     32        return v; 
     33 } 
     34  
     35@@ -667,7 +670,7 @@ static char **add_string_to_strings(char 
     36        char *v[2]; 
     37        v[0] = add; 
     38        v[1] = NULL; 
     39-       return add_strings_to_strings(strings, v); 
     40+       return add_strings_to_strings(strings, v, /*dup:*/ 0); 
     41 } 
     42  
     43 static void putenv_all(char **strings) 
     44@@ -1213,8 +1216,13 @@ static int o_glob(o_string *o, int n) 
     45  * Otherwise, just finish current list[] and start new */ 
     46 static int o_save_ptr(o_string *o, int n) 
     47 { 
     48-       if (o->o_glob) 
     49-               return o_glob(o, n); /* o_save_ptr_helper is inside */ 
     50+       if (o->o_glob) { /* if globbing is requested */ 
     51+               /* If o->has_empty_slot, list[n] was already globbed 
     52+                * (if it was requested back then when it was filled) 
     53+                * so don't do that again! */ 
     54+               if (!o->has_empty_slot) 
     55+                       return o_glob(o, n); /* o_save_ptr_helper is inside */ 
     56+       } 
     57        return o_save_ptr_helper(o, n); 
     58 } 
     59  
     60@@ -4279,6 +4287,11 @@ int hush_main(int argc, char **argv) 
     61                switch (opt) { 
     62                case 'c': 
     63                        G.global_argv = argv + optind; 
     64+                       if (!argv[optind]) { 
     65+                               /* -c 'script' (no params): prevent empty $0 */ 
     66+                               *--G.global_argv = argv[0]; 
     67+                               optind--; 
     68+                       } /* else -c 'script' PAR0 PAR1: $0 is PAR0 */ 
     69                        G.global_argc = argc - optind; 
     70                        opt = parse_and_run_string(optarg, 0 /* parse_flag */); 
     71                        goto final_return; 
     72@@ -4639,17 +4652,68 @@ static int builtin_read(char **argv) 
     73        return set_local_var(string, 0); 
     74 } 
     75  
     76-/* built-in 'set [VAR=value]' handler */ 
     77+/* built-in 'set' handler 
     78+ * SUSv3 says: 
     79+ * set [-abCefmnuvx] [-h] [-o option] [argument...] 
     80+ * set [+abCefmnuvx] [+h] [+o option] [argument...] 
     81+ * set -- [argument...] 
     82+ * set -o 
     83+ * set +o 
     84+ * Implementations shall support the options in both their hyphen and 
     85+ * plus-sign forms. These options can also be specified as options to sh. 
     86+ * Examples: 
     87+ * Write out all variables and their values: set 
     88+ * Set $1, $2, and $3 and set "$#" to 3: set c a b 
     89+ * Turn on the -x and -v options: set -xv 
     90+ * Unset all positional parameters: set -- 
     91+ * Set $1 to the value of x, even if it begins with '-' or '+': set -- "$x" 
     92+ * Set the positional parameters to the expansion of x, even if x expands 
     93+ * with a leading '-' or '+': set -- $x 
     94+ * 
     95+ * So far, we only support "set -- [argument...]" by ignoring all options 
     96+ * (also, "-o option" will be mishandled by taking "option" as parameter #1). 
     97+ */ 
     98 static int builtin_set(char **argv) 
     99 { 
     100-       char *temp = argv[1]; 
     101        struct variable *e; 
     102+       char **pp; 
     103+       char *arg = *++argv; 
     104  
     105-       if (temp == NULL) 
     106+       if (arg == NULL) { 
     107                for (e = G.top_var; e; e = e->next) 
     108                        puts(e->varstr); 
     109-       else 
     110-               set_local_var(xstrdup(temp), 0); 
     111+       } else { 
     112+               /* NB: G.global_argv[0] ($0) is never freed/changed */ 
     113+ 
     114+               if (G.global_args_malloced) { 
     115+                       pp = G.global_argv; 
     116+                       while (*++pp) 
     117+                               free(*pp); 
     118+                       G.global_argv[1] = NULL; 
     119+               } else { 
     120+                       G.global_args_malloced = 1; 
     121+                       pp = xzalloc(sizeof(pp[0]) * 2); 
     122+                       pp[0] = G.global_argv[0]; /* retain $0 */ 
     123+                       G.global_argv = pp; 
     124+               } 
     125+               do  { 
     126+                       if (arg[0] == '+') 
     127+                               continue; 
     128+                       if (arg[0] != '-') 
     129+                               break; 
     130+                       if (arg[1] == '-' && arg[2] == '\0') { 
     131+                               argv++; 
     132+                               break; 
     133+                       } 
     134+               } while ((arg = *++argv) != NULL); 
     135+               /* Now argv[0] is 1st argument */ 
     136+ 
     137+               /* This realloc's G.global_argv */ 
     138+               G.global_argv = pp = add_strings_to_strings(G.global_argv, argv, /*dup:*/ 1); 
     139+               G.global_argc = 1; 
     140+               while (*++pp) 
     141+                       G.global_argc++; 
     142+       } 
     143  
     144        return EXIT_SUCCESS; 
     145 } 
     146@@ -4661,9 +4725,14 @@ static int builtin_shift(char **argv) 
     147                n = atoi(argv[1]); 
     148        } 
     149        if (n >= 0 && n < G.global_argc) { 
     150-               G.global_argv[n] = G.global_argv[0]; 
     151+               if (G.global_args_malloced) { 
     152+                       int m = 1; 
     153+                       while (m <= n) 
     154+                               free(G.global_argv[m++]); 
     155+               } 
     156                G.global_argc -= n; 
     157-               G.global_argv += n; 
     158+               memmove(&G.global_argv[1], &G.global_argv[n+1], 
     159+                               G.global_argc * sizeof(G.global_argv[0])); 
     160                return EXIT_SUCCESS; 
     161        } 
     162        return EXIT_FAILURE; 
     163diff -urpN busybox-1.13.3/shell/hush_test/hush-parsing/starquoted2.right busybox-1.13.3-hush/shell/hush_test/hush-parsing/starquoted2.right 
     164--- busybox-1.13.3/shell/hush_test/hush-parsing/starquoted2.right       2009-02-26 12:46:52.000000000 +0100 
     165+++ busybox-1.13.3-hush/shell/hush_test/hush-parsing/starquoted2.right  2009-03-22 12:46:20.000000000 +0100 
     166@@ -1,2 +1,3 @@ 
     167 Should be printed 
     168 Should be printed 
     169+Empty: 
     170diff -urpN busybox-1.13.3/shell/hush_test/hush-parsing/starquoted2.tests busybox-1.13.3-hush/shell/hush_test/hush-parsing/starquoted2.tests 
     171--- busybox-1.13.3/shell/hush_test/hush-parsing/starquoted2.tests       2009-02-26 12:46:52.000000000 +0100 
     172+++ busybox-1.13.3-hush/shell/hush_test/hush-parsing/starquoted2.tests  2009-03-22 12:46:20.000000000 +0100 
     173@@ -12,3 +12,6 @@ for a in "$@"""; do echo Should not be p 
     174 for a in """$@"; do echo Should not be printed; done 
     175 for a in """$@"''"$@"''; do echo Should not be printed; done 
     176 for a in ""; do echo Should be printed; done 
     177+ 
     178+# Bug 207: "$@" expands to nothing, and we erroneously glob "%s\\n" twice: 
     179+printf "Empty:%s\\n" "$@" 
  • package/busybox/patches/480-vi_search.patch

     
    1 --- a/editors/vi.c 
    2 +++ b/editors/vi.c 
    3 @@ -3313,7 +3313,7 @@ static void do_cmd(char c) 
     1diff -Naur busybox-1.13.3/editors/vi.c busybox-1.13.3.new/editors/vi.c 
     2--- busybox-1.13.3/editors/vi.c 2009-02-26 03:47:38.000000000 -0800 
     3+++ busybox-1.13.3.new/editors/vi.c     2009-04-08 06:48:05.000000000 -0700 
     4@@ -3197,7 +3197,7 @@ 
    45                buf[1] = '\0'; 
    56                q = get_input_line(buf);        // get input line- use "status line" 
    67                if (q[0] && !q[1]) { 
    78-                       if (last_search_pattern[0]) 
    89+                       if (last_search_pattern) 
    9                             last_search_pattern[0] = c; 
     10                                last_search_pattern[0] = c; 
    1011                        goto dc3; // if no pat re-use old pat 
    1112                } 
    12 @@ -3329,6 +3329,10 @@ static void do_cmd(char c) 
     13@@ -3213,6 +3213,10 @@ 
    1314                if (cmdcnt-- > 1) { 
    1415                        do_cmd(c); 
    1516                }                               // repeat cnt 
     
    2021                dir = BACK;             // assume BACKWARD search 
    2122                p = dot - 1; 
    2223                if (last_search_pattern[0] == '?') { 
    23 @@ -3348,10 +3352,8 @@ static void do_cmd(char c) 
    24                         msg = "No previous regular expression"; 
    25                         goto dc2; 
    26                 } 
    27 -               if (last_search_pattern[0] == '/') { 
    28 -                       dir = FORWARD;  // assume FORWARD search 
    29 -                       p = dot + 1; 
    30 -               } 
    31 +               dir = FORWARD;  // assume FORWARD search 
    32 +               p = dot + 1; 
    33                 if (last_search_pattern[0] == '?') { 
    34                         dir = BACK; 
    35                         p = dot - 1; 
  • package/busybox/patches/450-httpd_accept_header.patch

     
    1 --- a/networking/httpd.c 
    2 +++ b/networking/httpd.c 
    3 @@ -255,6 +255,8 @@ struct globals { 
    4         USE_FEATURE_HTTPD_BASIC_AUTH(char *remoteuser;) 
    5         USE_FEATURE_HTTPD_CGI(char *referer;) 
    6         USE_FEATURE_HTTPD_CGI(char *user_agent;) 
    7 +       USE_FEATURE_HTTPD_CGI(char *http_accept;) 
    8 +       USE_FEATURE_HTTPD_CGI(char *http_accept_language;) 
    9   
    10         off_t file_size;        /* -1 - unknown */ 
    11  #if ENABLE_FEATURE_HTTPD_RANGES 
    12 @@ -302,6 +304,8 @@ struct globals { 
    13  #define remoteuser        (G.remoteuser       ) 
    14  #define referer           (G.referer          ) 
    15  #define user_agent        (G.user_agent       ) 
    16 +#define http_accept       (G.http_accept      ) 
    17 +#define http_accept_language (G.http_accept_language) 
    18  #define file_size         (G.file_size        ) 
    19  #if ENABLE_FEATURE_HTTPD_RANGES 
    20  #define range_start       (G.range_start      ) 
    21 @@ -1383,6 +1387,10 @@ static void send_cgi_and_exit( 
    22                 } 
    23         } 
    24         setenv1("HTTP_USER_AGENT", user_agent); 
    25 +       if (http_accept) 
    26 +               setenv1("HTTP_ACCEPT", http_accept); 
    27 +       if (http_accept_language) 
    28 +               setenv1("HTTP_ACCEPT_LANGUAGE", http_accept_language); 
    29         if (post_len) 
    30                 putenv(xasprintf("CONTENT_LENGTH=%d", post_len)); 
    31         if (cookie) 
    32 @@ -2020,6 +2028,10 @@ static void handle_incoming_and_exit(con 
    33                                 referer = xstrdup(skip_whitespace(iobuf + sizeof("Referer:")-1)); 
    34                         } else if (STRNCASECMP(iobuf, "User-Agent:") == 0) { 
    35                                 user_agent = xstrdup(skip_whitespace(iobuf + sizeof("User-Agent:")-1)); 
    36 +                       } else if (STRNCASECMP(iobuf, "Accept:") == 0) { 
    37 +                               http_accept = xstrdup(skip_whitespace(iobuf + sizeof("Accept:")-1)); 
    38 +                       } else if (STRNCASECMP(iobuf, "Accept-Language:") == 0) { 
    39 +                               http_accept_language = xstrdup(skip_whitespace(iobuf + sizeof("Accept-Language:")-1)); 
    40                         } 
    41  #endif 
    42  #if ENABLE_FEATURE_HTTPD_BASIC_AUTH 
  • package/busybox/patches/470-insmod_search.patch

     
    1 --- a/modutils/insmod.c 
    2 +++ b/modutils/insmod.c 
    3 @@ -61,21 +61,117 @@ 
    4  #include "libbb.h" 
    5  #include <libgen.h> 
    6  #include <sys/utsname.h> 
    7 +#if ENABLE_FEATURE_2_6_MODULES 
    8 +#include <sys/mman.h> 
    9 +#include <asm/unistd.h> 
    10 +#include <sys/syscall.h> 
    11 +#endif 
    12   
    13  #if !ENABLE_FEATURE_2_4_MODULES && !ENABLE_FEATURE_2_6_MODULES 
    14  #undef ENABLE_FEATURE_2_4_MODULES 
    15  #define ENABLE_FEATURE_2_4_MODULES 1 
    16  #endif 
    17   
    18 -/* 
    19 - * Big piece of 2.4-specific code 
    20 - */ 
    21  #if ENABLE_FEATURE_2_4_MODULES 
    22 - 
    23 +int insmod_main_24(int argc, char **argv); 
    24 +#endif 
    25  #if ENABLE_FEATURE_2_6_MODULES 
    26 -static int insmod_ng_main(int argc, char **argv); 
    27 +int insmod_main_26(int argc, char **argv); 
    28  #endif 
    29 +int insmod_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; 
    30   
    31 +static char *g_filename = NULL; 
    32 +#define _PATH_MODULES  "/lib/modules" 
    33 + 
    34 +static int check_module_name_match(const char *filename, struct stat *statbuf, 
    35 +                                  void *userdata, int depth) 
    36 +{ 
    37 +       char *fullname = (char *) userdata; 
    38 +       char *tmp; 
    39 + 
    40 +       if (fullname[0] == '\0') 
    41 +               return FALSE; 
    42 + 
    43 +       tmp = bb_get_last_path_component_nostrip(filename); 
    44 +       if (strcmp(tmp, fullname) == 0) { 
    45 +               /* Stop searching if we find a match */ 
    46 +               g_filename = xstrdup(filename); 
    47 +               return FALSE; 
    48 +       } 
    49 + 
    50 +       return TRUE; 
    51 +} 
    52 + 
    53 +static int find_module(char *filename) 
    54 +{ 
    55 +       char *module_dir, real_module_dir[FILENAME_MAX]; 
    56 +       int len, slen, ret = ENOENT, k_version; 
    57 +       struct utsname myuname; 
    58 +       const char *suffix; 
    59 +       struct stat st; 
    60 + 
    61 +       /* check the kernel version */ 
    62 +       if ((uname(&myuname) != 0) || (myuname.release[0] != '2')) 
    63 +               return EINVAL; 
    64 + 
    65 +       k_version = myuname.release[2] - '0'; 
    66 +#if ENABLE_FEATURE_2_4_MODULES 
    67 +       if (k_version <= 4) 
    68 +               suffix = ".o"; 
    69 +       else 
    70 +#endif 
    71 +               suffix = ".ko"; 
    72 + 
    73 +       len = strlen(filename); 
    74 +       slen = strlen(suffix); 
    75 + 
    76 +       /* check for suffix and absolute path first */ 
    77 +       if ((len < slen + 2) || (strcmp(filename + len - slen, suffix) != 0)) { 
    78 +               filename = xasprintf("%s%s", filename, suffix); 
    79 +       } else { 
    80 +               filename = strdup(filename); 
    81 +               if ((stat(filename, &st) == 0) && S_ISREG(st.st_mode)) { 
    82 +                       g_filename = filename; 
    83 +                       return 0; 
    84 +               } 
    85 +               free(filename); 
    86 +               return ENOENT; 
    87 +       } 
    88 + 
    89 +       /* next: scan /lib/modules/<release> */ 
    90 +       /* Jump through hoops in case /lib/modules/`uname -r` 
    91 +       * is a symlink.  We do not want recursive_action to 
    92 +       * follow symlinks, but we do want to follow the 
    93 +       * /lib/modules/`uname -r` dir, So resolve it ourselves 
    94 +       * if it is a link... */ 
    95 +       module_dir = concat_path_file(_PATH_MODULES, myuname.release); 
    96 +       if (realpath(module_dir, real_module_dir) != NULL) { 
    97 +               free(module_dir); 
    98 +               module_dir = real_module_dir; 
    99 +       } 
    100 + 
    101 +       recursive_action(module_dir, ACTION_RECURSE, 
    102 +               check_module_name_match, 0, filename, 0); 
    103 + 
    104 +       /* Check if we have a complete path */ 
    105 +       if (g_filename == NULL) 
    106 +               goto done; 
    107 + 
    108 +       if ((stat(g_filename, &st) == 0) && S_ISREG(st.st_mode)) 
    109 +               ret = 0; 
    110 +       else 
    111 +               free(g_filename); 
    112 + 
    113 +done: 
    114 +       free(filename); 
    115 + 
    116 +       return ret; 
    117 +} 
    118 + 
    119 +/* 
    120 + * Big piece of 2.4-specific code 
    121 + */ 
    122 +#if ENABLE_FEATURE_2_4_MODULES 
    123  #if ENABLE_FEATURE_INSMOD_LOADINKMEM 
    124  #define LOADBITS 0 
    125  #else 
    126 @@ -184,7 +280,6 @@ static int insmod_ng_main(int argc, char 
    127  /* Microblaze */ 
    128  #if defined(__microblaze__) 
    129  #define USE_SINGLE 
    130 -#include <linux/elf-em.h> 
    131  #define MATCH_MACHINE(x) (x == EM_XILINX_MICROBLAZE) 
    132  #define SHT_RELM       SHT_RELA 
    133  #define Elf32_RelM     Elf32_Rela 
    134 @@ -452,7 +547,7 @@ enum { 
    135  /* The system calls unchanged between 2.0 and 2.1.  */ 
    136   
    137  unsigned long create_module(const char *, size_t); 
    138 -int delete_module(const char *module, unsigned int flags); 
    139 +int delete_module(const char *); 
    140   
    141   
    142  #endif /* module.h */ 
    143 @@ -652,7 +747,7 @@ static struct obj_symbol *arch_new_symbo 
    144   
    145  static enum obj_reloc arch_apply_relocation(struct obj_file *f, 
    146                                       struct obj_section *targsec, 
    147 -                                     /*struct obj_section *symsec,*/ 
    148 +                                     struct obj_section *symsec, 
    149                                       struct obj_symbol *sym, 
    150                                       ElfW(RelM) *rel, ElfW(Addr) value); 
    151   
    152 @@ -673,6 +768,7 @@ static int obj_gpl_license(struct obj_fi 
    153  #define SPFX   "" 
    154  #endif 
    155   
    156 + 
    157  enum { STRVERSIONLEN = 64 }; 
    158   
    159  /*======================================================================*/ 
    160 @@ -788,28 +884,6 @@ static char *m_filename; 
    161  static char *m_fullName; 
    162   
    163   
    164 -/*======================================================================*/ 
    165 - 
    166 - 
    167 -static int check_module_name_match(const char *filename, 
    168 -               struct stat *statbuf ATTRIBUTE_UNUSED, 
    169 -               void *userdata, int depth ATTRIBUTE_UNUSED) 
    170 -{ 
    171 -       char *fullname = (char *) userdata; 
    172 -       char *tmp; 
    173 - 
    174 -       if (fullname[0] == '\0') 
    175 -               return FALSE; 
    176 - 
    177 -       tmp = bb_get_last_path_component_nostrip(filename); 
    178 -       if (strcmp(tmp, fullname) == 0) { 
    179 -               /* Stop searching if we find a match */ 
    180 -               m_filename = xstrdup(filename); 
    181 -               return FALSE; 
    182 -       } 
    183 -       return TRUE; 
    184 -} 
    185 - 
    186   
    187  /*======================================================================*/ 
    188   
    189 @@ -835,32 +909,20 @@ static struct obj_symbol *arch_new_symbo 
    190  static enum obj_reloc 
    191  arch_apply_relocation(struct obj_file *f, 
    192                                 struct obj_section *targsec, 
    193 -                               /*struct obj_section *symsec,*/ 
    194 +                               struct obj_section *symsec, 
    195                                 struct obj_symbol *sym, 
    196                                 ElfW(RelM) *rel, ElfW(Addr) v) 
    197  { 
    198 -#if defined(__arm__) || defined(__i386__) || defined(__mc68000__) \ 
    199 - || defined(__sh__) || defined(__s390__) || defined(__x86_64__) \ 
    200 - || defined(__powerpc__) || defined(__mips__) 
    201         struct arch_file *ifile = (struct arch_file *) f; 
    202 -#endif 
    203         enum obj_reloc ret = obj_reloc_ok; 
    204         ElfW(Addr) *loc = (ElfW(Addr) *) (targsec->contents + rel->r_offset); 
    205 -#if defined(__arm__) || defined(__H8300H__) || defined(__H8300S__) \ 
    206 - || defined(__i386__) || defined(__mc68000__) || defined(__microblaze__) \ 
    207 - || defined(__mips__) || defined(__nios2__) || defined(__powerpc__) \ 
    208 - || defined(__s390__) || defined(__sh__) || defined(__x86_64__) 
    209         ElfW(Addr) dot = targsec->header.sh_addr + rel->r_offset; 
    210 -#endif 
    211  #if defined(USE_GOT_ENTRIES) || defined(USE_PLT_ENTRIES) 
    212         struct arch_symbol *isym = (struct arch_symbol *) sym; 
    213  #endif 
    214 -#if defined(__arm__) || defined(__i386__) || defined(__mc68000__) \ 
    215 - || defined(__sh__) || defined(__s390__) 
    216  #if defined(USE_GOT_ENTRIES) 
    217         ElfW(Addr) got = ifile->got ? ifile->got->header.sh_addr : 0; 
    218  #endif 
    219 -#endif 
    220  #if defined(USE_PLT_ENTRIES) 
    221         ElfW(Addr) plt = ifile->plt ? ifile->plt->header.sh_addr : 0; 
    222         unsigned long *ip; 
    223 @@ -954,7 +1016,6 @@ arch_apply_relocation(struct obj_file *f 
    224   
    225                 case R_386_PLT32: 
    226                 case R_386_PC32: 
    227 -               case R_386_GOTOFF: 
    228                         *loc += v - dot; 
    229                         break; 
    230   
    231 @@ -973,6 +1034,9 @@ arch_apply_relocation(struct obj_file *f 
    232   
    233                 case R_386_GOT32: 
    234                         goto bb_use_got; 
    235 + 
    236 +               case R_386_GOTOFF: 
    237 +                       *loc += v - got; 
    238                         break; 
    239   
    240  #elif defined(__microblaze__) 
    241 @@ -1759,7 +1823,7 @@ static int arch_list_add(ElfW(RelM) *rel 
    242   
    243  #if defined(USE_SINGLE) 
    244   
    245 -static int arch_single_init(/*ElfW(RelM) *rel,*/ struct arch_single_entry *single, 
    246 +static int arch_single_init(ElfW(RelM) *rel, struct arch_single_entry *single, 
    247                              int offset, int size) 
    248  { 
    249         if (single->allocated == 0) { 
    250 @@ -1907,7 +1971,7 @@ static void arch_create_got(struct obj_f 
    251  #if defined(USE_GOT_ENTRIES) 
    252                         if (got_allocate) { 
    253                                 got_offset += arch_single_init( 
    254 -                                               /*rel,*/ &intsym->gotent, 
    255 +                                               rel, &intsym->gotent, 
    256                                                 got_offset, GOT_ENTRY_SIZE); 
    257   
    258                                 got_needed = 1; 
    259 @@ -1921,7 +1985,7 @@ static void arch_create_got(struct obj_f 
    260                                                 plt_offset, PLT_ENTRY_SIZE); 
    261  #else 
    262                                 plt_offset += arch_single_init( 
    263 -                                               /*rel,*/ &intsym->pltent, 
    264 +                                               rel, &intsym->pltent, 
    265                                                 plt_offset, PLT_ENTRY_SIZE); 
    266  #endif 
    267                                 plt_needed = 1; 
    268 @@ -1959,8 +2023,7 @@ static unsigned long obj_elf_hash_n(cons 
    269         while (n > 0) { 
    270                 ch = *name++; 
    271                 h = (h << 4) + ch; 
    272 -               g = (h & 0xf0000000); 
    273 -               if (g != 0) { 
    274 +               if ((g = (h & 0xf0000000)) != 0) { 
    275                         h ^= g >> 24; 
    276                         h &= ~g; 
    277                 } 
    278 @@ -2039,7 +2102,7 @@ obj_add_symbol(struct obj_file *f, const 
    279         int n_type = ELF_ST_TYPE(info); 
    280         int n_binding = ELF_ST_BIND(info); 
    281   
    282 -       for (sym = f->symtab[hash]; sym; sym = sym->next) { 
    283 +       for (sym = f->symtab[hash]; sym; sym = sym->next) 
    284                 if (f->symbol_cmp(sym->name, name) == 0) { 
    285                         int o_secidx = sym->secidx; 
    286                         int o_info = sym->info; 
    287 @@ -2098,14 +2161,14 @@ obj_add_symbol(struct obj_file *f, const 
    288                                 return sym; 
    289                         } 
    290                 } 
    291 -       } 
    292   
    293         /* Completely new symbol.  */ 
    294         sym = arch_new_symbol(); 
    295         sym->next = f->symtab[hash]; 
    296         f->symtab[hash] = sym; 
    297         sym->ksymidx = -1; 
    298 -       if (ELF_ST_BIND(info) == STB_LOCAL && symidx != (unsigned long)(-1)) { 
    299 + 
    300 +       if (ELF_ST_BIND(info) == STB_LOCAL && symidx != -1) { 
    301                 if (symidx >= f->local_symtab_size) 
    302                         bb_error_msg("local symbol %s with index %ld exceeds local_symtab_size %ld", 
    303                                         name, (long) symidx, (long) f->local_symtab_size); 
    304 @@ -3228,7 +3291,7 @@ static int obj_relocate(struct obj_file  
    305   
    306                         /* Do it! */ 
    307                         switch (arch_apply_relocation 
    308 -                                       (f, targsec, /*symsec,*/ intsym, rel, value) 
    309 +                                       (f, targsec, symsec, intsym, rel, value) 
    310                         ) { 
    311                         case obj_reloc_ok: 
    312                                 break; 
    313 @@ -3307,11 +3370,11 @@ static int obj_create_image(struct obj_f 
    314   
    315  /*======================================================================*/ 
    316   
    317 -static struct obj_file *obj_load(FILE * fp, int loadprogbits ATTRIBUTE_UNUSED) 
    318 +static struct obj_file *obj_load(FILE * fp, int loadprogbits) 
    319  { 
    320         struct obj_file *f; 
    321         ElfW(Shdr) * section_headers; 
    322 -       size_t shnum, i; 
    323 +       int shnum, i; 
    324         char *shstrtab; 
    325   
    326         /* Read the file header.  */ 
    327 @@ -3583,7 +3646,7 @@ static int obj_gpl_license(struct obj_fi 
    328                 while (ptr < endptr) { 
    329                         value = strchr(ptr, '='); 
    330                         if (value && strncmp(ptr, "license", value-ptr) == 0) { 
    331 -                               unsigned i; 
    332 +                               int i; 
    333                                 if (license) 
    334                                         *license = value+1; 
    335                                 for (i = 0; i < ARRAY_SIZE(gpl_licenses); ++i) { 
    336 @@ -3687,9 +3750,6 @@ static void check_tainted_module(struct  
    337   * start of some sections.  this info is used by ksymoops to do better 
    338   * debugging. 
    339   */ 
    340 -#if !ENABLE_FEATURE_INSMOD_VERSION_CHECKING 
    341 -#define get_module_version(f, str) get_module_version(str) 
    342 -#endif 
    343  static int 
    344  get_module_version(struct obj_file *f, char str[STRVERSIONLEN]) 
    345  { 
    346 @@ -3722,8 +3782,7 @@ add_ksymoops_symbols(struct obj_file *f, 
    347         struct obj_symbol *sym; 
    348         char *name, *absolute_filename; 
    349         char str[STRVERSIONLEN]; 
    350 -       unsigned i; 
    351 -       int l, lm_name, lfilename, use_ksymtab, version; 
    352 +       int i, l, lm_name, lfilename, use_ksymtab, version; 
    353         struct stat statbuf; 
    354   
    355         /* WARNING: was using realpath, but replaced by readlink to stop using 
    356 @@ -3910,145 +3969,57 @@ static void print_load_map(struct obj_fi 
    357  void print_load_map(struct obj_file *f); 
    358  #endif 
    359   
    360 -int insmod_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; 
    361 -int insmod_main(int argc, char **argv) 
    362 +int insmod_main_24( int argc, char **argv) 
    363  { 
    364         char *opt_o, *arg1; 
    365 -       int len; 
    366         int k_crcs; 
    367 -       char *tmp, *tmp1; 
    368         unsigned long m_size; 
    369         ElfW(Addr) m_addr; 
    370         struct obj_file *f; 
    371 -       struct stat st; 
    372 -       char *m_name = NULL; 
    373 -       int exit_status = EXIT_FAILURE; 
    374 +       char *tmp = NULL, *m_name = NULL; 
    375 +       int ret = EINVAL; 
    376         int m_has_modinfo; 
    377  #if ENABLE_FEATURE_INSMOD_VERSION_CHECKING 
    378         struct utsname uts_info; 
    379         char m_strversion[STRVERSIONLEN]; 
    380         int m_version, m_crcs; 
    381  #endif 
    382 -#if ENABLE_FEATURE_CLEAN_UP 
    383         FILE *fp = NULL; 
    384 -#else 
    385 -       FILE *fp; 
    386 -#endif 
    387 -       int k_version = 0; 
    388 +       int k_version; 
    389         struct utsname myuname; 
    390   
    391 +       /* check the kernel version */ 
    392 +       if ((uname(&myuname) != 0) || (myuname.release[0] != '2')) 
    393 +               return EINVAL; 
    394 + 
    395 +       k_version = myuname.release[2] - '0'; 
    396 +       if (k_version > 4) 
    397 +               return ENOTSUP; 
    398 + 
    399         /* Parse any options */ 
    400         getopt32(argv, OPTION_STR, &opt_o); 
    401         arg1 = argv[optind]; 
    402         if (option_mask32 & OPT_o) { // -o /* name the output module */ 
    403 -               free(m_name); 
    404                 m_name = xstrdup(opt_o); 
    405         } 
    406   
    407 -       if (arg1 == NULL) { 
    408 +       if (arg1 == NULL) 
    409                 bb_show_usage(); 
    410 -       } 
    411   
    412 -       /* Grab the module name */ 
    413 -       tmp1 = xstrdup(arg1); 
    414 -       tmp = basename(tmp1); 
    415 -       len = strlen(tmp); 
    416 - 
    417 -       if (uname(&myuname) == 0) { 
    418 -               if (myuname.release[0] == '2') { 
    419 -                       k_version = myuname.release[2] - '0'; 
    420 -               } 
    421 -       } 
    422 - 
    423 -#if ENABLE_FEATURE_2_6_MODULES 
    424 -       if (k_version > 4 && len > 3 && tmp[len - 3] == '.' 
    425 -        && tmp[len - 2] == 'k' && tmp[len - 1] == 'o' 
    426 -       ) { 
    427 -               len -= 3; 
    428 -               tmp[len] = '\0'; 
    429 -       } else 
    430 -#endif 
    431 -               if (len > 2 && tmp[len - 2] == '.' && tmp[len - 1] == 'o') { 
    432 -                       len -= 2; 
    433 -                       tmp[len] = '\0'; 
    434 -               } 
    435 - 
    436 - 
    437 -#if ENABLE_FEATURE_2_6_MODULES 
    438 -       if (k_version > 4) 
    439 -               m_fullName = xasprintf("%s.ko", tmp); 
    440 -       else 
    441 -#endif 
    442 -               m_fullName = xasprintf("%s.o", tmp); 
    443 +       ret = find_module(arg1); 
    444 +       if (ret) 
    445 +               goto out; 
    446   
    447         if (!m_name) { 
    448 -               m_name = tmp; 
    449 -       } else { 
    450 -               free(tmp1); 
    451 -               tmp1 = NULL;       /* flag for free(m_name) before exit() */ 
    452 -       } 
    453 - 
    454 -       /* Get a filedesc for the module.  Check that we have a complete path */ 
    455 -       if (stat(arg1, &st) < 0 || !S_ISREG(st.st_mode) 
    456 -        || (fp = fopen(arg1, "r")) == NULL 
    457 -       ) { 
    458 -               /* Hmm.  Could not open it.  First search under /lib/modules/`uname -r`, 
    459 -                * but do not error out yet if we fail to find it... */ 
    460 -               if (k_version) {        /* uname succeedd */ 
    461 -                       char *module_dir; 
    462 -                       char *tmdn; 
    463 - 
    464 -                       tmdn = concat_path_file(CONFIG_DEFAULT_MODULES_DIR, myuname.release); 
    465 -                       /* Jump through hoops in case /lib/modules/`uname -r` 
    466 -                        * is a symlink.  We do not want recursive_action to 
    467 -                        * follow symlinks, but we do want to follow the 
    468 -                        * /lib/modules/`uname -r` dir, So resolve it ourselves 
    469 -                        * if it is a link... */ 
    470 -                       module_dir = xmalloc_readlink(tmdn); 
    471 -                       if (!module_dir) 
    472 -                               module_dir = xstrdup(tmdn); 
    473 -                       recursive_action(module_dir, ACTION_RECURSE, 
    474 -                                       check_module_name_match, NULL, m_fullName, 0); 
    475 -                       free(module_dir); 
    476 -                       free(tmdn); 
    477 -               } 
    478 - 
    479 -               /* Check if we have found anything yet */ 
    480 -               if (!m_filename || ((fp = fopen(m_filename, "r")) == NULL)) { 
    481 -                       int r; 
    482 -                       char *module_dir; 
    483 - 
    484 -                       free(m_filename); 
    485 -                       m_filename = NULL; 
    486 -                       module_dir = xmalloc_readlink(CONFIG_DEFAULT_MODULES_DIR); 
    487 -                       if (!module_dir) 
    488 -                               module_dir = xstrdup(CONFIG_DEFAULT_MODULES_DIR); 
    489 -                       /* No module found under /lib/modules/`uname -r`, this 
    490 -                        * time cast the net a bit wider.  Search /lib/modules/ */ 
    491 -                       r = recursive_action(module_dir, ACTION_RECURSE, 
    492 -                                       check_module_name_match, NULL, m_fullName, 0); 
    493 -                       if (r) 
    494 -                               bb_error_msg_and_die("%s: module not found", m_fullName); 
    495 -                       free(module_dir); 
    496 -                       if (m_filename == NULL 
    497 -                        || ((fp = fopen(m_filename, "r")) == NULL) 
    498 -                       ) { 
    499 -                               bb_error_msg_and_die("%s: module not found", m_fullName); 
    500 -                       } 
    501 +               tmp = xstrdup(arg1); 
    502 +               m_name = basename(tmp); 
    503                 } 
    504 -       } else 
    505 -               m_filename = xstrdup(arg1); 
    506   
    507 -       if (flag_verbose) 
    508 -               printf("Using %s\n", m_filename); 
    509 - 
    510 -#if ENABLE_FEATURE_2_6_MODULES 
    511 -       if (k_version > 4) { 
    512 -               argv[optind] = m_filename; 
    513 -               optind--; 
    514 -               return insmod_ng_main(argc - optind, argv + optind); 
    515 +       fp = fopen(g_filename, "r"); 
    516 +       if (!fp) { 
    517 +               ret = errno; 
    518 +               goto out; 
    519         } 
    520 -#endif 
    521   
    522         f = obj_load(fp, LOADBITS); 
    523   
    524 @@ -4075,7 +4046,7 @@ int insmod_main(int argc, char **argv) 
    525                                 "\t%s was compiled for kernel version %s\n" 
    526                                 "\twhile this kernel is version %s", 
    527                                 flag_force_load ? "warning: " : "", 
    528 -                               m_filename, m_strversion, uts_info.release); 
    529 +                               g_filename, m_strversion, uts_info.release); 
    530                         if (!flag_force_load) 
    531                                 goto out; 
    532                 } 
    533 @@ -4117,7 +4088,7 @@ int insmod_main(int argc, char **argv) 
    534         hide_special_symbols(f); 
    535   
    536  #if ENABLE_FEATURE_INSMOD_KSYMOOPS_SYMBOLS 
    537 -       add_ksymoops_symbols(f, m_filename, m_name); 
    538 +       add_ksymoops_symbols(f, g_filename, m_name); 
    539  #endif /* FEATURE_INSMOD_KSYMOOPS_SYMBOLS */ 
    540   
    541         new_create_module_ksymtab(f); 
    542 @@ -4126,7 +4097,7 @@ int insmod_main(int argc, char **argv) 
    543         m_size = obj_load_size(f); 
    544   
    545         m_addr = create_module(m_name, m_size); 
    546 -       if (m_addr == (ElfW(Addr))(-1)) switch (errno) { 
    547 +       if (m_addr == -1) switch (errno) { 
    548                 case EEXIST: 
    549                         bb_error_msg_and_die("a module named %s already exists", m_name); 
    550                 case ENOMEM: 
    551 @@ -4142,36 +4113,37 @@ int insmod_main(int argc, char **argv) 
    552          * now we can load them directly into the kernel memory 
    553          */ 
    554         if (!obj_load_progbits(fp, f, (char*)m_addr)) { 
    555 -               delete_module(m_name, 0); 
    556 +               delete_module(m_name); 
    557                 goto out; 
    558         } 
    559  #endif 
    560   
    561         if (!obj_relocate(f, m_addr)) { 
    562 -               delete_module(m_name, 0); 
    563 +               delete_module(m_name); 
    564                 goto out; 
    565         } 
    566   
    567         if (!new_init_module(m_name, f, m_size)) { 
    568 -               delete_module(m_name, 0); 
    569 +               delete_module(m_name); 
    570                 goto out; 
    571         } 
    572   
    573         if (flag_print_load_map) 
    574                 print_load_map(f); 
    575   
    576 -       exit_status = EXIT_SUCCESS; 
    577 +       ret = EXIT_SUCCESS; 
    578   
    579   out: 
    580  #if ENABLE_FEATURE_CLEAN_UP 
    581         if (fp) 
    582                 fclose(fp); 
    583 -       free(tmp1); 
    584 -       if (!tmp1) 
    585 +       if (tmp) 
    586 +               free(tmp); 
    587 +       else if (m_name) 
    588                 free(m_name); 
    589 -       free(m_filename); 
    590 +       free(g_filename); 
    591  #endif 
    592 -       return exit_status; 
    593 +       return ret; 
    594  } 
    595   
    596  #endif /* ENABLE_FEATURE_2_4_MODULES */ 
    597 @@ -4183,15 +4155,8 @@ int insmod_main(int argc, char **argv) 
    598  #if ENABLE_FEATURE_2_6_MODULES 
    599   
    600  #include <sys/mman.h> 
    601 - 
    602 -#if defined __UCLIBC__ && !ENABLE_FEATURE_2_4_MODULES 
    603 -/* big time suckage. The old prototype above renders our nice fwd-decl wrong */ 
    604 -extern int init_module(void *module, unsigned long len, const char *options); 
    605 -#else 
    606  #include <asm/unistd.h> 
    607  #include <sys/syscall.h> 
    608 -#define init_module(mod, len, opts) syscall(__NR_init_module, mod, len, opts) 
    609 -#endif 
    610   
    611  /* We use error numbers in a loose translation... */ 
    612  static const char *moderror(int err) 
    613 @@ -4210,22 +4175,32 @@ static const char *moderror(int err) 
    614         } 
    615  } 
    616   
    617 -#if !ENABLE_FEATURE_2_4_MODULES 
    618 -int insmod_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; 
    619 -int insmod_main(int argc ATTRIBUTE_UNUSED, char **argv) 
    620 -#else 
    621 -static int insmod_ng_main(int argc ATTRIBUTE_UNUSED, char **argv) 
    622 -#endif 
    623 +int insmod_main_26(int argc, char **argv) 
    624  { 
    625 -       size_t len; 
    626 +       char *filename, *options; 
    627 +       struct utsname myuname; 
    628 +       int k_version; 
    629         int optlen; 
    630 +       size_t len; 
    631         void *map; 
    632 -       char *filename, *options; 
    633 +       long ret = 0; 
    634 + 
    635 +       /* check the kernel version */ 
    636 +       if ((uname(&myuname) != 0) || (myuname.release[0] != '2')) 
    637 +               return EINVAL; 
    638 + 
    639 +       k_version = myuname.release[2] - '0'; 
    640 +       if (k_version <= 4) 
    641 +               return ENOTSUP; 
    642   
    643         filename = *++argv; 
    644         if (!filename) 
    645                 bb_show_usage(); 
    646   
    647 +       ret = find_module(filename); 
    648 +       if (ret || (g_filename == NULL)) 
    649 +               goto done; 
    650 + 
    651         /* Rest is options */ 
    652         options = xzalloc(1); 
    653         optlen = 0; 
    654 @@ -4235,41 +4210,47 @@ static int insmod_ng_main(int argc ATTRI 
    655                 optlen += sprintf(options + optlen, (strchr(*argv,' ') ? "\"%s\" " : "%s "), *argv); 
    656         } 
    657   
    658 -#if 0 
    659 -       /* Any special reason why mmap? It isn't performance critical. -vda */ 
    660 -       /* Yes, xmalloc'ing can use *alot* of RAM. Don't forget that there are 
    661 -        * modules out there that are half a megabyte! mmap()ing is way nicer 
    662 -        * for small mem boxes, i guess. */ 
    663 -       /* But after load, these modules will take up that 0.5mb in kernel 
    664 -        * anyway. Using malloc here causes only a transient spike to 1mb, 
    665 -        * after module is loaded, we go back to normal 0.5mb usage 
    666 -        * (in kernel). Also, mmap isn't magic - when we touch mapped data, 
    667 -        * we use memory. -vda */ 
    668 -       int fd; 
    669 -       struct stat st; 
    670 -       unsigned long len; 
    671 -       fd = xopen(filename, O_RDONLY); 
    672 -       fstat(fd, &st); 
    673 -       len = st.st_size; 
    674 -       map = mmap(NULL, len, PROT_READ, MAP_PRIVATE, fd, 0); 
    675 -       if (map == MAP_FAILED) { 
    676 -               bb_perror_msg_and_die("cannot mmap '%s'", filename); 
    677 -       } 
    678 - 
    679 -       /* map == NULL on Blackfin, probably on other MMU-less systems too. Workaround. */ 
    680 -       if (map == NULL) { 
    681 -               map = xmalloc(len); 
    682 -               xread(fd, map, len); 
    683 -       } 
    684 -#else 
    685         len = MAXINT(ssize_t); 
    686 -       map = xmalloc_open_read_close(filename, &len); 
    687 -#endif 
    688 +       map = xmalloc_open_read_close(g_filename, &len); 
    689 +       ret = syscall(__NR_init_module, map, len, options); 
    690 +       if (ret != 0) { 
    691 +               bb_perror_msg_and_die("cannot insert '%s': %s (%li)", 
    692 +                               g_filename, moderror(errno), ret); 
    693 +       } 
    694 +done: 
    695 +       if (g_filename && (g_filename != filename)) 
    696 +               free(g_filename); 
    697   
    698 -       if (init_module(map, len, options) != 0) 
    699 -               bb_error_msg_and_die("cannot insert '%s': %s", 
    700 -                               filename, moderror(errno)); 
    701 -       return 0; 
    702 +       return ret; 
    703  } 
    704   
    705  #endif 
    706 + 
    707 +int insmod_main(int argc, char **argv) 
    708 +{ 
    709 +       int ret; 
    710 + 
    711 +       g_filename = NULL; 
    712 +#if ENABLE_FEATURE_2_6_MODULES 
    713 +       ret = insmod_main_26(argc, argv); 
    714 +       if (ret != ENOTSUP) 
    715 +               goto done; 
    716 +#endif 
    717 + 
    718 +#if ENABLE_FEATURE_2_4_MODULES 
    719 +       ret = insmod_main_24(argc, argv); 
    720 +       if (ret != ENOTSUP) 
    721 +               goto done; 
    722 +#endif 
    723 + 
    724 +       fprintf(stderr, "Error: Kernel version not supported\n"); 
    725 +       return 1; 
    726 + 
    727 +done: 
    728 +       if (ret) { 
    729 +               errno = ret; 
    730 +               bb_perror_msg("Loading module failed"); 
    731 +               return ret; 
    732 +       } else 
    733 +               return 0; 
    734 +} 
  • package/busybox/patches/530-unsigned_bitwise_ops.patch

     
    1 --- a/editors/awk.c 
    2 +++ b/editors/awk.c 
    3 @@ -2041,27 +2041,27 @@ static var *exec_builtin(node *op, var * 
    4                 break; 
    5   
    6         case B_an: 
    7 -               setvar_i(res, (long)getvar_i(av[0]) & (long)getvar_i(av[1])); 
    8 +               setvar_i(res, (unsigned long)getvar_i(av[0]) & (unsigned long)getvar_i(av[1])); 
    9                 break; 
    10   
    11         case B_co: 
    12 -               setvar_i(res, ~(long)getvar_i(av[0])); 
    13 +               setvar_i(res, ~(unsigned long)getvar_i(av[0])); 
    14                 break; 
    15   
    16         case B_ls: 
    17 -               setvar_i(res, (long)getvar_i(av[0]) << (long)getvar_i(av[1])); 
    18 +               setvar_i(res, (unsigned long)getvar_i(av[0]) << (unsigned long)getvar_i(av[1])); 
    19                 break; 
    20   
    21         case B_or: 
    22 -               setvar_i(res, (long)getvar_i(av[0]) | (long)getvar_i(av[1])); 
    23 +               setvar_i(res, (unsigned long)getvar_i(av[0]) | (unsigned long)getvar_i(av[1])); 
    24                 break; 
    25   
    26         case B_rs: 
    27 -               setvar_i(res, (long)((unsigned long)getvar_i(av[0]) >> (unsigned long)getvar_i(av[1]))); 
    28 +               setvar_i(res, (unsigned long)getvar_i(av[0]) >> (unsigned long)getvar_i(av[1])); 
    29                 break; 
    30   
    31         case B_xo: 
    32 -               setvar_i(res, (long)getvar_i(av[0]) ^ (long)getvar_i(av[1])); 
    33 +               setvar_i(res, (unsigned long)getvar_i(av[0]) ^ (unsigned long)getvar_i(av[1])); 
    34                 break; 
    35   
    36         case B_lo: 
  • package/busybox/patches/243-udhcpc_changed_ifindex.patch

     
    88+                * member interfaces were added/removed or if the status of the 
    99+                * bridge changed). 
    1010+                * Workaround: refresh it here before processing the next packet */ 
    11 +               read_interface(client_config.interface, &client_config.ifindex, NULL, client_config.arp); 
     11+               udhcp_read_interface(client_config.interface, &client_config.ifindex, NULL, client_config.arp); 
    1212+ 
    1313                if (listen_mode != LISTEN_NONE && sockfd < 0) { 
    1414                        if (listen_mode == LISTEN_KERNEL) 
  • package/busybox/patches/810-lsmod-infinite-loop.patch

     
    1 --- a/modutils/lsmod.c 
    2 +++ b/modutils/lsmod.c 
    3 @@ -107,7 +107,7 @@ 
    4                                 continue; 
    5                         } else if (errno != ENOSPC) 
    6                                 bb_perror_msg_and_die("module %s: QM_REFS", mn); 
    7 -                       deps = xrealloc(deps, count); 
    8 +                       deps = xrealloc(deps, depsize = count); 
    9                 } 
    10                 printf("%-20s%8lu%4ld", mn, info.size, info.usecount); 
    11                 if (info.flags & NEW_MOD_DELETED) 
  • package/busybox/patches/630-volumeid_empty.patch

     
     1diff -urpN busybox-1.13.3/util-linux/volume_id/get_devname.c busybox-1.13.3-volumeid/util-linux/volume_id/get_devname.c 
     2--- busybox-1.13.3/util-linux/volume_id/get_devname.c   2009-02-26 12:47:41.000000000 +0100 
     3+++ busybox-1.13.3-volumeid/util-linux/volume_id/get_devname.c  2009-03-31 21:46:37.000000000 +0200 
     4@@ -223,13 +223,11 @@ void display_uuid_cache(void) 
     5 char *get_devname_from_label(const char *spec) 
     6 { 
     7        struct uuidCache_s *uc; 
     8-       int spec_len = strlen(spec); 
     9  
     10        uuidcache_init(); 
     11        uc = uuidCache; 
     12        while (uc) { 
     13-// FIXME: empty label ("LABEL=") matches anything??! 
     14-               if (uc->label[0] && strncmp(spec, uc->label, spec_len) == 0) { 
     15+               if (uc->label[0] && strcmp(spec, uc->label) == 0) { 
     16                        return xstrdup(uc->device); 
     17                } 
     18                uc = uc->next; 
  • package/busybox/patches/250-ash_export-n.patch

     
    1 --- a/shell/ash.c 
    2 +++ b/shell/ash.c 
    3 @@ -11909,8 +11909,17 @@ exportcmd(int argc ATTRIBUTE_UNUSED, cha 
     1diff -Naur busybox-1.13.3/shell/ash.c busybox-1.13.3.new/shell/ash.c 
     2--- busybox-1.13.3/shell/ash.c  2009-02-26 03:46:55.000000000 -0800 
     3+++ busybox-1.13.3.new/shell/ash.c      2009-04-08 06:28:59.000000000 -0700 
     4@@ -12097,8 +12097,17 @@ 
    45        const char *p; 
    56        char **aptr; 
    6         int flag = argv[0][0] == 'r'? VREADONLY : VEXPORT; 
     7        int flag = argv[0][0] == 'r' ? VREADONLY : VEXPORT; 
    78+       int mask = ~0; 
    89+       int nopt; 
    910+       while ((nopt = nextopt("np"))) { 
    1011+               if (nopt == 'n') { 
    11 +                               mask = ~flag; 
     12+                       mask = ~flag; 
    1213+               } else { /* p */ 
    1314+                       break; 
    1415+               } 
     
    1920                aptr = argptr; 
    2021                name = *aptr; 
    2122                if (name) { 
    22 @@ -11922,10 +11931,12 @@ exportcmd(int argc ATTRIBUTE_UNUSED, cha 
     23@@ -12110,10 +12119,12 @@ 
    2324                                        vp = *findvar(hashvar(name), name); 
    2425                                        if (vp) { 
    2526                                                vp->flags |= flag; 
  • package/busybox/Makefile

     
    99include $(TOPDIR)/rules.mk 
    1010 
    1111PKG_NAME:=busybox 
    12 PKG_VERSION:=1.11.3 
    13 PKG_RELEASE:=5 
     12PKG_VERSION:=1.13.3 
     13PKG_RELEASE:=2 
    1414 
    1515PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2 
    1616PKG_SOURCE_URL:=http://www.busybox.net/downloads \ 
    1717                http://distfiles.gentoo.org/distfiles/ 
    18 PKG_MD5SUM:=4355ad8bb57ce3b39ad827566c1a6da3 
     18PKG_MD5SUM:=0cde6d2790e790837d6d7e82faae3ca1 
    1919 
    2020include $(INCLUDE_DIR)/package.mk 
    2121