Commit 6ef1705c authored by Peter Korsgaard's avatar Peter Korsgaard
Browse files

busybox: bump 1.15.x stable version

parent e6bbcb0a
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -41,7 +41,7 @@ config BR2_BUSYBOX_VERSION
	default "1.12.4"	if BR2_BUSYBOX_VERSION_1_12_X
	default "1.13.4"	if BR2_BUSYBOX_VERSION_1_13_X
	default "1.14.4"	if BR2_BUSYBOX_VERSION_1_14_X
	default "1.15.1"	if BR2_BUSYBOX_VERSION_1_15_X
	default "1.15.2"	if BR2_BUSYBOX_VERSION_1_15_X

config BR2_PACKAGE_BUSYBOX_FULLINSTALL
	bool "Run BusyBox's own full installation"
+0 −29
Original line number Diff line number Diff line
diff -urpN busybox-1.15.1/shell/ash.c busybox-1.15.1-ash/shell/ash.c
--- busybox-1.15.1/shell/ash.c	2009-09-12 17:56:11.000000000 +0200
+++ busybox-1.15.1-ash/shell/ash.c	2009-09-16 16:29:09.609276492 +0200
@@ -5553,7 +5553,7 @@ exptilde(char *startp, char *p, int flag
 	char *name;
 	struct passwd *pw;
 	const char *home;
-	int quotes = flag & (EXP_FULL | EXP_CASE);
+	int quotes = flag & (EXP_FULL | EXP_CASE | EXP_REDIR);
 	int startloc;
 
 	name = p + 1;
@@ -6321,7 +6321,7 @@ varvalue(char *name, int varflags, int f
 	int syntax;
 	int quoted = varflags & VSQUOTE;
 	int subtype = varflags & VSTYPE;
-	int quotes = flags & (EXP_FULL | EXP_CASE);
+	int quotes = flags & (EXP_FULL | EXP_CASE | EXP_REDIR);
 
 	if (quoted && (flags & EXP_FULL))
 		sep = 1 << CHAR_BIT;
@@ -6558,6 +6558,7 @@ evalvar(char *p, int flag, struct strlis
 		patloc = expdest - (char *)stackblock();
 		if (0 == subevalvar(p, /* str: */ NULL, patloc, subtype,
 				startloc, varflags,
+//TODO: | EXP_REDIR too? All other such places do it too
 				/* quotes: */ flag & (EXP_FULL | EXP_CASE),
 				var_str_list)
 		) {
+0 −34
Original line number Diff line number Diff line
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 <linux/hdreg.h>
 #include <sys/mount.h>
+#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.h>             /* assert */
 #include <sys/mount.h>
 #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 */
+0 −35
Original line number Diff line number Diff line
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;
 			}
 		}
+0 −230
Original line number Diff line number Diff line
diff -urpN busybox-1.15.1/findutils/find.c busybox-1.15.1-find/findutils/find.c
--- busybox-1.15.1/findutils/find.c	2009-09-12 17:55:58.000000000 +0200
+++ busybox-1.15.1-find/findutils/find.c	2009-09-30 02:23:54.000000000 +0200
@@ -62,9 +62,6 @@
 /* This is a NOEXEC applet. Be very careful! */
 
 
-IF_FEATURE_FIND_XDEV(static dev_t *xdev_dev;)
-IF_FEATURE_FIND_XDEV(static int xdev_count;)
-
 typedef int (*action_fp)(const char *fileName, struct stat *statbuf, void *) FAST_FUNC;
 
 typedef struct {
@@ -100,9 +97,24 @@ IF_FEATURE_FIND_DELETE( ACTS(delete))
 IF_FEATURE_FIND_EXEC(   ACTS(exec,  char **exec_argv; unsigned *subst_count; int exec_argc;))
 IF_FEATURE_FIND_GROUP(  ACTS(group, gid_t gid;))
 
-static action ***actions;
-static bool need_print = 1;
-static int recurse_flags = ACTION_RECURSE;
+struct globals {
+	IF_FEATURE_FIND_XDEV(dev_t *xdev_dev;)
+	IF_FEATURE_FIND_XDEV(int xdev_count;)
+	action ***actions;
+	bool need_print;
+	recurse_flags_t recurse_flags;
+};
+#define G (*(struct globals*)&bb_common_bufsiz1)
+#define INIT_G() do { \
+	struct G_sizecheck { \
+		char G_sizecheck[sizeof(G) > COMMON_BUFSIZE ? -1 : 1]; \
+	}; \
+	G.xdev_dev = NULL; \
+	G.xdev_count = 0; \
+	G.actions = NULL; \
+	G.need_print = 1; \
+	G.recurse_flags = ACTION_RECURSE; \
+} while (0)
 
 #if ENABLE_FEATURE_FIND_EXEC
 static unsigned count_subst(const char *str)
@@ -363,7 +375,7 @@ ACTF(context)
 	security_context_t con;
 	int rc;
 
-	if (recurse_flags & ACTION_FOLLOWLINKS) {
+	if (G.recurse_flags & ACTION_FOLLOWLINKS) {
 		rc = getfilecon(fileName, &con);
 	} else {
 		rc = lgetfilecon(fileName, &con);
@@ -392,18 +404,18 @@ static int FAST_FUNC fileAction(const ch
 #endif
 
 #if ENABLE_FEATURE_FIND_XDEV
-	if (S_ISDIR(statbuf->st_mode) && xdev_count) {
-		for (i = 0; i < xdev_count; i++) {
-			if (xdev_dev[i] == statbuf->st_dev)
+	if (S_ISDIR(statbuf->st_mode) && G.xdev_count) {
+		for (i = 0; i < G.xdev_count; i++) {
+			if (G.xdev_dev[i] == statbuf->st_dev)
 				break;
 		}
-		if (i == xdev_count)
+		if (i == G.xdev_count)
 			return SKIP;
 	}
 #endif
-	i = exec_actions(actions, fileName, statbuf);
+	i = exec_actions(G.actions, fileName, statbuf);
 	/* Had no explicit -print[0] or -exec? then print */
-	if ((i & TRUE) && need_print)
+	if ((i & TRUE) && G.need_print)
 		puts(fileName);
 	/* Cannot return 0: our caller, recursive_action(),
 	 * will perror() and skip dirs (if called on dir) */
@@ -431,7 +443,7 @@ static int find_type(const char *type)
 	else if (*type == 's')
 		mask = S_IFSOCK;
 
-	if (mask == 0 || *(type + 1) != '\0')
+	if (mask == 0 || type[1] != '\0')
 		bb_error_msg_and_die(bb_msg_invalid_arg, type, "-type");
 
 	return mask;
@@ -592,21 +604,21 @@ static action*** parse_params(char **arg
 
 	/* --- Tests and actions --- */
 		else if (parm == PARM_print) {
-			need_print = 0;
+			G.need_print = 0;
 			/* GNU find ignores '!' here: "find ! -print" */
 			IF_FEATURE_FIND_NOT( invert_flag = 0; )
 			(void) ALLOC_ACTION(print);
 		}
 #if ENABLE_FEATURE_FIND_PRINT0
 		else if (parm == PARM_print0) {
-			need_print = 0;
+			G.need_print = 0;
 			IF_FEATURE_FIND_NOT( invert_flag = 0; )
 			(void) ALLOC_ACTION(print0);
 		}
 #endif
 #if ENABLE_FEATURE_FIND_DEPTH
 		else if (parm == PARM_depth) {
-			recurse_flags |= ACTION_DEPTHFIRST;
+			G.recurse_flags |= ACTION_DEPTHFIRST;
 		}
 #endif
 #if ENABLE_FEATURE_FIND_PRUNE
@@ -617,8 +629,8 @@ static action*** parse_params(char **arg
 #endif
 #if ENABLE_FEATURE_FIND_DELETE
 		else if (parm == PARM_delete) {
-			need_print = 0;
-			recurse_flags |= ACTION_DEPTHFIRST;
+			G.need_print = 0;
+			G.recurse_flags |= ACTION_DEPTHFIRST;
 			(void) ALLOC_ACTION(delete);
 		}
 #endif
@@ -626,7 +638,7 @@ static action*** parse_params(char **arg
 		else if (parm == PARM_exec) {
 			int i;
 			action_exec *ap;
-			need_print = 0;
+			G.need_print = 0;
 			IF_FEATURE_FIND_NOT( invert_flag = 0; )
 			ap = ALLOC_ACTION(exec);
 			ap->exec_argv = ++argv; /* first arg after -exec */
@@ -834,6 +846,8 @@ IF_FEATURE_FIND_MAXDEPTH(OPT_MINDEPTH,)
 #define minmaxdepth NULL
 #endif
 
+	INIT_G();
+
 	for (firstopt = 1; firstopt < argc; firstopt++) {
 		if (argv[firstopt][0] == '-')
 			break;
@@ -861,21 +875,21 @@ IF_FEATURE_FIND_MAXDEPTH(OPT_MINDEPTH,)
 	while ((arg = argp[0])) {
 		int opt = index_in_strings(options, arg);
 		if (opt == OPT_FOLLOW) {
-			recurse_flags |= ACTION_FOLLOWLINKS;
+			G.recurse_flags |= ACTION_FOLLOWLINKS | ACTION_DANGLING_OK;
 			argp[0] = (char*)"-a";
 		}
 #if ENABLE_FEATURE_FIND_XDEV
 		if (opt == OPT_XDEV) {
 			struct stat stbuf;
-			if (!xdev_count) {
-				xdev_count = firstopt - 1;
-				xdev_dev = xmalloc(xdev_count * sizeof(dev_t));
+			if (!G.xdev_count) {
+				G.xdev_count = firstopt - 1;
+				G.xdev_dev = xmalloc(G.xdev_count * sizeof(dev_t));
 				for (i = 1; i < firstopt; i++) {
 					/* not xstat(): shouldn't bomb out on
 					 * "find not_exist exist -xdev" */
 					if (stat(argv[i], &stbuf))
 						stbuf.st_dev = -1L;
-					xdev_dev[i-1] = stbuf.st_dev;
+					G.xdev_dev[i-1] = stbuf.st_dev;
 				}
 			}
 			argp[0] = (char*)"-a";
@@ -894,11 +908,11 @@ IF_FEATURE_FIND_MAXDEPTH(OPT_MINDEPTH,)
 		argp++;
 	}
 
-	actions = parse_params(&argv[firstopt]);
+	G.actions = parse_params(&argv[firstopt]);
 
 	for (i = 1; i < firstopt; i++) {
 		if (!recursive_action(argv[i],
-				recurse_flags,  /* flags */
+				G.recurse_flags,/* flags */
 				fileAction,     /* file action */
 				fileAction,     /* dir action */
 #if ENABLE_FEATURE_FIND_MAXDEPTH
diff -urpN busybox-1.15.1/include/libbb.h busybox-1.15.1-find/include/libbb.h
--- busybox-1.15.1/include/libbb.h	2009-09-12 17:55:58.000000000 +0200
+++ busybox-1.15.1-find/include/libbb.h	2009-09-30 02:20:21.000000000 +0200
@@ -286,7 +286,9 @@ enum {
 	ACTION_DEPTHFIRST     = (1 << 3),
 	/*ACTION_REVERSE      = (1 << 4), - unused */
 	ACTION_QUIET          = (1 << 5),
+	ACTION_DANGLING_OK    = (1 << 6),
 };
+typedef uint8_t recurse_flags_t;
 extern int recursive_action(const char *fileName, unsigned flags,
 	int FAST_FUNC (*fileAction)(const char *fileName, struct stat* statbuf, void* userData, int depth),
 	int FAST_FUNC (*dirAction)(const char *fileName, struct stat* statbuf, void* userData, int depth),
diff -urpN busybox-1.15.1/libbb/recursive_action.c busybox-1.15.1-find/libbb/recursive_action.c
--- busybox-1.15.1/libbb/recursive_action.c	2009-09-12 17:55:36.000000000 +0200
+++ busybox-1.15.1-find/libbb/recursive_action.c	2009-09-30 02:20:21.000000000 +0200
@@ -61,6 +61,7 @@ int FAST_FUNC recursive_action(const cha
 		unsigned depth)
 {
 	struct stat statbuf;
+	unsigned follow;
 	int status;
 	DIR *dir;
 	struct dirent *next;
@@ -68,14 +69,22 @@ int FAST_FUNC recursive_action(const cha
 	if (!fileAction) fileAction = true_action;
 	if (!dirAction) dirAction = true_action;
 
-	status = ACTION_FOLLOWLINKS; /* hijack a variable for bitmask... */
-	if (!depth)
-		status = ACTION_FOLLOWLINKS | ACTION_FOLLOWLINKS_L0;
-	status = ((flags & status) ? stat : lstat)(fileName, &statbuf);
+	follow = ACTION_FOLLOWLINKS;
+	if (depth == 0)
+		follow = ACTION_FOLLOWLINKS | ACTION_FOLLOWLINKS_L0;
+	follow &= flags;
+	status = (follow ? stat : lstat)(fileName, &statbuf);
 	if (status < 0) {
 #ifdef DEBUG_RECURS_ACTION
 		bb_error_msg("status=%d flags=%x", status, flags);
 #endif
+		if ((flags & ACTION_DANGLING_OK)
+		 && errno == ENOENT
+		 && lstat(fileName, &statbuf) == 0
+		) {
+			/* Dangling link */
+			return fileAction(fileName, &statbuf, userData, depth);
+		}
 		goto done_nak_warn;
 	}
 
Loading