Index: patches/busybox-1.13.2-branch_update-2.patch
===================================================================
--- patches/busybox-1.13.2-branch_update-2.patch	(revision b36d112dc821ba9573902cb3904a4a1258251534)
+++ patches/busybox-1.13.2-branch_update-2.patch	(revision b36d112dc821ba9573902cb3904a4a1258251534)
@@ -0,0 +1,335 @@
+Submitted By: Jim Gifford (jim at cross-lfs dot org)
+Date: 02-03-2009
+Initial Package Version: 1.13.2
+Origin: Upstream
+Upstream Status: Applied
+Description: This is a branch update for busybox-1.13.2, and should be
+             rechecked periodically.
+
+diff -Naur busybox-1.13.2.orig/archival/tar.c busybox-1.13.2/archival/tar.c
+--- busybox-1.13.2.orig/archival/tar.c	2008-11-09 09:28:02.000000000 -0800
++++ busybox-1.13.2/archival/tar.c	2009-02-03 18:52:40.994695068 -0800
+@@ -591,8 +591,6 @@
+ 	struct TarBallInfo tbInfo;
+ 
+ 	tbInfo.hlInfoHead = NULL;
+-
+-	fchmod(tar_fd, 0644);
+ 	tbInfo.tarFd = tar_fd;
+ 	tbInfo.verboseFlag = verboseFlag;
+ 
+diff -Naur busybox-1.13.2.orig/init/init.c busybox-1.13.2/init/init.c
+--- busybox-1.13.2.orig/init/init.c	2008-12-30 19:06:45.000000000 -0800
++++ busybox-1.13.2/init/init.c	2009-02-03 18:52:38.186515155 -0800
+@@ -671,15 +671,14 @@
+  */
+ static void parse_inittab(void)
+ {
++#if ENABLE_FEATURE_USE_INITTAB
+ 	char *token[4];
+-	/* order must correspond to SYSINIT..RESTART constants */
+-	static const char actions[] ALIGN1 =
+-		"sysinit\0""respawn\0""askfirst\0""wait\0""once\0"
+-		"ctrlaltdel\0""shutdown\0""restart\0";
+-
+-	parser_t *parser = config_open2(INITTAB, fopen_for_read);
+-	/* No inittab file -- set up some default behavior */
+-	if (parser == NULL) {
++	parser_t *parser = config_open2("/etc/inittab", fopen_for_read);
++
++	if (parser == NULL)
++#endif
++	{
++		/* No inittab file -- set up some default behavior */
+ 		/* Reboot on Ctrl-Alt-Del */
+ 		new_init_action(CTRLALTDEL, "reboot", "");
+ 		/* Umount all filesystems on halt/reboot */
+@@ -699,11 +698,17 @@
+ 		new_init_action(SYSINIT, INIT_SCRIPT, "");
+ 		return;
+ 	}
++
++#if ENABLE_FEATURE_USE_INITTAB
+ 	/* optional_tty:ignored_runlevel:action:command
+ 	 * Delims are not to be collapsed and need exactly 4 tokens
+ 	 */
+ 	while (config_read(parser, token, 4, 0, "#:",
+ 				PARSE_NORMAL & ~(PARSE_TRIM | PARSE_COLLAPSE))) {
++		/* order must correspond to SYSINIT..RESTART constants */
++		static const char actions[] ALIGN1 =
++			"sysinit\0""respawn\0""askfirst\0""wait\0""once\0"
++			"ctrlaltdel\0""shutdown\0""restart\0";
+ 		int action;
+ 		char *tty = token[0];
+ 
+@@ -727,6 +732,7 @@
+ 				parser->lineno);
+ 	}
+ 	config_close(parser);
++#endif
+ }
+ 
+ #if ENABLE_FEATURE_USE_INITTAB
+diff -Naur busybox-1.13.2.orig/modutils/depmod.c busybox-1.13.2/modutils/depmod.c
+--- busybox-1.13.2.orig/modutils/depmod.c	2008-11-09 09:28:03.000000000 -0800
++++ busybox-1.13.2/modutils/depmod.c	2009-02-03 18:52:37.966500907 -0800
+@@ -33,7 +33,7 @@
+ enum {
+ 	ARG_a = (1<<0), /* All modules, ignore mods in argv */
+ 	ARG_A = (1<<1), /* Only emit .ko that are newer than modules.dep file */
+-	ARG_b = (1<<2), /* not /lib/modules/$(uname -r)/ but this base-dir */
++	ARG_b = (1<<2), /* base directory when modules are in staging area */
+ 	ARG_e = (1<<3), /* with -F, print unresolved symbols */
+ 	ARG_F = (1<<4), /* System.map that contains the symbols */
+ 	ARG_n = (1<<5)  /* dry-run, print to stdout only */
+@@ -57,7 +57,7 @@
+ 	*first = info;
+ 
+ 	info->dnext = info->dprev = info;
+-	info->name = xstrdup(fname);
++	info->name = xasprintf("/%s", fname);
+ 	info->modname = filename2modname(fname, NULL);
+ 	for (ptr = image; ptr < image + len - 10; ptr++) {
+ 		if (strncmp(ptr, "depends=", 8) == 0) {
+@@ -123,44 +123,61 @@
+ 	}
+ }
+ 
++static void xfreopen_write(const char *file, FILE *f)
++{
++	if (freopen(file, "w", f) == NULL)
++		bb_perror_msg_and_die("can't open '%s'", file);
++}
++
+ int depmod_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
+ int depmod_main(int argc UNUSED_PARAM, char **argv)
+ {
+ 	module_info *modules = NULL, *m, *dep;
+-	char *moddir_base = (char *)CONFIG_DEFAULT_MODULES_DIR;
++	const char *moddir_base = "/";
++	char *moddir, *version;
++	struct utsname uts;
+ 	int tmp;
+ 
+ 	getopt32(argv, "aAb:eF:n", &moddir_base, NULL);
+ 	argv += optind;
+ 
+ 	/* goto modules location */
++	xchdir(moddir_base);
+ 
+ 	/* If a version is provided, then that kernel version's module directory
+ 	 * is used, rather than the current kernel version (as returned by
+ 	 * "uname -r").  */
+-	xchdir(moddir_base);
+-	if (*argv && (sscanf(*argv, "%d.%d.%d", &tmp, &tmp, &tmp) == 3)) {
+-		xchdir(*argv++);
++	if (*argv && sscanf(*argv, "%d.%d.%d", &tmp, &tmp, &tmp) == 3) {
++		version = *argv++;
+ 	} else {
+-		struct utsname uts;
+ 		uname(&uts);
+-		xchdir(uts.release);
++		version = uts.release;
+ 	}
+-	/* If no modules are given on the command-line, -a is on per default.  */
+-	option_mask32 |= *argv == NULL;
++	moddir = concat_path_file(&CONFIG_DEFAULT_MODULES_DIR[1], version);
+ 
+ 	/* Scan modules */
+-	moddir_base = xrealloc_getcwd_or_warn(NULL);
+-	do {
+-		recursive_action((option_mask32 & ARG_a) ? moddir_base : *argv,
+-				ACTION_RECURSE, parse_module, NULL,  &modules, 0);
+-	} while (!(option_mask32 & ARG_a) && *(++argv));
++	if (*argv) {
++		char *modfile;
++		struct stat sb;
++		do {
++			modfile = concat_path_file(moddir, *argv);
++			xstat(modfile, &sb);
++			parse_module(modfile, &sb, &modules, 0);
++			free(modfile);
++		} while (*(++argv));
++	} else {
++		recursive_action(moddir, ACTION_RECURSE,
++				 parse_module, NULL, &modules, 0);
++	}
++
++	/* Prepare for writing out the dep files */
++	xchdir(moddir);
+ 	if (ENABLE_FEATURE_CLEAN_UP)
+-		free(moddir_base);
++		free(moddir);
+ 
+ 	/* Generate dependency and alias files */
+ 	if (!(option_mask32 & ARG_n))
+-		freopen(CONFIG_DEFAULT_DEPMOD_FILE, "w", stdout);
++		xfreopen_write(CONFIG_DEFAULT_DEPMOD_FILE, stdout);
+ 	for (m = modules; m != NULL; m = m->next) {
+ 		printf("%s:", m->name);
+ 
+@@ -174,12 +191,12 @@
+ 			dep->dprev->dnext = dep->dnext;
+ 			dep->dnext = dep->dprev = dep;
+ 		}
+-		puts("");
++		bb_putchar('\n');
+ 	}
+ 
+ #if ENABLE_FEATURE_MODUTILS_ALIAS
+ 	if (!(option_mask32 & ARG_n))
+-		freopen("modules.alias", "w", stdout);
++		xfreopen_write("modules.alias", stdout);
+ 	for (m = modules; m != NULL; m = m->next) {
+ 		while (m->aliases) {
+ 			printf("alias %s %s\n",
+@@ -190,7 +207,7 @@
+ #endif
+ #if ENABLE_FEATURE_MODUTILS_SYMBOLS
+ 	if (!(option_mask32 & ARG_n))
+-		freopen("modules.symbols", "w", stdout);
++		xfreopen_write("modules.symbols", stdout);
+ 	for (m = modules; m != NULL; m = m->next) {
+ 		while (m->symbols) {
+ 			printf("alias symbol:%s %s\n",
+diff -Naur busybox-1.13.2.orig/modutils/modutils-24.c busybox-1.13.2/modutils/modutils-24.c
+--- busybox-1.13.2.orig/modutils/modutils-24.c	2008-11-28 22:48:56.000000000 -0800
++++ busybox-1.13.2/modutils/modutils-24.c	2009-02-03 18:52:40.062637519 -0800
+@@ -2150,7 +2150,7 @@
+ 	sec->name = name;
+ 	sec->idx = newidx;
+ 	if (size)
+-		sec->contents = xmalloc(size);
++		sec->contents = xzalloc(size);
+ 
+ 	obj_insert_section_load_order(f, sec);
+ 
+@@ -2165,7 +2165,7 @@
+ 	int newidx = f->header.e_shnum++;
+ 	struct obj_section *sec;
+ 
+-	f->sections = xrealloc(f->sections, (newidx + 1) * sizeof(sec));
++	f->sections = xrealloc_vector(f->sections, 2, newidx);
+ 	f->sections[newidx] = sec = arch_new_section();
+ 
+ 	sec->header.sh_type = SHT_PROGBITS;
+@@ -2175,7 +2175,7 @@
+ 	sec->name = name;
+ 	sec->idx = newidx;
+ 	if (size)
+-		sec->contents = xmalloc(size);
++		sec->contents = xzalloc(size);
+ 
+ 	sec->load_next = f->load_order;
+ 	f->load_order = sec;
+@@ -2571,8 +2571,7 @@
+ 	/* Collect the modules' symbols.  */
+ 
+ 	if (nmod) {
+-		ext_modules = modules = xmalloc(nmod * sizeof(*modules));
+-		memset(modules, 0, nmod * sizeof(*modules));
++		ext_modules = modules = xzalloc(nmod * sizeof(*modules));
+ 		for (i = 0, mn = module_names, m = modules;
+ 				i < nmod; ++i, ++m, mn += strlen(mn) + 1) {
+ 			struct new_module_info info;
+@@ -2652,13 +2651,14 @@
+ }
+ 
+ 
+-static void  new_create_this_module(struct obj_file *f, const char *m_name)
++static void new_create_this_module(struct obj_file *f, const char *m_name)
+ {
+ 	struct obj_section *sec;
+ 
+ 	sec = obj_create_alloced_section_first(f, ".this", tgt_sizeof_long,
+ 			sizeof(struct new_module));
+-	memset(sec->contents, 0, sizeof(struct new_module));
++	/* done by obj_create_alloced_section_first: */
++	/*memset(sec->contents, 0, sizeof(struct new_module));*/
+ 
+ 	obj_add_symbol(f, SPFX "__this_module", -1,
+ 			ELF_ST_INFO(STB_LOCAL, STT_OBJECT), sec->idx, 0,
+@@ -2965,9 +2965,9 @@
+ 		if (i == f->header.e_shnum) {
+ 			struct obj_section *sec;
+ 
++			f->header.e_shnum++;
+ 			f->sections = xrealloc_vector(f->sections, 2, i);
+ 			f->sections[i] = sec = arch_new_section();
+-			f->header.e_shnum = i + 1;
+ 
+ 			sec->header.sh_type = SHT_PROGBITS;
+ 			sec->header.sh_flags = SHF_WRITE | SHF_ALLOC;
+@@ -3006,12 +3006,9 @@
+ 	for (i = 0; i < f->header.e_shnum; ++i) {
+ 		struct obj_section *s = f->sections[i];
+ 		if (s->header.sh_type == SHT_NOBITS) {
++			s->contents = NULL;
+ 			if (s->header.sh_size != 0)
+-				s->contents = memset(xmalloc(s->header.sh_size),
+-						0, s->header.sh_size);
+-			else
+-				s->contents = NULL;
+-
++				s->contents = xzalloc(s->header.sh_size);
+ 			s->header.sh_type = SHT_PROGBITS;
+ 		}
+ 	}
+@@ -3275,14 +3272,13 @@
+ 			case SHT_SYMTAB:
+ 			case SHT_STRTAB:
+ 			case SHT_RELM:
++				sec->contents = NULL;
+ 				if (sec->header.sh_size > 0) {
+-					sec->contents = xmalloc(sec->header.sh_size);
++					sec->contents = xzalloc(sec->header.sh_size);
+ 					fseek(fp, sec->header.sh_offset, SEEK_SET);
+ 					if (fread(sec->contents, sec->header.sh_size, 1, fp) != 1) {
+ 						bb_perror_msg_and_die("error reading ELF section data");
+ 					}
+-				} else {
+-					sec->contents = NULL;
+ 				}
+ 				break;
+ 
+diff -Naur busybox-1.13.2.orig/testsuite/mdev.tests busybox-1.13.2/testsuite/mdev.tests
+--- busybox-1.13.2.orig/testsuite/mdev.tests	2008-11-09 09:28:19.000000000 -0800
++++ busybox-1.13.2/testsuite/mdev.tests	2009-02-03 18:52:38.510535828 -0800
+@@ -111,6 +111,22 @@
+ 
+ # continuing to use directory structure from prev test
+ rm -rf mdev.testdir/dev/*
++echo "sda 0:0 644 =block/ @echo @echo TEST" >mdev.testdir/etc/mdev.conf
++testing "mdev move and command" \
++	"env - PATH=$PATH ACTION=add DEVPATH=/block/sda chroot mdev.testdir /mdev 2>&1;
++	ls -lnR mdev.testdir/dev | $FILTER_LS2" \
++"\
++@echo TEST
++mdev.testdir/dev:
++drwxr-xr-x 2 0 0 block
++
++mdev.testdir/dev/block:
++brw-r--r-- 1 0 0 sda
++" \
++	"" ""
++
++# continuing to use directory structure from prev test
++rm -rf mdev.testdir/dev/*
+ echo "@8,0 :1 644" >mdev.testdir/etc/mdev.conf
+ testing "mdev #maj,min and no explicit uid" \
+ 	"env - PATH=$PATH ACTION=add DEVPATH=/block/sda chroot mdev.testdir /mdev 2>&1;
+diff -Naur busybox-1.13.2.orig/util-linux/mdev.c busybox-1.13.2/util-linux/mdev.c
+--- busybox-1.13.2.orig/util-linux/mdev.c	2008-11-09 09:28:22.000000000 -0800
++++ busybox-1.13.2/util-linux/mdev.c	2009-02-03 18:52:38.510535828 -0800
+@@ -179,8 +179,9 @@
+ 			unsigned i, n;
+ #endif
+ 			char *a = val;
+-			s = strchr(val, ' ');
+-			val = (s && s[1]) ? s+1 : NULL;
++			s = strchrnul(val, ' ');
++			val = (s[0] && s[1]) ? s+1 : NULL;
++			s[0] = '\0';
+ #if ENABLE_FEATURE_MDEV_RENAME_REGEXP
+ 			/* substitute %1..9 with off[1..9], if any */
+ 			n = 0;
