busybox: bump 1.12.x / 1.13.x versions
This commit is contained in:
parent
5432f26f0e
commit
026a3581ae
|
@ -65,8 +65,8 @@ config BR2_BUSYBOX_VERSION
|
||||||
default "1.9.2" if BR2_BUSYBOX_VERSION_1_9_X
|
default "1.9.2" if BR2_BUSYBOX_VERSION_1_9_X
|
||||||
default "1.10.4" if BR2_BUSYBOX_VERSION_1_10_X
|
default "1.10.4" if BR2_BUSYBOX_VERSION_1_10_X
|
||||||
default "1.11.3" if BR2_BUSYBOX_VERSION_1_11_X
|
default "1.11.3" if BR2_BUSYBOX_VERSION_1_11_X
|
||||||
default "1.12.2" if BR2_BUSYBOX_VERSION_1_12_X
|
default "1.12.3" if BR2_BUSYBOX_VERSION_1_12_X
|
||||||
default "1.13.0" if BR2_BUSYBOX_VERSION_1_13_X
|
default "1.13.1" if BR2_BUSYBOX_VERSION_1_13_X
|
||||||
|
|
||||||
config BR2_PACKAGE_BUSYBOX_FULLINSTALL
|
config BR2_PACKAGE_BUSYBOX_FULLINSTALL
|
||||||
bool "Run BusyBox's own full installation"
|
bool "Run BusyBox's own full installation"
|
||||||
|
|
|
@ -1,22 +0,0 @@
|
||||||
--- busybox-1.12.2/libbb/getopt32.c Sun Nov 9 18:20:37 2008
|
|
||||||
+++ busybox-1.12.2-getopt/libbb/getopt32.c Wed Nov 12 23:03:33 2008
|
|
||||||
@@ -515,6 +515,19 @@
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
+ /* In case getopt32 was already called:
|
|
||||||
+ * reset the libc getopt() function, which keeps internal state.
|
|
||||||
+ * run_nofork_applet_prime() does this, but we might end up here
|
|
||||||
+ * also via gunzip_main() -> gzip_main(). Play safe.
|
|
||||||
+ */
|
|
||||||
+#ifdef __GLIBC__
|
|
||||||
+ optind = 0;
|
|
||||||
+#else /* BSD style */
|
|
||||||
+ optind = 1;
|
|
||||||
+ /* optreset = 1; */
|
|
||||||
+#endif
|
|
||||||
+ /* optarg = NULL; opterr = 0; optopt = 0; - do we need this?? */
|
|
||||||
+
|
|
||||||
pargv = NULL;
|
|
||||||
|
|
||||||
/* Note: just "getopt() <= 0" will not work well for
|
|
|
@ -1,13 +0,0 @@
|
||||||
--- busybox-1.12.2/libbb/lineedit.c Sun Nov 9 18:20:16 2008
|
|
||||||
+++ busybox-1.12.2-lineedit/libbb/lineedit.c Tue Nov 11 21:02:04 2008
|
|
||||||
@@ -1415,8 +1415,10 @@
|
|
||||||
if ((state->flags & SAVE_HISTORY) && state->hist_file)
|
|
||||||
load_history(state->hist_file);
|
|
||||||
#endif
|
|
||||||
+#if MAX_HISTORY > 0
|
|
||||||
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 */
|
|
|
@ -1,275 +0,0 @@
|
||||||
--- busybox-1.13.0/shell/ash.c Thu Oct 30 08:41:32 2008
|
|
||||||
+++ busybox-1.13.0-ash/shell/ash.c Fri Nov 28 04:39:17 2008
|
|
||||||
@@ -536,6 +536,7 @@
|
|
||||||
#define NHERE 24
|
|
||||||
#define NXHERE 25
|
|
||||||
#define NNOT 26
|
|
||||||
+#define N_NUMBER 27
|
|
||||||
|
|
||||||
union node;
|
|
||||||
|
|
||||||
@@ -7546,43 +7547,46 @@
|
|
||||||
|
|
||||||
/* ============ eval.c */
|
|
||||||
|
|
||||||
-static int funcblocksize; /* size of structures in function */
|
|
||||||
-static int funcstringsize; /* size of strings in node */
|
|
||||||
-static void *funcblock; /* block to allocate function from */
|
|
||||||
-static char *funcstring; /* block to allocate strings from */
|
|
||||||
+static int funcblocksize; /* size of structures in function */
|
|
||||||
+static int funcstringsize; /* size of strings in node */
|
|
||||||
+static void *funcblock; /* block to allocate function from */
|
|
||||||
+static char *funcstring; /* block to allocate strings from */
|
|
||||||
|
|
||||||
/* flags in argument to evaltree */
|
|
||||||
-#define EV_EXIT 01 /* exit after evaluating tree */
|
|
||||||
-#define EV_TESTED 02 /* exit status is checked; ignore -e flag */
|
|
||||||
+#define EV_EXIT 01 /* exit after evaluating tree */
|
|
||||||
+#define EV_TESTED 02 /* exit status is checked; ignore -e flag */
|
|
||||||
#define EV_BACKCMD 04 /* command executing within back quotes */
|
|
||||||
|
|
||||||
-static const short nodesize[26] = {
|
|
||||||
- SHELL_ALIGN(sizeof(struct ncmd)),
|
|
||||||
- SHELL_ALIGN(sizeof(struct npipe)),
|
|
||||||
- SHELL_ALIGN(sizeof(struct nredir)),
|
|
||||||
- SHELL_ALIGN(sizeof(struct nredir)),
|
|
||||||
- SHELL_ALIGN(sizeof(struct nredir)),
|
|
||||||
- SHELL_ALIGN(sizeof(struct nbinary)),
|
|
||||||
- SHELL_ALIGN(sizeof(struct nbinary)),
|
|
||||||
- SHELL_ALIGN(sizeof(struct nbinary)),
|
|
||||||
- SHELL_ALIGN(sizeof(struct nif)),
|
|
||||||
- SHELL_ALIGN(sizeof(struct nbinary)),
|
|
||||||
- SHELL_ALIGN(sizeof(struct nbinary)),
|
|
||||||
- SHELL_ALIGN(sizeof(struct nfor)),
|
|
||||||
- SHELL_ALIGN(sizeof(struct ncase)),
|
|
||||||
- SHELL_ALIGN(sizeof(struct nclist)),
|
|
||||||
- SHELL_ALIGN(sizeof(struct narg)),
|
|
||||||
- SHELL_ALIGN(sizeof(struct narg)),
|
|
||||||
- SHELL_ALIGN(sizeof(struct nfile)),
|
|
||||||
- SHELL_ALIGN(sizeof(struct nfile)),
|
|
||||||
- SHELL_ALIGN(sizeof(struct nfile)),
|
|
||||||
- SHELL_ALIGN(sizeof(struct nfile)),
|
|
||||||
- SHELL_ALIGN(sizeof(struct nfile)),
|
|
||||||
- SHELL_ALIGN(sizeof(struct ndup)),
|
|
||||||
- SHELL_ALIGN(sizeof(struct ndup)),
|
|
||||||
- SHELL_ALIGN(sizeof(struct nhere)),
|
|
||||||
- SHELL_ALIGN(sizeof(struct nhere)),
|
|
||||||
- SHELL_ALIGN(sizeof(struct nnot)),
|
|
||||||
+static const short nodesize[N_NUMBER] = {
|
|
||||||
+ [NCMD ] = SHELL_ALIGN(sizeof(struct ncmd)),
|
|
||||||
+ [NPIPE ] = SHELL_ALIGN(sizeof(struct npipe)),
|
|
||||||
+ [NREDIR ] = SHELL_ALIGN(sizeof(struct nredir)),
|
|
||||||
+ [NBACKGND ] = SHELL_ALIGN(sizeof(struct nredir)),
|
|
||||||
+ [NSUBSHELL] = SHELL_ALIGN(sizeof(struct nredir)),
|
|
||||||
+ [NAND ] = SHELL_ALIGN(sizeof(struct nbinary)),
|
|
||||||
+ [NOR ] = SHELL_ALIGN(sizeof(struct nbinary)),
|
|
||||||
+ [NSEMI ] = SHELL_ALIGN(sizeof(struct nbinary)),
|
|
||||||
+ [NIF ] = SHELL_ALIGN(sizeof(struct nif)),
|
|
||||||
+ [NWHILE ] = SHELL_ALIGN(sizeof(struct nbinary)),
|
|
||||||
+ [NUNTIL ] = SHELL_ALIGN(sizeof(struct nbinary)),
|
|
||||||
+ [NFOR ] = SHELL_ALIGN(sizeof(struct nfor)),
|
|
||||||
+ [NCASE ] = SHELL_ALIGN(sizeof(struct ncase)),
|
|
||||||
+ [NCLIST ] = SHELL_ALIGN(sizeof(struct nclist)),
|
|
||||||
+ [NDEFUN ] = SHELL_ALIGN(sizeof(struct narg)),
|
|
||||||
+ [NARG ] = SHELL_ALIGN(sizeof(struct narg)),
|
|
||||||
+ [NTO ] = SHELL_ALIGN(sizeof(struct nfile)),
|
|
||||||
+#if ENABLE_ASH_BASH_COMPAT
|
|
||||||
+ [NTO2 ] = SHELL_ALIGN(sizeof(struct nfile)),
|
|
||||||
+#endif
|
|
||||||
+ [NCLOBBER ] = SHELL_ALIGN(sizeof(struct nfile)),
|
|
||||||
+ [NFROM ] = SHELL_ALIGN(sizeof(struct nfile)),
|
|
||||||
+ [NFROMTO ] = SHELL_ALIGN(sizeof(struct nfile)),
|
|
||||||
+ [NAPPEND ] = SHELL_ALIGN(sizeof(struct nfile)),
|
|
||||||
+ [NTOFD ] = SHELL_ALIGN(sizeof(struct ndup)),
|
|
||||||
+ [NFROMFD ] = SHELL_ALIGN(sizeof(struct ndup)),
|
|
||||||
+ [NHERE ] = SHELL_ALIGN(sizeof(struct nhere)),
|
|
||||||
+ [NXHERE ] = SHELL_ALIGN(sizeof(struct nhere)),
|
|
||||||
+ [NNOT ] = SHELL_ALIGN(sizeof(struct nnot)),
|
|
||||||
};
|
|
||||||
|
|
||||||
static void calcsize(union node *n);
|
|
||||||
@@ -9065,8 +9069,6 @@
|
|
||||||
* This implements the input routines used by the parser.
|
|
||||||
*/
|
|
||||||
|
|
||||||
-#define EOF_NLEFT -99 /* value of parsenleft when EOF pushed back */
|
|
||||||
-
|
|
||||||
enum {
|
|
||||||
INPUT_PUSH_FILE = 1,
|
|
||||||
INPUT_NOFILE_OK = 2,
|
|
||||||
@@ -9107,7 +9109,6 @@
|
|
||||||
#endif
|
|
||||||
parsenextc = sp->prevstring;
|
|
||||||
parsenleft = sp->prevnleft;
|
|
||||||
-/*dprintf("*** calling popstring: restoring to '%s'\n", parsenextc);*/
|
|
||||||
g_parsefile->strpush = sp->prev;
|
|
||||||
if (sp != &(g_parsefile->basestrpush))
|
|
||||||
free(sp);
|
|
||||||
@@ -9123,7 +9124,7 @@
|
|
||||||
|
|
||||||
#if ENABLE_FEATURE_EDITING
|
|
||||||
retry:
|
|
||||||
- if (!iflag || g_parsefile->fd)
|
|
||||||
+ if (!iflag || g_parsefile->fd != STDIN_FILENO)
|
|
||||||
nr = nonblock_safe_read(g_parsefile->fd, buf, BUFSIZ - 1);
|
|
||||||
else {
|
|
||||||
#if ENABLE_FEATURE_TAB_COMPLETION
|
|
||||||
@@ -9171,55 +9172,76 @@
|
|
||||||
* Refill the input buffer and return the next input character:
|
|
||||||
*
|
|
||||||
* 1) If a string was pushed back on the input, pop it;
|
|
||||||
- * 2) If an EOF was pushed back (parsenleft == EOF_NLEFT) or we are reading
|
|
||||||
+ * 2) If an EOF was pushed back (parsenleft < -BIGNUM) or we are reading
|
|
||||||
* from a string so we can't refill the buffer, return EOF.
|
|
||||||
* 3) If the is more stuff in this buffer, use it else call read to fill it.
|
|
||||||
* 4) Process input up to the next newline, deleting nul characters.
|
|
||||||
*/
|
|
||||||
+//#define pgetc_debug(...) bb_error_msg(__VA_ARGS__)
|
|
||||||
+#define pgetc_debug(...) ((void)0)
|
|
||||||
static int
|
|
||||||
preadbuffer(void)
|
|
||||||
{
|
|
||||||
char *q;
|
|
||||||
int more;
|
|
||||||
- char savec;
|
|
||||||
|
|
||||||
while (g_parsefile->strpush) {
|
|
||||||
#if ENABLE_ASH_ALIAS
|
|
||||||
- if (parsenleft == -1 && g_parsefile->strpush->ap &&
|
|
||||||
- parsenextc[-1] != ' ' && parsenextc[-1] != '\t') {
|
|
||||||
+ if (parsenleft == -1 && g_parsefile->strpush->ap
|
|
||||||
+ && parsenextc[-1] != ' ' && parsenextc[-1] != '\t'
|
|
||||||
+ ) {
|
|
||||||
+ pgetc_debug("preadbuffer PEOA");
|
|
||||||
return PEOA;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
popstring();
|
|
||||||
+ /* try "pgetc" now: */
|
|
||||||
+ pgetc_debug("internal pgetc at %d:%p'%s'", parsenleft, parsenextc, parsenextc);
|
|
||||||
if (--parsenleft >= 0)
|
|
||||||
return signed_char2int(*parsenextc++);
|
|
||||||
}
|
|
||||||
- if (parsenleft == EOF_NLEFT || g_parsefile->buf == NULL)
|
|
||||||
+ /* on both branches above parsenleft < 0.
|
|
||||||
+ * "pgetc" needs refilling.
|
|
||||||
+ */
|
|
||||||
+
|
|
||||||
+ /* -90 is -BIGNUM. Below we use -99 to mark "EOF on read",
|
|
||||||
+ * pungetc() may decrement it a few times. -90 is enough.
|
|
||||||
+ */
|
|
||||||
+ if (parsenleft < -90 || g_parsefile->buf == NULL) {
|
|
||||||
+ pgetc_debug("preadbuffer PEOF1");
|
|
||||||
+ /* even in failure keep them in lock step,
|
|
||||||
+ * for correct pungetc. */
|
|
||||||
+ parsenextc++;
|
|
||||||
return PEOF;
|
|
||||||
- flush_stdout_stderr();
|
|
||||||
+ }
|
|
||||||
|
|
||||||
more = parselleft;
|
|
||||||
if (more <= 0) {
|
|
||||||
+ flush_stdout_stderr();
|
|
||||||
again:
|
|
||||||
more = preadfd();
|
|
||||||
if (more <= 0) {
|
|
||||||
- parselleft = parsenleft = EOF_NLEFT;
|
|
||||||
+ parselleft = parsenleft = -99;
|
|
||||||
+ pgetc_debug("preadbuffer PEOF2");
|
|
||||||
+ parsenextc++;
|
|
||||||
return PEOF;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
+ /* Find out where's the end of line.
|
|
||||||
+ * Set parsenleft/parselleft acordingly.
|
|
||||||
+ * NUL chars are deleted.
|
|
||||||
+ */
|
|
||||||
q = parsenextc;
|
|
||||||
-
|
|
||||||
- /* delete nul characters */
|
|
||||||
for (;;) {
|
|
||||||
- int c;
|
|
||||||
+ char c;
|
|
||||||
|
|
||||||
more--;
|
|
||||||
- c = *q;
|
|
||||||
|
|
||||||
- if (!c)
|
|
||||||
+ c = *q;
|
|
||||||
+ if (c == '\0') {
|
|
||||||
memmove(q, q + 1, more);
|
|
||||||
- else {
|
|
||||||
+ } else {
|
|
||||||
q++;
|
|
||||||
if (c == '\n') {
|
|
||||||
parsenleft = q - parsenextc - 1;
|
|
||||||
@@ -9236,22 +9258,23 @@
|
|
||||||
}
|
|
||||||
parselleft = more;
|
|
||||||
|
|
||||||
- savec = *q;
|
|
||||||
- *q = '\0';
|
|
||||||
-
|
|
||||||
if (vflag) {
|
|
||||||
+ char save = *q;
|
|
||||||
+ *q = '\0';
|
|
||||||
out2str(parsenextc);
|
|
||||||
+ *q = save;
|
|
||||||
}
|
|
||||||
|
|
||||||
- *q = savec;
|
|
||||||
-
|
|
||||||
+ pgetc_debug("preadbuffer at %d:%p'%s'", parsenleft, parsenextc, parsenextc);
|
|
||||||
return signed_char2int(*parsenextc++);
|
|
||||||
}
|
|
||||||
|
|
||||||
#define pgetc_as_macro() (--parsenleft >= 0 ? signed_char2int(*parsenextc++) : preadbuffer())
|
|
||||||
+
|
|
||||||
static int
|
|
||||||
pgetc(void)
|
|
||||||
{
|
|
||||||
+ pgetc_debug("pgetc at %d:%p'%s'", parsenleft, parsenextc, parsenextc);
|
|
||||||
return pgetc_as_macro();
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -9312,6 +9335,7 @@
|
|
||||||
{
|
|
||||||
parsenleft++;
|
|
||||||
parsenextc--;
|
|
||||||
+ pgetc_debug("pushed back to %d:%p'%s'", parsenleft, parsenextc, parsenextc);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
@@ -9325,16 +9349,17 @@
|
|
||||||
pushstring(char *s, struct alias *ap)
|
|
||||||
{
|
|
||||||
struct strpush *sp;
|
|
||||||
- size_t len;
|
|
||||||
+ int len;
|
|
||||||
|
|
||||||
len = strlen(s);
|
|
||||||
INT_OFF;
|
|
||||||
if (g_parsefile->strpush) {
|
|
||||||
- sp = ckzalloc(sizeof(struct strpush));
|
|
||||||
+ sp = ckzalloc(sizeof(*sp));
|
|
||||||
sp->prev = g_parsefile->strpush;
|
|
||||||
- g_parsefile->strpush = sp;
|
|
||||||
- } else
|
|
||||||
- sp = g_parsefile->strpush = &(g_parsefile->basestrpush);
|
|
||||||
+ } else {
|
|
||||||
+ sp = &(g_parsefile->basestrpush);
|
|
||||||
+ }
|
|
||||||
+ g_parsefile->strpush = sp;
|
|
||||||
sp->prevstring = parsenextc;
|
|
||||||
sp->prevnleft = parsenleft;
|
|
||||||
#if ENABLE_ASH_ALIAS
|
|
||||||
@@ -9424,7 +9449,7 @@
|
|
||||||
close_on_exec_on(fd);
|
|
||||||
if (push) {
|
|
||||||
pushfile();
|
|
||||||
- g_parsefile->buf = 0;
|
|
||||||
+ g_parsefile->buf = NULL;
|
|
||||||
}
|
|
||||||
g_parsefile->fd = fd;
|
|
||||||
if (g_parsefile->buf == NULL)
|
|
|
@ -1,22 +0,0 @@
|
||||||
--- busybox-1.13.0/libbb/getopt32.c Thu Oct 30 08:41:34 2008
|
|
||||||
+++ busybox-1.13.0-getopt/libbb/getopt32.c Wed Nov 12 23:04:01 2008
|
|
||||||
@@ -515,6 +515,19 @@
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
+ /* In case getopt32 was already called:
|
|
||||||
+ * reset the libc getopt() function, which keeps internal state.
|
|
||||||
+ * run_nofork_applet_prime() does this, but we might end up here
|
|
||||||
+ * also via gunzip_main() -> gzip_main(). Play safe.
|
|
||||||
+ */
|
|
||||||
+#ifdef __GLIBC__
|
|
||||||
+ optind = 0;
|
|
||||||
+#else /* BSD style */
|
|
||||||
+ optind = 1;
|
|
||||||
+ /* optreset = 1; */
|
|
||||||
+#endif
|
|
||||||
+ /* optarg = NULL; opterr = 0; optopt = 0; - do we need this?? */
|
|
||||||
+
|
|
||||||
pargv = NULL;
|
|
||||||
|
|
||||||
/* Note: just "getopt() <= 0" will not work well for
|
|
|
@ -1,17 +0,0 @@
|
||||||
--- busybox-1.13.0/coreutils/id.c Wed Nov 5 22:39:54 2008
|
|
||||||
+++ busybox-1.13.0-id/coreutils/id.c Mon Nov 17 01:10:04 2008
|
|
||||||
@@ -17,6 +17,14 @@
|
|
||||||
|
|
||||||
#include "libbb.h"
|
|
||||||
|
|
||||||
+#if !ENABLE_USE_BB_PWD_GRP
|
|
||||||
+#if defined(__UCLIBC_MAJOR__) && (__UCLIBC_MAJOR__ == 0)
|
|
||||||
+#if (__UCLIBC_MINOR__ < 9) || (__UCLIBC_MINOR__ == 9 && __UCLIBC_SUBLEVEL__ < 30)
|
|
||||||
+#error "Sorry, you need at least uClibc version 0.9.30 for id applet to build"
|
|
||||||
+#endif
|
|
||||||
+#endif
|
|
||||||
+#endif
|
|
||||||
+
|
|
||||||
enum {
|
|
||||||
PRINT_REAL = (1 << 0),
|
|
||||||
NAME_NOT_NUMBER = (1 << 1),
|
|
|
@ -1,101 +0,0 @@
|
||||||
--- busybox-1.13.0/miscutils/inotifyd.c Thu Oct 30 08:41:37 2008
|
|
||||||
+++ busybox-1.13.0-inotify/miscutils/inotifyd.c Fri Nov 14 22:33:27 2008
|
|
||||||
@@ -51,6 +51,7 @@
|
|
||||||
int inotifyd_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
|
|
||||||
int inotifyd_main(int argc UNUSED_PARAM, char **argv)
|
|
||||||
{
|
|
||||||
+ int n;
|
|
||||||
unsigned mask = IN_ALL_EVENTS; // assume we want all events
|
|
||||||
struct pollfd pfd;
|
|
||||||
char **watched = ++argv; // watched name list
|
|
||||||
@@ -69,7 +70,6 @@
|
|
||||||
while (*++argv) {
|
|
||||||
char *path = *argv;
|
|
||||||
char *masks = strchr(path, ':');
|
|
||||||
- int wd; // watch descriptor
|
|
||||||
// if mask is specified ->
|
|
||||||
if (masks) {
|
|
||||||
*masks = '\0'; // split path and mask
|
|
||||||
@@ -83,32 +83,39 @@
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// add watch
|
|
||||||
- wd = inotify_add_watch(pfd.fd, path, mask);
|
|
||||||
- if (wd < 0) {
|
|
||||||
+ n = inotify_add_watch(pfd.fd, path, mask);
|
|
||||||
+ if (n < 0)
|
|
||||||
bb_perror_msg_and_die("add watch (%s) failed", path);
|
|
||||||
-// } else {
|
|
||||||
-// bb_error_msg("added %d [%s]:%4X", wd, path, mask);
|
|
||||||
- }
|
|
||||||
+ //bb_error_msg("added %d [%s]:%4X", n, path, mask);
|
|
||||||
}
|
|
||||||
|
|
||||||
// setup signals
|
|
||||||
- bb_signals(0
|
|
||||||
- + (1 << SIGHUP)
|
|
||||||
- + (1 << SIGINT)
|
|
||||||
- + (1 << SIGTERM)
|
|
||||||
- + (1 << SIGPIPE)
|
|
||||||
- , record_signo);
|
|
||||||
+ bb_signals(BB_FATAL_SIGS, record_signo);
|
|
||||||
|
|
||||||
// do watch
|
|
||||||
-
|
|
||||||
-// pfd.fd = fd;
|
|
||||||
pfd.events = POLLIN;
|
|
||||||
-
|
|
||||||
- while (!bb_got_signal && poll(&pfd, 1, -1) > 0) {
|
|
||||||
+ while (1) {
|
|
||||||
ssize_t len;
|
|
||||||
void *buf;
|
|
||||||
struct inotify_event *ie;
|
|
||||||
|
|
||||||
+ again:
|
|
||||||
+ if (bb_got_signal)
|
|
||||||
+ break;
|
|
||||||
+ n = poll(&pfd, 1, -1);
|
|
||||||
+ /* Signal interrupted us? */
|
|
||||||
+ if (n < 0 && errno == EINTR)
|
|
||||||
+ goto again;
|
|
||||||
+ // Under Linux, above if() is not necessary.
|
|
||||||
+ // Non-fatal signals, e.g. SIGCHLD, when set to SIG_DFL,
|
|
||||||
+ // are not interrupting poll().
|
|
||||||
+ // Thus we can just break if n <= 0 (see below),
|
|
||||||
+ // because EINTR will happen only on SIGTERM et al.
|
|
||||||
+ // But this might be not true under other Unixes,
|
|
||||||
+ // and is generally way too subtle to depend on.
|
|
||||||
+ if (n <= 0) // strange error?
|
|
||||||
+ break;
|
|
||||||
+
|
|
||||||
// read out all pending events
|
|
||||||
xioctl(pfd.fd, FIONREAD, &len);
|
|
||||||
#define eventbuf bb_common_bufsiz1
|
|
||||||
@@ -117,21 +124,21 @@
|
|
||||||
// process events. N.B. events may vary in length
|
|
||||||
while (len > 0) {
|
|
||||||
int i;
|
|
||||||
- char events[12];
|
|
||||||
+ char events[sizeof(mask_names)];
|
|
||||||
char *s = events;
|
|
||||||
unsigned m = ie->mask;
|
|
||||||
|
|
||||||
- for (i = 0; i < 12; ++i, m >>= 1) {
|
|
||||||
- if (m & 1) {
|
|
||||||
+ for (i = 0; i < sizeof(mask_names)-1; ++i, m >>= 1) {
|
|
||||||
+ if (m & 1)
|
|
||||||
*s++ = mask_names[i];
|
|
||||||
- }
|
|
||||||
}
|
|
||||||
*s = '\0';
|
|
||||||
-// bb_error_msg("exec %s %08X\t%s\t%s\t%s", agent, ie->mask, events, watched[ie->wd], ie->len ? ie->name : "");
|
|
||||||
+ //bb_error_msg("exec %s %08X\t%s\t%s\t%s", agent,
|
|
||||||
+ // ie->mask, events, watched[ie->wd], ie->len ? ie->name : "");
|
|
||||||
args[1] = events;
|
|
||||||
args[2] = watched[ie->wd];
|
|
||||||
args[3] = ie->len ? ie->name : NULL;
|
|
||||||
- xspawn((char **)args);
|
|
||||||
+ wait4pid(xspawn((char **)args));
|
|
||||||
// next event
|
|
||||||
i = sizeof(struct inotify_event) + ie->len;
|
|
||||||
len -= i;
|
|
|
@ -1,29 +0,0 @@
|
||||||
--- busybox-1.13.0/sysklogd/klogd.c Thu Oct 30 08:41:28 2008
|
|
||||||
+++ busybox-1.13.0-klogd/sysklogd/klogd.c Thu Nov 20 00:46:00 2008
|
|
||||||
@@ -73,9 +73,6 @@
|
|
||||||
|
|
||||||
syslog(LOG_NOTICE, "klogd started: %s", bb_banner);
|
|
||||||
|
|
||||||
- /* Initially null terminate the buffer in case of a very long line */
|
|
||||||
- log_buffer[KLOGD_LOGBUF_SIZE - 1] = '\0';
|
|
||||||
-
|
|
||||||
while (1) {
|
|
||||||
int n;
|
|
||||||
int priority;
|
|
||||||
@@ -89,6 +86,7 @@
|
|
||||||
errno);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
+ log_buffer[used + n] = '\0';
|
|
||||||
|
|
||||||
/* klogctl buffer parsing modelled after code in dmesg.c */
|
|
||||||
start = &log_buffer[0];
|
|
||||||
@@ -101,7 +99,7 @@
|
|
||||||
/* This line is incomplete... */
|
|
||||||
if (start != log_buffer) {
|
|
||||||
/* move it to the front of the buffer */
|
|
||||||
- strcpy(log_buffer, start);
|
|
||||||
+ overlapping_strcpy(log_buffer, start);
|
|
||||||
/* don't log it yet */
|
|
||||||
used = strlen(log_buffer);
|
|
||||||
break;
|
|
|
@ -1,13 +0,0 @@
|
||||||
--- busybox-1.13.0/libbb/lineedit.c Wed Nov 5 22:39:54 2008
|
|
||||||
+++ busybox-1.13.0-lineedit/libbb/lineedit.c Wed Nov 12 23:18:05 2008
|
|
||||||
@@ -1415,8 +1415,10 @@
|
|
||||||
if ((state->flags & SAVE_HISTORY) && state->hist_file)
|
|
||||||
load_history(state->hist_file);
|
|
||||||
#endif
|
|
||||||
+#if MAX_HISTORY > 0
|
|
||||||
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 */
|
|
|
@ -1,47 +0,0 @@
|
||||||
--- busybox-1.13.0/modutils/modprobe-small.c Thu Oct 30 08:41:28 2008
|
|
||||||
+++ busybox-1.13.0-modprobe/modutils/modprobe-small.c Mon Nov 10 22:19:03 2008
|
|
||||||
@@ -600,18 +600,22 @@
|
|
||||||
free(deps);
|
|
||||||
|
|
||||||
/* modprobe -> load it */
|
|
||||||
- if (!is_rmmod && (options && !strstr(options, "blacklist"))) {
|
|
||||||
- errno = 0;
|
|
||||||
- if (load_module(info->pathname, options) != 0) {
|
|
||||||
- if (EEXIST != errno) {
|
|
||||||
- bb_error_msg("'%s': %s",
|
|
||||||
+ if (!is_rmmod) {
|
|
||||||
+ if (!options || strstr(options, "blacklist") == NULL) {
|
|
||||||
+ errno = 0;
|
|
||||||
+ if (load_module(info->pathname, options) != 0) {
|
|
||||||
+ if (EEXIST != errno) {
|
|
||||||
+ bb_error_msg("'%s': %s",
|
|
||||||
info->pathname,
|
|
||||||
moderror(errno));
|
|
||||||
- } else {
|
|
||||||
- dbg1_error_msg("'%s': %s",
|
|
||||||
+ } else {
|
|
||||||
+ dbg1_error_msg("'%s': %s",
|
|
||||||
info->pathname,
|
|
||||||
moderror(errno));
|
|
||||||
+ }
|
|
||||||
}
|
|
||||||
+ } else {
|
|
||||||
+ dbg1_error_msg("'%s': blacklisted", info->pathname);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
ret:
|
|
||||||
--- busybox-1.13.0/modutils/modutils-24.c Thu Oct 30 08:41:28 2008
|
|
||||||
+++ busybox-1.13.0-modprobe/modutils/modutils-24.c Wed Nov 12 01:02:54 2008
|
|
||||||
@@ -3236,8 +3236,10 @@
|
|
||||||
}
|
|
||||||
|
|
||||||
shnum = f->header.e_shnum;
|
|
||||||
- f->sections = xmalloc(sizeof(struct obj_section *) * shnum);
|
|
||||||
- memset(f->sections, 0, sizeof(struct obj_section *) * shnum);
|
|
||||||
+ /* Growth of ->sections vector will be done by
|
|
||||||
+ * xrealloc_vector(..., 2, ...), therefore we must allocate
|
|
||||||
+ * at least 2^2 = 4 extra elements here. */
|
|
||||||
+ f->sections = xzalloc(sizeof(f->sections[0]) * (shnum + 4));
|
|
||||||
|
|
||||||
section_headers = alloca(sizeof(ElfW(Shdr)) * shnum);
|
|
||||||
fseek(fp, f->header.e_shoff, SEEK_SET);
|
|
Loading…
Reference in New Issue