--- busybox-1.13.2/modutils/depmod.c	Sun Nov  9 18:28:03 2008
+++ busybox-1.13.2-depmod/modutils/depmod.c	Mon Jan 12 23:12:59 2009
@@ -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",
