From f89b73c502262c484c070efb123f4e460ce74918 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Tue, 27 Oct 2009 02:42:31 +0100 Subject: [PATCH] busybox: - update to busybox-1.15.2 - add ifup and ifdown applets --- packages/sysutils/busybox/config/busybox.conf | 22 +- packages/sysutils/busybox/config/interfaces | 4 + .../patches/busybox-1.15.1-buildsys.diff | 34 -- .../busybox/patches/busybox-1.15.1-dd.diff | 35 -- .../busybox/patches/busybox-1.15.1-hush.diff | 413 ------------------ .../patches/busybox-1.15.1-lineedit.diff | 156 ------- .../patches/busybox-1.15.1-pidof_killall.diff | 250 ----------- .../busybox/patches/busybox-1.15.1-sed.diff | 15 - .../busybox/patches/busybox-1.15.1-uniq.diff | 11 - packages/sysutils/busybox/url | 2 +- 10 files changed, 16 insertions(+), 926 deletions(-) create mode 100644 packages/sysutils/busybox/config/interfaces delete mode 100644 packages/sysutils/busybox/patches/busybox-1.15.1-buildsys.diff delete mode 100644 packages/sysutils/busybox/patches/busybox-1.15.1-dd.diff delete mode 100644 packages/sysutils/busybox/patches/busybox-1.15.1-hush.diff delete mode 100644 packages/sysutils/busybox/patches/busybox-1.15.1-lineedit.diff delete mode 100644 packages/sysutils/busybox/patches/busybox-1.15.1-pidof_killall.diff delete mode 100644 packages/sysutils/busybox/patches/busybox-1.15.1-sed.diff delete mode 100644 packages/sysutils/busybox/patches/busybox-1.15.1-uniq.diff diff --git a/packages/sysutils/busybox/config/busybox.conf b/packages/sysutils/busybox/config/busybox.conf index 11b9626348..c2eb6627f6 100644 --- a/packages/sysutils/busybox/config/busybox.conf +++ b/packages/sysutils/busybox/config/busybox.conf @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit # Busybox version: 1.15.1 -# Wed Oct 21 05:28:56 2009 +# Sun Oct 25 07:52:43 2009 # CONFIG_HAVE_DOT_CONFIG=y @@ -677,12 +677,12 @@ CONFIG_FEATURE_IFCONFIG_HW=y CONFIG_FEATURE_IFCONFIG_BROADCAST_PLUS=y # CONFIG_IFENSLAVE is not set # CONFIG_IFPLUGD is not set -# CONFIG_IFUPDOWN is not set -CONFIG_IFUPDOWN_IFSTATE_PATH="" -# CONFIG_FEATURE_IFUPDOWN_IP is not set -# CONFIG_FEATURE_IFUPDOWN_IP_BUILTIN is not set +CONFIG_IFUPDOWN=y +CONFIG_IFUPDOWN_IFSTATE_PATH="/var/run/ifstate" +CONFIG_FEATURE_IFUPDOWN_IP=y +CONFIG_FEATURE_IFUPDOWN_IP_BUILTIN=y # CONFIG_FEATURE_IFUPDOWN_IFCONFIG_BUILTIN is not set -# CONFIG_FEATURE_IFUPDOWN_IPV4 is not set +CONFIG_FEATURE_IFUPDOWN_IPV4=y # CONFIG_FEATURE_IFUPDOWN_IPV6 is not set # CONFIG_FEATURE_IFUPDOWN_MAPPING is not set # CONFIG_FEATURE_IFUPDOWN_EXTERNAL_DHCP is not set @@ -693,10 +693,10 @@ CONFIG_IFUPDOWN_IFSTATE_PATH="" # CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_DAYTIME is not set # CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_CHARGEN is not set # CONFIG_FEATURE_INETD_RPC is not set -# CONFIG_IP is not set -# CONFIG_FEATURE_IP_ADDRESS is not set -# CONFIG_FEATURE_IP_LINK is not set -# CONFIG_FEATURE_IP_ROUTE is not set +CONFIG_IP=y +CONFIG_FEATURE_IP_ADDRESS=y +CONFIG_FEATURE_IP_LINK=y +CONFIG_FEATURE_IP_ROUTE=y # CONFIG_FEATURE_IP_TUNNEL is not set # CONFIG_FEATURE_IP_RULE is not set # CONFIG_FEATURE_IP_SHORT_FORMS is not set @@ -751,7 +751,7 @@ CONFIG_UDHCP_DEBUG=9 CONFIG_FEATURE_UDHCP_RFC3397=y CONFIG_UDHCPC_DEFAULT_SCRIPT="/usr/share/udhcpc/default.script" CONFIG_UDHCPC_SLACK_FOR_BUGGY_SERVERS=80 -CONFIG_IFUPDOWN_UDHCPC_CMD_OPTIONS="" +CONFIG_IFUPDOWN_UDHCPC_CMD_OPTIONS="-R -n" # CONFIG_VCONFIG is not set CONFIG_WGET=y CONFIG_FEATURE_WGET_STATUSBAR=y diff --git a/packages/sysutils/busybox/config/interfaces b/packages/sysutils/busybox/config/interfaces new file mode 100644 index 0000000000..6b0ed21c01 --- /dev/null +++ b/packages/sysutils/busybox/config/interfaces @@ -0,0 +1,4 @@ +# The loopback network interface + +auto lo +iface lo inet loopback \ No newline at end of file diff --git a/packages/sysutils/busybox/patches/busybox-1.15.1-buildsys.diff b/packages/sysutils/busybox/patches/busybox-1.15.1-buildsys.diff deleted file mode 100644 index e63f8f8447..0000000000 --- a/packages/sysutils/busybox/patches/busybox-1.15.1-buildsys.diff +++ /dev/null @@ -1,34 +0,0 @@ -diff -urpN busybox-1.15.1/miscutils/hdparm.c busybox-1.15.1-buildsys/miscutils/hdparm.c ---- busybox-1.15.1/miscutils/hdparm.c 2009-09-12 17:55:36.000000000 +0200 -+++ busybox-1.15.1-buildsys/miscutils/hdparm.c 2009-09-22 23:13:25.000000000 +0200 -@@ -15,6 +15,9 @@ - /* must be _after_ libbb.h: */ - #include - #include -+#if !defined(BLKGETSIZE64) -+# define BLKGETSIZE64 _IOR(0x12,114,size_t) -+#endif - - /* device types */ - /* ------------ */ -diff -urpN busybox-1.15.1/util-linux/fdisk.c busybox-1.15.1-buildsys/util-linux/fdisk.c ---- busybox-1.15.1/util-linux/fdisk.c 2009-09-12 17:55:37.000000000 +0200 -+++ busybox-1.15.1-buildsys/util-linux/fdisk.c 2009-09-22 23:13:25.000000000 +0200 -@@ -9,13 +9,16 @@ - - #ifndef _LARGEFILE64_SOURCE - /* For lseek64 */ --#define _LARGEFILE64_SOURCE -+# define _LARGEFILE64_SOURCE - #endif - #include /* assert */ - #include - #if !defined(BLKSSZGET) - # define BLKSSZGET _IO(0x12, 104) - #endif -+#if !defined(BLKGETSIZE64) -+# define BLKGETSIZE64 _IOR(0x12,114,size_t) -+#endif - #include "libbb.h" - - /* Looks like someone forgot to add this to config system */ diff --git a/packages/sysutils/busybox/patches/busybox-1.15.1-dd.diff b/packages/sysutils/busybox/patches/busybox-1.15.1-dd.diff deleted file mode 100644 index a3e2676257..0000000000 --- a/packages/sysutils/busybox/patches/busybox-1.15.1-dd.diff +++ /dev/null @@ -1,35 +0,0 @@ -diff -urpN busybox-1.15.1/coreutils/dd.c busybox-1.15.1-dd/coreutils/dd.c ---- busybox-1.15.1/coreutils/dd.c 2009-09-12 17:55:58.000000000 +0200 -+++ busybox-1.15.1-dd/coreutils/dd.c 2009-09-18 20:48:22.000000000 +0200 -@@ -286,25 +286,26 @@ int dd_main(int argc UNUSED_PARAM, char - } - - while (!(flags & FLAG_COUNT) || (G.in_full + G.in_part != count)) { -- if (flags & FLAG_NOERROR) /* Pre-zero the buffer if conv=noerror */ -- memset(ibuf, 0, ibs); - n = safe_read(ifd, ibuf, ibs); - if (n == 0) - break; - if (n < 0) { -+ /* "Bad block" */ - if (!(flags & FLAG_NOERROR)) - goto die_infile; -- n = ibs; - bb_simple_perror_msg(infile); -- /* GNU dd with conv=noerror skips over "bad blocks" */ -+ /* GNU dd with conv=noerror skips over bad blocks */ - xlseek(ifd, ibs, SEEK_CUR); -+ /* conv=noerror,sync writes NULs, -+ * conv=noerror just ignores input bad blocks */ -+ n = 0; - } - if ((size_t)n == ibs) - G.in_full++; - else { - G.in_part++; - if (flags & FLAG_SYNC) { -- memset(ibuf + n, '\0', ibs - n); -+ memset(ibuf + n, 0, ibs - n); - n = ibs; - } - } diff --git a/packages/sysutils/busybox/patches/busybox-1.15.1-hush.diff b/packages/sysutils/busybox/patches/busybox-1.15.1-hush.diff deleted file mode 100644 index 3cd0a7dcd2..0000000000 --- a/packages/sysutils/busybox/patches/busybox-1.15.1-hush.diff +++ /dev/null @@ -1,413 +0,0 @@ -diff -urpN busybox-1.15.1/shell/hush.c busybox-1.15.1-hush/shell/hush.c ---- busybox-1.15.1/shell/hush.c 2009-09-12 17:56:20.000000000 +0200 -+++ busybox-1.15.1-hush/shell/hush.c 2009-09-27 02:46:54.000000000 +0200 -@@ -78,6 +78,7 @@ - * Licensed under the GPL v2 or later, see the file LICENSE in this tarball. - */ - #include "busybox.h" /* for APPLET_IS_NOFORK/NOEXEC */ -+#include /* for malloc_trim */ - #include - /* #include */ - #if ENABLE_HUSH_CASE -@@ -786,7 +787,7 @@ static void xxfree(void *ptr) - * HUSH_DEBUG >= 2 prints line number in this file where it was detected. - */ - #if HUSH_DEBUG < 2 --# define die_if_script(lineno, fmt...) die_if_script(fmt) -+# define die_if_script(lineno, ...) die_if_script(__VA_ARGS__) - # define syntax_error(lineno, msg) syntax_error(msg) - # define syntax_error_at(lineno, msg) syntax_error_at(msg) - # define syntax_error_unterm_ch(lineno, ch) syntax_error_unterm_ch(ch) -@@ -855,7 +856,7 @@ static void syntax_error_unexpected_ch(u - # undef syntax_error_unterm_str - # undef syntax_error_unexpected_ch - #else --# define die_if_script(fmt...) die_if_script(__LINE__, fmt) -+# define die_if_script(...) die_if_script(__LINE__, __VA_ARGS__) - # define syntax_error(msg) syntax_error(__LINE__, msg) - # define syntax_error_at(msg) syntax_error_at(__LINE__, msg) - # define syntax_error_unterm_ch(ch) syntax_error_unterm_ch(__LINE__, ch) -@@ -898,7 +899,7 @@ static int is_well_formed_var_name(const - /* Replace each \x with x in place, return ptr past NUL. */ - static char *unbackslash(char *src) - { -- char *dst = src; -+ char *dst = src = strchrnul(src, '\\'); - while (1) { - if (*src == '\\') - src++; -@@ -1037,7 +1038,7 @@ static void restore_G_args(save_arg_t *s - * is finished or backgrounded. It is the same in interactive and - * non-interactive shells, and is the same regardless of whether - * a user trap handler is installed or a shell special one is in effect. -- * ^C or ^Z from keyboard seem to execute "at once" because it usually -+ * ^C or ^Z from keyboard seems to execute "at once" because it usually - * backgrounds (i.e. stops) or kills all members of currently running - * pipe. - * -@@ -1104,12 +1105,17 @@ static void restore_G_args(save_arg_t *s - * (child shell is not interactive), - * unset all traps (note: regardless of child shell's type - {}, (), etc) - * after [v]fork, if we plan to exec: -- * POSIX says pending signal mask is cleared in child - no need to clear it. -+ * POSIX says fork clears pending signal mask in child - no need to clear it. - * Restore blocked signal set to one inherited by shell just prior to exec. - * - * Note: as a result, we do not use signal handlers much. The only uses - * are to count SIGCHLDs - * and to restore tty pgrp on signal-induced exit. -+ * -+ * Note 2 (compat): -+ * Standard says "When a subshell is entered, traps that are not being ignored -+ * are set to the default actions". bash interprets it so that traps which -+ * are set to "" (ignore) are NOT reset to defaults. We do the same. - */ - enum { - SPECIAL_INTERACTIVE_SIGS = 0 -@@ -2596,43 +2602,51 @@ static void reset_traps_to_defaults(void - { - /* This function is always called in a child shell - * after fork (not vfork, NOMMU doesn't use this function). -- * Child shells are not interactive. -- * SIGTTIN/SIGTTOU/SIGTSTP should not have special handling. -- * Testcase: (while :; do :; done) + ^Z should background. -- * Same goes for SIGTERM, SIGHUP, SIGINT. - */ - unsigned sig; - unsigned mask; - -+ /* Child shells are not interactive. -+ * SIGTTIN/SIGTTOU/SIGTSTP should not have special handling. -+ * Testcase: (while :; do :; done) + ^Z should background. -+ * Same goes for SIGTERM, SIGHUP, SIGINT. -+ */ - if (!G.traps && !(G.non_DFL_mask & SPECIAL_INTERACTIVE_SIGS)) -- return; -+ return; /* already no traps and no SPECIAL_INTERACTIVE_SIGS */ - -- /* Stupid. It can be done with *single* &= op, but we can't use -- * the fact that G.blocked_set is implemented as a bitmask... */ -+ /* Switching off SPECIAL_INTERACTIVE_SIGS. -+ * Stupid. It can be done with *single* &= op, but we can't use -+ * the fact that G.blocked_set is implemented as a bitmask -+ * in libc... */ - mask = (SPECIAL_INTERACTIVE_SIGS >> 1); - sig = 1; - while (1) { -- if (mask & 1) -- sigdelset(&G.blocked_set, sig); -+ if (mask & 1) { -+ /* Careful. Only if no trap or trap is not "" */ -+ if (!G.traps || !G.traps[sig] || G.traps[sig][0]) -+ sigdelset(&G.blocked_set, sig); -+ } - mask >>= 1; - if (!mask) - break; - sig++; - } -- -+ /* Our homegrown sig mask is saner to work with :) */ - G.non_DFL_mask &= ~SPECIAL_INTERACTIVE_SIGS; -+ -+ /* Resetting all traps to default except empty ones */ - mask = G.non_DFL_mask; - if (G.traps) for (sig = 0; sig < NSIG; sig++, mask >>= 1) { -- if (!G.traps[sig]) -+ if (!G.traps[sig] || !G.traps[sig][0]) - continue; - free(G.traps[sig]); - G.traps[sig] = NULL; - /* There is no signal for 0 (EXIT) */ - if (sig == 0) - continue; -- /* There was a trap handler, we are removing it. -+ /* There was a trap handler, we just removed it. - * But if sig still has non-DFL handling, -- * we should not unblock it. */ -+ * we should not unblock the sig. */ - if (mask & 1) - continue; - sigdelset(&G.blocked_set, sig); -@@ -3079,15 +3093,21 @@ static const struct built_in_command* fi - } - - #if ENABLE_HUSH_FUNCTIONS --static const struct function *find_function(const char *name) -+static struct function **find_function_slot(const char *name) - { -- const struct function *funcp = G.top_func; -- while (funcp) { -- if (strcmp(name, funcp->name) == 0) { -+ struct function **funcpp = &G.top_func; -+ while (*funcpp) { -+ if (strcmp(name, (*funcpp)->name) == 0) { - break; - } -- funcp = funcp->next; -+ funcpp = &(*funcpp)->next; - } -+ return funcpp; -+} -+ -+static const struct function *find_function(const char *name) -+{ -+ const struct function *funcp = *find_function_slot(name); - if (funcp) - debug_printf_exec("found function '%s'\n", name); - return funcp; -@@ -3096,18 +3116,11 @@ static const struct function *find_funct - /* Note: takes ownership on name ptr */ - static struct function *new_function(char *name) - { -- struct function *funcp; -- struct function **funcpp = &G.top_func; -- -- while ((funcp = *funcpp) != NULL) { -- struct command *cmd; -- -- if (strcmp(funcp->name, name) != 0) { -- funcpp = &funcp->next; -- continue; -- } -+ struct function **funcpp = find_function_slot(name); -+ struct function *funcp = *funcpp; - -- cmd = funcp->parent_cmd; -+ if (funcp != NULL) { -+ struct command *cmd = funcp->parent_cmd; - debug_printf_exec("func %p parent_cmd %p\n", funcp, cmd); - if (!cmd) { - debug_printf_exec("freeing & replacing function '%s'\n", funcp->name); -@@ -3129,39 +3142,36 @@ static struct function *new_function(cha - cmd->group_as_string = funcp->body_as_string; - # endif - } -- goto skip; -+ } else { -+ debug_printf_exec("remembering new function '%s'\n", name); -+ funcp = *funcpp = xzalloc(sizeof(*funcp)); -+ /*funcp->next = NULL;*/ - } -- debug_printf_exec("remembering new function '%s'\n", name); -- funcp = *funcpp = xzalloc(sizeof(*funcp)); -- /*funcp->next = NULL;*/ -- skip: -+ - funcp->name = name; - return funcp; - } - - static void unset_func(const char *name) - { -- struct function *funcp; -- struct function **funcpp = &G.top_func; -+ struct function **funcpp = find_function_slot(name); -+ struct function *funcp = *funcpp; - -- while ((funcp = *funcpp) != NULL) { -- if (strcmp(funcp->name, name) == 0) { -- *funcpp = funcp->next; -- /* funcp is unlinked now, deleting it. -- * Note: if !funcp->body, the function was created by -- * "-F name body", do not free ->body_as_string -- * and ->name as they were not malloced. */ -- if (funcp->body) { -- free_pipe_list(funcp->body); -- free(funcp->name); -+ if (funcp != NULL) { -+ debug_printf_exec("freeing function '%s'\n", funcp->name); -+ *funcpp = funcp->next; -+ /* funcp is unlinked now, deleting it. -+ * Note: if !funcp->body, the function was created by -+ * "-F name body", do not free ->body_as_string -+ * and ->name as they were not malloced. */ -+ if (funcp->body) { -+ free_pipe_list(funcp->body); -+ free(funcp->name); - # if !BB_MMU -- free(funcp->body_as_string); -+ free(funcp->body_as_string); - # endif -- } -- free(funcp); -- break; - } -- funcpp = &funcp->next; -+ free(funcp); - } - } - -@@ -3628,9 +3638,9 @@ static int checkjobs(struct pipe* fg_pip - /* Note: is WIFSIGNALED, WEXITSTATUS = sig + 128 */ - rcode = WEXITSTATUS(status); - IF_HAS_KEYWORDS(if (fg_pipe->pi_inverted) rcode = !rcode;) -- /* bash prints killing signal's name for *last* -+ /* bash prints killer signal's name for *last* - * process in pipe (prints just newline for SIGINT). -- * Mimic this. Example: "sleep 5" + ^\ -+ * Mimic this. Example: "sleep 5" + (^\ or kill -QUIT) - */ - if (WIFSIGNALED(status)) { - int sig = WTERMSIG(status); -@@ -5183,6 +5193,47 @@ static FILE *generate_stream_from_string - xmove_fd(channel[1], 1); - /* Prevent it from trying to handle ctrl-z etc */ - IF_HUSH_JOB(G.run_list_level = 1;) -+ /* Awful hack for `trap` or $(trap). -+ * -+ * http://www.opengroup.org/onlinepubs/009695399/utilities/trap.html -+ * contains an example where "trap" is executed in a subshell: -+ * -+ * save_traps=$(trap) -+ * ... -+ * eval "$save_traps" -+ * -+ * Standard does not say that "trap" in subshell shall print -+ * parent shell's traps. It only says that its output -+ * must have suitable form, but then, in the above example -+ * (which is not supposed to be normative), it implies that. -+ * -+ * bash (and probably other shell) does implement it -+ * (traps are reset to defaults, but "trap" still shows them), -+ * but as a result, "trap" logic is hopelessly messed up: -+ * -+ * # trap -+ * trap -- 'echo Ho' SIGWINCH <--- we have a handler -+ * # (trap) <--- trap is in subshell - no output (correct, traps are reset) -+ * # true | trap <--- trap is in subshell - no output (ditto) -+ * # echo `true | trap` <--- in subshell - output (but traps are reset!) -+ * trap -- 'echo Ho' SIGWINCH -+ * # echo `(trap)` <--- in subshell in subshell - output -+ * trap -- 'echo Ho' SIGWINCH -+ * # echo `true | (trap)` <--- in subshell in subshell in subshell - output! -+ * trap -- 'echo Ho' SIGWINCH -+ * -+ * The rules when to forget and when to not forget traps -+ * get really complex and nonsensical. -+ * -+ * Our solution: ONLY bare $(trap) or `trap` is special. -+ */ -+ s = skip_whitespace(s); -+ if (strncmp(s, "trap", 4) == 0 && (*skip_whitespace(s + 4) == '\0')) -+ { -+ static const char *const argv[] = { NULL, NULL }; -+ builtin_trap((char**)argv); -+ exit(0); /* not _exit() - we need to fflush */ -+ } - #if BB_MMU - reset_traps_to_defaults(); - parse_and_run_string(s); -@@ -5676,8 +5727,10 @@ static int handle_dollar(o_string *as_st - goto make_var; - } - /* else: it's $_ */ -- /* TODO: */ -- /* $_ Shell or shell script name; or last cmd name */ -+ /* TODO: $_ and $-: */ -+ /* $_ Shell or shell script name; or last argument of last command -+ * (if last command wasn't a pipe; if it was, bash sets $_ to ""); -+ * but in command's env, set to full pathname used to invoke it */ - /* $- Option flags set by set builtin or shell options (-i etc) */ - default: - o_addQchr(dest, '$'); -@@ -5794,7 +5847,7 @@ static struct pipe *parse_stream(char ** - * found. When recursing, quote state is passed in via dest->o_escape. - */ - debug_printf_parse("parse_stream entered, end_trigger='%c'\n", -- end_trigger ? : 'X'); -+ end_trigger ? end_trigger : 'X'); - debug_enter(); - - G.ifs = get_local_var_value("IFS"); -@@ -6860,7 +6913,8 @@ static int FAST_FUNC builtin_cd(char **a - * bash says "bash: cd: HOME not set" and does nothing - * (exitcode 1) - */ -- newdir = get_local_var_value("HOME") ? : "/"; -+ const char *home = get_local_var_value("HOME"); -+ newdir = home ? home : "/"; - } - if (chdir(newdir)) { - /* Mimic bash message exactly */ -@@ -7057,6 +7111,10 @@ static int FAST_FUNC builtin_trap(char * - if (G.traps[i]) { - printf("trap -- "); - print_escaped(G.traps[i]); -+ /* note: bash adds "SIG", but only if invoked -+ * as "bash". If called as "sh", or if set -o posix, -+ * then it prints short signal names. -+ * We are printing short names: */ - printf(" %s\n", get_signame(i)); - } - } -@@ -7268,6 +7326,10 @@ static int FAST_FUNC builtin_memleak(cha - void *p; - unsigned long l; - -+#ifdef M_TRIM_THRESHOLD -+ /* Optional. Reduces probability of false positives */ -+ malloc_trim(0); -+#endif - /* Crude attempt to find where "free memory" starts, - * sans fragmentation. */ - p = malloc(240); -diff -urpN busybox-1.15.1/shell/hush_test/hush-trap/savetrap.right busybox-1.15.1-hush/shell/hush_test/hush-trap/savetrap.right ---- busybox-1.15.1/shell/hush_test/hush-trap/savetrap.right 1970-01-01 01:00:00.000000000 +0100 -+++ busybox-1.15.1-hush/shell/hush_test/hush-trap/savetrap.right 2009-09-27 02:03:53.000000000 +0200 -@@ -0,0 +1,8 @@ -+trap -- 'echo Exiting' EXIT -+trap -- 'echo WINCH!' WINCH -+trap -- 'echo Exiting' EXIT -+trap -- 'echo WINCH!' WINCH -+trap -- 'echo Exiting' EXIT -+trap -- 'echo WINCH!' WINCH -+Done -+Exiting -diff -urpN busybox-1.15.1/shell/hush_test/hush-trap/savetrap.tests busybox-1.15.1-hush/shell/hush_test/hush-trap/savetrap.tests ---- busybox-1.15.1/shell/hush_test/hush-trap/savetrap.tests 1970-01-01 01:00:00.000000000 +0100 -+++ busybox-1.15.1-hush/shell/hush_test/hush-trap/savetrap.tests 2009-09-27 02:04:02.000000000 +0200 -@@ -0,0 +1,9 @@ -+trap 'echo Exiting' EXIT -+trap 'echo WINCH!' SIGWINCH -+v=` trap ` -+echo "$v" -+v=$( trap ) -+echo "$v" -+v=`trap` -+echo "$v" -+echo Done -diff -urpN busybox-1.15.1/shell/hush_test/hush-trap/subshell.right busybox-1.15.1-hush/shell/hush_test/hush-trap/subshell.right ---- busybox-1.15.1/shell/hush_test/hush-trap/subshell.right 1970-01-01 01:00:00.000000000 +0100 -+++ busybox-1.15.1-hush/shell/hush_test/hush-trap/subshell.right 2009-09-26 15:14:57.000000000 +0200 -@@ -0,0 +1,6 @@ -+Ok -+Ok -+Ok -+Ok -+TERM -+Done -diff -urpN busybox-1.15.1/shell/hush_test/hush-trap/subshell.tests busybox-1.15.1-hush/shell/hush_test/hush-trap/subshell.tests ---- busybox-1.15.1/shell/hush_test/hush-trap/subshell.tests 1970-01-01 01:00:00.000000000 +0100 -+++ busybox-1.15.1-hush/shell/hush_test/hush-trap/subshell.tests 2009-09-26 15:14:57.000000000 +0200 -@@ -0,0 +1,20 @@ -+# Non-empty traps should be reset in subshell -+ -+# HUP is special in interactive shells -+trap '' HUP -+# QUIT is always special -+trap '' QUIT -+# SYS is not special -+trap '' SYS -+# WINCH is harmless -+trap 'bad: caught WINCH' WINCH -+# With TERM we'll check whether it is reset -+trap 'bad: caught TERM' TERM -+ -+# using bash, becuase we don't have $PPID (yet) -+(bash -c 'kill -HUP $PPID'; echo Ok) -+(bash -c 'kill -QUIT $PPID'; echo Ok) -+(bash -c 'kill -SYS $PPID'; echo Ok) -+(bash -c 'kill -WINCH $PPID'; echo Ok) -+(bash -c 'kill -TERM $PPID'; echo Bad: TERM is not reset) -+echo Done diff --git a/packages/sysutils/busybox/patches/busybox-1.15.1-lineedit.diff b/packages/sysutils/busybox/patches/busybox-1.15.1-lineedit.diff deleted file mode 100644 index 20a7a8f37c..0000000000 --- a/packages/sysutils/busybox/patches/busybox-1.15.1-lineedit.diff +++ /dev/null @@ -1,156 +0,0 @@ -diff -urpN busybox-1.15.1/libbb/lineedit.c busybox-1.15.1-lineedit/libbb/lineedit.c ---- busybox-1.15.1/libbb/lineedit.c 2009-09-12 17:55:58.000000000 +0200 -+++ busybox-1.15.1-lineedit/libbb/lineedit.c 2009-09-28 23:56:03.000000000 +0200 -@@ -114,8 +114,8 @@ struct lineedit_statics { - unsigned cmdedit_prmt_len; /* length of prompt (without colors etc) */ - - unsigned cursor; -- unsigned command_len; -- /* *int* maxsize: we want x in "if (x > S.maxsize)" -+ int command_len; /* must be signed (^D returns -1 len) */ -+ /* signed maxsize: we want x in "if (x > S.maxsize)" - * to _not_ be promoted to unsigned */ - int maxsize; - CHAR_T *command_ps; -@@ -1095,15 +1095,15 @@ static void save_command_ps_at_cur_histo - int cur = state->cur_history; - free(state->history[cur]); - --#if ENABLE_FEATURE_ASSUME_UNICODE -+# if ENABLE_FEATURE_ASSUME_UNICODE - { - char tbuf[MAX_LINELEN]; - save_string(tbuf, sizeof(tbuf)); - state->history[cur] = xstrdup(tbuf); - } --#else -+# else - state->history[cur] = xstrdup(command_ps); --#endif -+# endif - } - } - -@@ -1131,7 +1131,7 @@ static int get_next_history(void) - return 0; - } - --#if ENABLE_FEATURE_EDITING_SAVEHISTORY -+# if ENABLE_FEATURE_EDITING_SAVEHISTORY - /* We try to ensure that concurrent additions to the history - * do not overwrite each other. - * Otherwise shell users get unhappy. -@@ -1256,10 +1256,10 @@ static void save_history(char *str) - free_line_input_t(st_temp); - } - } --#else --#define load_history(a) ((void)0) --#define save_history(a) ((void)0) --#endif /* FEATURE_COMMAND_SAVEHISTORY */ -+# else -+# define load_history(a) ((void)0) -+# define save_history(a) ((void)0) -+# endif /* FEATURE_COMMAND_SAVEHISTORY */ - - static void remember_in_history(char *str) - { -@@ -1290,15 +1290,15 @@ static void remember_in_history(char *st - /* i <= MAX_HISTORY */ - state->cur_history = i; - state->cnt_history = i; --#if ENABLE_FEATURE_EDITING_SAVEHISTORY -+# if MAX_HISTORY > 0 && ENABLE_FEATURE_EDITING_SAVEHISTORY - if ((state->flags & SAVE_HISTORY) && state->hist_file) - save_history(str); --#endif -+# endif - IF_FEATURE_EDITING_FANCY_PROMPT(num_ok_lines++;) - } - - #else /* MAX_HISTORY == 0 */ --#define remember_in_history(a) ((void)0) -+# define remember_in_history(a) ((void)0) - #endif /* MAX_HISTORY */ - - -@@ -1476,11 +1476,11 @@ static void parse_and_put_prompt(const c - c = *prmt_ptr++; - - switch (c) { --#if ENABLE_FEATURE_GETUSERNAME_AND_HOMEDIR -+# if ENABLE_FEATURE_GETUSERNAME_AND_HOMEDIR - case 'u': - pbuf = user_buf ? user_buf : (char*)""; - break; --#endif -+# endif - case 'h': - pbuf = free_me = safe_gethostname(); - *strchrnul(pbuf, '.') = '\0'; -@@ -1488,7 +1488,7 @@ static void parse_and_put_prompt(const c - case '$': - c = (geteuid() == 0 ? '#' : '$'); - break; --#if ENABLE_FEATURE_GETUSERNAME_AND_HOMEDIR -+# if ENABLE_FEATURE_GETUSERNAME_AND_HOMEDIR - case 'w': - /* /home/user[/something] -> ~[/something] */ - pbuf = cwd_buf; -@@ -1501,7 +1501,7 @@ static void parse_and_put_prompt(const c - pbuf = free_me = xasprintf("~%s", cwd_buf + l); - } - break; --#endif -+# endif - case 'W': - pbuf = cwd_buf; - cp = strrchr(pbuf, '/'); -@@ -1688,13 +1688,15 @@ int FAST_FUNC read_line_input(const char - - /* With null flags, no other fields are ever used */ - state = st ? st : (line_input_t*) &const_int_0; --#if ENABLE_FEATURE_EDITING_SAVEHISTORY -+#if MAX_HISTORY > 0 -+# if ENABLE_FEATURE_EDITING_SAVEHISTORY - if ((state->flags & SAVE_HISTORY) && state->hist_file) - if (state->cnt_history == 0) - load_history(state); --#endif -+# endif - if (state->flags & DO_HISTORY) - state->cur_history = state->cnt_history; -+#endif - - /* prepare before init handlers */ - cmdedit_y = 0; /* quasireal y, not true if line > xt*yt */ -@@ -1716,7 +1718,7 @@ int FAST_FUNC read_line_input(const char - new_settings.c_cc[VTIME] = 0; - /* Turn off CTRL-C, so we can trap it */ - #ifndef _POSIX_VDISABLE --#define _POSIX_VDISABLE '\0' -+# define _POSIX_VDISABLE '\0' - #endif - new_settings.c_cc[VINTR] = _POSIX_VDISABLE; - tcsetattr_stdin_TCSANOW(&new_settings); -@@ -2037,7 +2039,8 @@ int FAST_FUNC read_line_input(const char - rewrite_line: - /* Rewrite the line with the selected history item */ - /* change command */ -- command_len = load_string(state->history[state->cur_history] ? : "", maxsize); -+ command_len = load_string(state->history[state->cur_history] ? -+ state->history[state->cur_history] : "", maxsize); - /* redraw and go to eol (bol, in vi) */ - redraw(cmdedit_y, (state->flags & VI_MODE) ? 9999 : 0); - break; -@@ -2121,7 +2124,9 @@ int FAST_FUNC read_line_input(const char - #undef command - - #if ENABLE_FEATURE_ASSUME_UNICODE -- command_len = save_string(command, maxsize - 1); -+ command[0] = '\0'; -+ if (command_len > 0) -+ command_len = save_string(command, maxsize - 1); - free(command_ps); - #endif - diff --git a/packages/sysutils/busybox/patches/busybox-1.15.1-pidof_killall.diff b/packages/sysutils/busybox/patches/busybox-1.15.1-pidof_killall.diff deleted file mode 100644 index 43c0c80636..0000000000 --- a/packages/sysutils/busybox/patches/busybox-1.15.1-pidof_killall.diff +++ /dev/null @@ -1,250 +0,0 @@ -diff -urpN busybox-1.15.1/libbb/procps.c busybox-1.15.1-pidof_killall/libbb/procps.c ---- busybox-1.15.1/libbb/procps.c 2009-09-12 17:55:58.000000000 +0200 -+++ busybox-1.15.1-pidof_killall/libbb/procps.c 2009-09-22 23:03:59.000000000 +0200 -@@ -134,8 +134,8 @@ static unsigned long fast_strtoul_16(cha - return n; - } - /* TOPMEM uses fast_strtoul_10, so... */ --#undef ENABLE_FEATURE_FAST_TOP --#define ENABLE_FEATURE_FAST_TOP 1 -+# undef ENABLE_FEATURE_FAST_TOP -+# define ENABLE_FEATURE_FAST_TOP 1 - #endif - - #if ENABLE_FEATURE_FAST_TOP -@@ -198,14 +198,16 @@ procps_status_t* FAST_FUNC procps_scan(p - if (errno) - continue; - -- /* After this point we have to break, not continue -- * ("continue" would mean that current /proc/NNN -- * is not a valid process info) */ -+ /* After this point we can: -+ * "break": stop parsing, return the data -+ * "continue": try next /proc/XXX -+ */ - - memset(&sp->vsz, 0, sizeof(*sp) - offsetof(procps_status_t, vsz)); - - sp->pid = pid; -- if (!(flags & ~PSSCAN_PID)) break; -+ if (!(flags & ~PSSCAN_PID)) -+ break; /* we needed only pid, we got it */ - - #if ENABLE_SELINUX - if (flags & PSSCAN_CONTEXT) { -@@ -218,7 +220,7 @@ procps_status_t* FAST_FUNC procps_scan(p - - if (flags & PSSCAN_UIDGID) { - if (stat(filename, &sb)) -- break; -+ continue; /* process probably exited */ - /* Effective UID/GID, not real */ - sp->uid = sb.st_uid; - sp->gid = sb.st_gid; -@@ -234,10 +236,10 @@ procps_status_t* FAST_FUNC procps_scan(p - strcpy(filename_tail, "stat"); - n = read_to_buf(filename, buf); - if (n < 0) -- break; -+ continue; /* process probably exited */ - cp = strrchr(buf, ')'); /* split into "PID (cmd" and "" */ - /*if (!cp || cp[1] != ' ') -- break;*/ -+ continue;*/ - cp[0] = '\0'; - if (sizeof(sp->comm) < 16) - BUG_comm_size(); -@@ -257,12 +259,12 @@ procps_status_t* FAST_FUNC procps_scan(p - "%lu " /* start_time */ - "%lu " /* vsize */ - "%lu " /* rss */ --#if ENABLE_FEATURE_TOP_SMP_PROCESS -+# if ENABLE_FEATURE_TOP_SMP_PROCESS - "%*s %*s %*s %*s %*s %*s " /*rss_rlim, start_code, end_code, start_stack, kstk_esp, kstk_eip */ - "%*s %*s %*s %*s " /*signal, blocked, sigignore, sigcatch */ - "%*s %*s %*s %*s " /*wchan, nswap, cnswap, exit_signal */ - "%d" /*cpu last seen on*/ --#endif -+# endif - , - sp->state, &sp->ppid, - &sp->pgid, &sp->sid, &tty, -@@ -271,17 +273,17 @@ procps_status_t* FAST_FUNC procps_scan(p - &sp->start_time, - &vsz, - &rss --#if ENABLE_FEATURE_TOP_SMP_PROCESS -+# if ENABLE_FEATURE_TOP_SMP_PROCESS - , &sp->last_seen_on_cpu --#endif -+# endif - ); - - if (n < 11) -- break; --#if ENABLE_FEATURE_TOP_SMP_PROCESS -+ continue; /* bogus data, get next /proc/XXX */ -+# if ENABLE_FEATURE_TOP_SMP_PROCESS - if (n < 11+15) - sp->last_seen_on_cpu = 0; --#endif -+# endif - - /* vsz is in bytes and we want kb */ - sp->vsz = vsz >> 10; -@@ -311,14 +313,14 @@ procps_status_t* FAST_FUNC procps_scan(p - sp->vsz = fast_strtoul_10(&cp) >> 10; - /* vsz is in bytes but rss is in *PAGES*! Can you believe that? */ - sp->rss = fast_strtoul_10(&cp) << sp->shift_pages_to_kb; --#if ENABLE_FEATURE_TOP_SMP_PROCESS -+# if ENABLE_FEATURE_TOP_SMP_PROCESS - /* (6): rss_rlim, start_code, end_code, start_stack, kstk_esp, kstk_eip */ - /* (4): signal, blocked, sigignore, sigcatch */ - /* (4): wchan, nswap, cnswap, exit_signal */ - cp = skip_fields(cp, 14); - //FIXME: is it safe to assume this field exists? - sp->last_seen_on_cpu = fast_strtoul_10(&cp); --#endif -+# endif - #endif /* end of !ENABLE_FEATURE_TOP_SMP_PROCESS */ - - #if ENABLE_FEATURE_PS_ADDITIONAL_COLUMNS -@@ -343,48 +345,48 @@ procps_status_t* FAST_FUNC procps_scan(p - - strcpy(filename_tail, "smaps"); - file = fopen_for_read(filename); -- if (!file) -- break; -- while (fgets(buf, sizeof(buf), file)) { -- unsigned long sz; -- char *tp; -- char w; -+ if (file) { -+ while (fgets(buf, sizeof(buf), file)) { -+ unsigned long sz; -+ char *tp; -+ char w; - #define SCAN(str, name) \ - if (strncmp(buf, str, sizeof(str)-1) == 0) { \ - tp = skip_whitespace(buf + sizeof(str)-1); \ - sp->name += fast_strtoul_10(&tp); \ - continue; \ - } -- SCAN("Shared_Clean:" , shared_clean ); -- SCAN("Shared_Dirty:" , shared_dirty ); -- SCAN("Private_Clean:", private_clean); -- SCAN("Private_Dirty:", private_dirty); -+ SCAN("Shared_Clean:" , shared_clean ); -+ SCAN("Shared_Dirty:" , shared_dirty ); -+ SCAN("Private_Clean:", private_clean); -+ SCAN("Private_Dirty:", private_dirty); - #undef SCAN -- // f7d29000-f7d39000 rw-s ADR M:m OFS FILE -- tp = strchr(buf, '-'); -- if (tp) { -- *tp = ' '; -- tp = buf; -- sz = fast_strtoul_16(&tp); /* start */ -- sz = (fast_strtoul_16(&tp) - sz) >> 10; /* end - start */ -- // tp -> "rw-s" string -- w = tp[1]; -- // skipping "rw-s ADR M:m OFS " -- tp = skip_whitespace(skip_fields(tp, 4)); -- // filter out /dev/something (something != zero) -- if (strncmp(tp, "/dev/", 5) != 0 || strcmp(tp, "/dev/zero\n") == 0) { -- if (w == 'w') { -- sp->mapped_rw += sz; -- } else if (w == '-') { -- sp->mapped_ro += sz; -+ // f7d29000-f7d39000 rw-s ADR M:m OFS FILE -+ tp = strchr(buf, '-'); -+ if (tp) { -+ *tp = ' '; -+ tp = buf; -+ sz = fast_strtoul_16(&tp); /* start */ -+ sz = (fast_strtoul_16(&tp) - sz) >> 10; /* end - start */ -+ // tp -> "rw-s" string -+ w = tp[1]; -+ // skipping "rw-s ADR M:m OFS " -+ tp = skip_whitespace(skip_fields(tp, 4)); -+ // filter out /dev/something (something != zero) -+ if (strncmp(tp, "/dev/", 5) != 0 || strcmp(tp, "/dev/zero\n") == 0) { -+ if (w == 'w') { -+ sp->mapped_rw += sz; -+ } else if (w == '-') { -+ sp->mapped_ro += sz; -+ } - } -- } - //else printf("DROPPING %s (%s)\n", buf, tp); -- if (strcmp(tp, "[stack]\n") == 0) -- sp->stack += sz; -+ if (strcmp(tp, "[stack]\n") == 0) -+ sp->stack += sz; -+ } - } -+ fclose(file); - } -- fclose(file); - } - #endif /* TOPMEM */ - #if ENABLE_FEATURE_PS_ADDITIONAL_COLUMNS -@@ -393,23 +395,34 @@ procps_status_t* FAST_FUNC procps_scan(p - - strcpy(filename_tail, "status"); - file = fopen_for_read(filename); -- if (!file) -- break; -- while (fgets(buf, sizeof(buf), file)) { -- char *tp; -+ if (file) { -+ while (fgets(buf, sizeof(buf), file)) { -+ char *tp; - #define SCAN_TWO(str, name, statement) \ - if (strncmp(buf, str, sizeof(str)-1) == 0) { \ - tp = skip_whitespace(buf + sizeof(str)-1); \ - sscanf(tp, "%u", &sp->name); \ - statement; \ - } -- SCAN_TWO("Uid:", ruid, continue); -- SCAN_TWO("Gid:", rgid, break); -+ SCAN_TWO("Uid:", ruid, continue); -+ SCAN_TWO("Gid:", rgid, break); - #undef SCAN_TWO -+ } -+ fclose(file); - } -- fclose(file); - } - #endif /* PS_ADDITIONAL_COLUMNS */ -+ if (flags & PSSCAN_EXE) { -+ strcpy(filename_tail, "exe"); -+ free(sp->exe); -+ sp->exe = xmalloc_readlink(filename); -+ } -+ /* Note: if /proc/PID/cmdline is empty, -+ * code below "breaks". Therefore it must be -+ * the last code to parse /proc/PID/xxx data -+ * (we used to have /proc/PID/exe parsing after it -+ * and were getting stale sp->exe). -+ */ - #if 0 /* PSSCAN_CMD is not used */ - if (flags & (PSSCAN_CMD|PSSCAN_ARGV0)) { - free(sp->argv0); -@@ -452,13 +465,9 @@ procps_status_t* FAST_FUNC procps_scan(p - } - } - #endif -- if (flags & PSSCAN_EXE) { -- strcpy(filename_tail, "exe"); -- free(sp->exe); -- sp->exe = xmalloc_readlink(filename); -- } - break; -- } -+ } /* for (;;) */ -+ - return sp; - } - diff --git a/packages/sysutils/busybox/patches/busybox-1.15.1-sed.diff b/packages/sysutils/busybox/patches/busybox-1.15.1-sed.diff deleted file mode 100644 index 7042bf0ebe..0000000000 --- a/packages/sysutils/busybox/patches/busybox-1.15.1-sed.diff +++ /dev/null @@ -1,15 +0,0 @@ -diff -urpN busybox-1.15.1/editors/sed.c busybox-1.15.1-sed/editors/sed.c ---- busybox-1.15.1/editors/sed.c 2009-09-12 17:55:58.000000000 +0200 -+++ busybox-1.15.1-sed/editors/sed.c 2009-09-22 03:01:59.000000000 +0200 -@@ -690,10 +690,8 @@ static int do_subst_command(sed_cmd_t *s - if (sed_cmd->which_match) - break; - -- if (*line == '\0') -- break; - //maybe (G.regmatch[0].rm_eo ? REG_NOTBOL : 0) instead of unconditional REG_NOTBOL? -- } while (regexec(current_regex, line, 10, G.regmatch, REG_NOTBOL) != REG_NOMATCH); -+ } while (*line && regexec(current_regex, line, 10, G.regmatch, REG_NOTBOL) != REG_NOMATCH); - - /* Copy rest of string into output pipeline */ - while (1) { diff --git a/packages/sysutils/busybox/patches/busybox-1.15.1-uniq.diff b/packages/sysutils/busybox/patches/busybox-1.15.1-uniq.diff deleted file mode 100644 index 0055544b07..0000000000 --- a/packages/sysutils/busybox/patches/busybox-1.15.1-uniq.diff +++ /dev/null @@ -1,11 +0,0 @@ -diff -urpN busybox-1.15.1/coreutils/uniq.c busybox-1.15.1-uniq/coreutils/uniq.c ---- busybox-1.15.1/coreutils/uniq.c 2009-09-12 17:55:58.000000000 +0200 -+++ busybox-1.15.1-uniq/coreutils/uniq.c 2009-09-23 12:56:09.132695142 +0200 -@@ -84,6 +84,7 @@ int uniq_main(int argc UNUSED_PARAM, cha - break; - } - -+ free(s1); - ++dups; /* note: testing for overflow seems excessive. */ - } - diff --git a/packages/sysutils/busybox/url b/packages/sysutils/busybox/url index 678f660fb0..0746694f27 100644 --- a/packages/sysutils/busybox/url +++ b/packages/sysutils/busybox/url @@ -1 +1 @@ -http://www.busybox.net/downloads/busybox-1.15.1.tar.bz2 +http://www.busybox.net/downloads/busybox-1.15.2.tar.bz2