| --- 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 |