--- busybox-1.14.0/modutils/depmod.c	Tue Apr 14 01:42:55 2009
+++ busybox-1.14.0-depmod/modutils/depmod.c	Mon May 18 22:37:14 2009
@@ -40,26 +40,28 @@
 	ARG_r = (1<<6)  /* Compat dummy. Linux Makefile uses it */
 };
 
-static int FAST_FUNC parse_module(const char *fname, struct stat *sb,
-				  void *data, int UNUSED_PARAM depth)
+static int FAST_FUNC parse_module(const char *fname, struct stat *sb UNUSED_PARAM,
+				  void *data, int depth UNUSED_PARAM)
 {
+	char modname[MODULE_NAME_LEN];
 	module_info **first = (module_info **) data;
 	char *image, *ptr;
 	module_info *info;
-	size_t len = sb->st_size;
+	/* Arbitrary. Was sb->st_size, but that breaks .gz etc */
+	size_t len = (64*1024*1024 - 4096);
 
 	if (strrstr(fname, ".ko") == NULL)
 		return TRUE;
 
 	image = xmalloc_open_zipped_read_close(fname, &len);
-	info = xzalloc(sizeof(module_info));
+	info = xzalloc(sizeof(*info));
 
 	info->next = *first;
 	*first = info;
 
 	info->dnext = info->dprev = info;
 	info->name = xasprintf("/%s", fname);
-	info->modname = filename2modname(fname, NULL);
+	info->modname = xstrdup(filename2modname(fname, modname));
 	for (ptr = image; ptr < image + len - 10; ptr++) {
 		if (strncmp(ptr, "depends=", 8) == 0) {
 			char *u;
@@ -69,12 +71,14 @@
 				if (*u == '-')
 					*u = '_';
 			ptr += string_to_llist(ptr, &info->dependencies, ",");
-		} else if (ENABLE_FEATURE_MODUTILS_ALIAS &&
-			   strncmp(ptr, "alias=", 6) == 0) {
+		} else if (ENABLE_FEATURE_MODUTILS_ALIAS
+		 && strncmp(ptr, "alias=", 6) == 0
+		) {
 			llist_add_to(&info->aliases, xstrdup(ptr + 6));
 			ptr += strlen(ptr);
-		} else if (ENABLE_FEATURE_MODUTILS_SYMBOLS &&
-			   strncmp(ptr, "__ksymtab_", 10) == 0) {
+		} else if (ENABLE_FEATURE_MODUTILS_SYMBOLS
+		 && strncmp(ptr, "__ksymtab_", 10) == 0
+		) {
 			ptr += 10;
 			if (strncmp(ptr, "gpl", 3) == 0 ||
 			    strcmp(ptr, "strings") == 0)
@@ -199,10 +203,17 @@
 	if (!(option_mask32 & ARG_n))
 		xfreopen_write("modules.alias", stdout);
 	for (m = modules; m != NULL; m = m->next) {
+		const char *fname = bb_basename(m->name);
+		int fnlen = strchrnul(fname, '.') - fname;
 		while (m->aliases) {
-			printf("alias %s %s\n",
+			/* Last word can well be m->modname instead,
+			 * but depmod from module-init-tools 3.4
+			 * uses module basename, i.e., no s/-/_/g.
+			 * (pathname and .ko.* are still stripped)
+			 * Mimicking that... */
+			printf("alias %s %.*s\n",
 				(char*)llist_pop(&m->aliases),
-				m->modname);
+				fnlen, fname);
 		}
 	}
 #endif
@@ -210,10 +221,12 @@
 	if (!(option_mask32 & ARG_n))
 		xfreopen_write("modules.symbols", stdout);
 	for (m = modules; m != NULL; m = m->next) {
+		const char *fname = bb_basename(m->name);
+		int fnlen = strchrnul(fname, '.') - fname;
 		while (m->symbols) {
-			printf("alias symbol:%s %s\n",
+			printf("alias symbol:%s %.*s\n",
 				(char*)llist_pop(&m->symbols),
-				m->modname);
+				fnlen, fname);
 		}
 	}
 #endif
