diff options
Diffstat (limited to 'package/busybox/busybox-1.14.0-depmod.patch')
-rw-r--r-- | package/busybox/busybox-1.14.0-depmod.patch | 90 |
1 files changed, 90 insertions, 0 deletions
diff --git a/package/busybox/busybox-1.14.0-depmod.patch b/package/busybox/busybox-1.14.0-depmod.patch new file mode 100644 index 000000000..c66aba34c --- /dev/null +++ b/package/busybox/busybox-1.14.0-depmod.patch @@ -0,0 +1,90 @@ +--- 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 |