modprobe-small: make insmod command line compatible
function old new delta modprobe_main 326 435 +109 moderror - 52 +52 process_module 577 530 -47
This commit is contained in:
parent
4acb1b0793
commit
1c781cc8ff
@ -599,7 +599,7 @@ static void process_module(char *name, const char *cmdline_options)
|
|||||||
}
|
}
|
||||||
free(deps);
|
free(deps);
|
||||||
|
|
||||||
/* insmod -> load it */
|
/* modprobe -> load it */
|
||||||
if (!is_rmmod && !strstr(options, "blacklist")) {
|
if (!is_rmmod && !strstr(options, "blacklist")) {
|
||||||
errno = 0;
|
errno = 0;
|
||||||
if (load_module(info->pathname, options) != 0) {
|
if (load_module(info->pathname, options) != 0) {
|
||||||
@ -688,8 +688,10 @@ int modprobe_main(int argc UNUSED_PARAM, char **argv)
|
|||||||
/* Prevent ugly corner cases with no modules at all */
|
/* Prevent ugly corner cases with no modules at all */
|
||||||
modinfo = xzalloc(sizeof(modinfo[0]));
|
modinfo = xzalloc(sizeof(modinfo[0]));
|
||||||
|
|
||||||
/* Goto modules directory */
|
if ('i' != applet0) { /* not insmod */
|
||||||
xchdir(CONFIG_DEFAULT_MODULES_DIR);
|
/* Goto modules directory */
|
||||||
|
xchdir(CONFIG_DEFAULT_MODULES_DIR);
|
||||||
|
}
|
||||||
uname(&uts); /* never fails */
|
uname(&uts); /* never fails */
|
||||||
|
|
||||||
/* depmod? */
|
/* depmod? */
|
||||||
@ -736,8 +738,10 @@ int modprobe_main(int argc UNUSED_PARAM, char **argv)
|
|||||||
option_mask32 |= OPT_r;
|
option_mask32 |= OPT_r;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Goto $VERSION directory */
|
if ('i' != applet0) { /* not insmod */
|
||||||
xchdir(uts.release);
|
/* Goto $VERSION directory */
|
||||||
|
xchdir(uts.release);
|
||||||
|
}
|
||||||
|
|
||||||
#if ENABLE_FEATURE_MODPROBE_SMALL_OPTIONS_ON_CMDLINE
|
#if ENABLE_FEATURE_MODPROBE_SMALL_OPTIONS_ON_CMDLINE
|
||||||
/* If not rmmod, parse possible module options given on command line.
|
/* If not rmmod, parse possible module options given on command line.
|
||||||
@ -758,11 +762,26 @@ int modprobe_main(int argc UNUSED_PARAM, char **argv)
|
|||||||
argv[1] = NULL;
|
argv[1] = NULL;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
if ('i' == applet0) { /* insmod */
|
||||||
|
size_t len;
|
||||||
|
void *map;
|
||||||
|
|
||||||
|
len = MAXINT(ssize_t);
|
||||||
|
map = xmalloc_xopen_read_close(*argv, &len);
|
||||||
|
if (init_module(map, len,
|
||||||
|
USE_FEATURE_MODPROBE_SMALL_OPTIONS_ON_CMDLINE(options ? options : "")
|
||||||
|
SKIP_FEATURE_MODPROBE_SMALL_OPTIONS_ON_CMDLINE("")
|
||||||
|
) != 0)
|
||||||
|
bb_error_msg_and_die("cannot insert '%s': %s",
|
||||||
|
*argv, moderror(errno));
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
/* Try to load modprobe.dep.bb */
|
/* Try to load modprobe.dep.bb */
|
||||||
load_dep_bb();
|
load_dep_bb();
|
||||||
|
|
||||||
/* Load/remove modules.
|
/* Load/remove modules.
|
||||||
* Only rmmod loops here, insmod/modprobe has only argv[0] */
|
* Only rmmod loops here, modprobe has only argv[0] */
|
||||||
do {
|
do {
|
||||||
process_module(*argv++, options);
|
process_module(*argv++, options);
|
||||||
} while (*argv);
|
} while (*argv);
|
||||||
|
@ -20,7 +20,9 @@
|
|||||||
#include <linux/if_ether.h>
|
#include <linux/if_ether.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if !ENABLE_WERROR
|
||||||
#warning de-bloat
|
#warning de-bloat
|
||||||
|
#endif
|
||||||
/* Before re-enabling this, please (1) conditionalize exotic protocols
|
/* Before re-enabling this, please (1) conditionalize exotic protocols
|
||||||
* on CONFIG_something, and (2) decouple strings and numbers
|
* on CONFIG_something, and (2) decouple strings and numbers
|
||||||
* (use llproto_ids[] = n,n,n..; and llproto_names[] = "loop\0" "pup\0" ...;)
|
* (use llproto_ids[] = n,n,n..; and llproto_names[] = "loop\0" "pup\0" ...;)
|
||||||
|
Loading…
Reference in New Issue
Block a user