- The modprobe-small implementation of rmmod no longer chdir's to
  "/lib/modules/`uname -r`" as it was not necessary for rmmod's
  operation. (And it no longer need to die if such modules directory
  doesn't exist.)
- Configs DEFAULT_MODULES_DIR and DEFAULT_DEPMOD_FILE no longer depend
  on MODPROBE_SMALL as the latter may not enable depmod or modprobe
  that requires these configs.
- Clarify DEFAULT_DEPMOD_FILE's description regarding the ".bb" name
  suffix.

Signed-off-by: Kang-Che Sung <[email protected]>
---
 modutils/Config.src       | 10 +++++++---
 modutils/modprobe-small.c | 36 +++++++++++++++++++++++++++++++-----
 2 files changed, 38 insertions(+), 8 deletions(-)

diff --git a/modutils/Config.src b/modutils/Config.src
index a15cce518..d0bae2ea3 100644
--- a/modutils/Config.src
+++ b/modutils/Config.src
@@ -159,7 +159,7 @@ config FEATURE_MODUTILS_SYMBOLS
 config DEFAULT_MODULES_DIR
        string "Default directory containing modules"
        default "/lib/modules"
-       depends on DEPMOD || MODPROBE || MODPROBE_SMALL || MODINFO
+       depends on DEPMOD || MODPROBE || MODINFO
        help
          Directory that contains kernel modules.
          Defaults to "/lib/modules"
@@ -167,9 +167,13 @@ config DEFAULT_MODULES_DIR
 config DEFAULT_DEPMOD_FILE
        string "Default name of modules.dep"
        default "modules.dep"
-       depends on DEPMOD || MODPROBE || MODPROBE_SMALL || MODINFO
+       depends on DEPMOD || MODPROBE || MODINFO
        help
          Filename that contains kernel modules dependencies.
-         Defaults to "modules.dep"
+         Defaults to "modules.dep".
+         If you configured the "simplified modutils" (MODPROBE_SMALL), a
+         ".bb" suffix will be added after this name. Do not specify ".bb"
+         here unless you intend your depmod or modprobe to work on
+         "modules.dep.bb.bb" or such.
 
 endmenu
diff --git a/modutils/modprobe-small.c b/modutils/modprobe-small.c
index 04242634b..a3ba846a7 100644
--- a/modutils/modprobe-small.c
+++ b/modutils/modprobe-small.c
@@ -84,6 +84,22 @@ int lsmod_main(int argc UNUSED_PARAM, char **argv 
UNUSED_PARAM)
 #define is_insmod   (ENABLE_INSMOD   && (ONLY_APPLET || applet_name[0] == 'i'))
 #define is_rmmod    (ENABLE_RMMOD    && (ONLY_APPLET || applet_name[0] == 'r'))
 
+/* Applets that need to chdir to /lib/modules/`uname -r` */
+/* Note: the last conditional is used when all 4 applets are configured, and
+ * employs an ASCII trick so that one check would suffice:
+ * 'm' -> 01101101
+ * 'd' -> 01100100
+ * 'i' -> 01101001
+ * 'r' -> 01110010    ('d' & 'm' & '\x1f') == '\x04' -> 00000100
+ *        .....^.. note this bit! */
+#define is_depmod_or_modprobe ((ENABLE_MODPROBE || ENABLE_DEPMOD) \
+       && ((!ENABLE_INSMOD && !ENABLE_RMMOD) \
+       || (!ENABLE_MODPROBE && applet_name[0] == 'd') \
+       || (!ENABLE_DEPMOD   && applet_name[0] == 'm') \
+       || (!ENABLE_INSMOD   && applet_name[0] != 'r') \
+       || (!ENABLE_RMMOD    && applet_name[0] != 'i') \
+       || ((applet_name[0] & ('d' & 'm' & '\x1f')) != 0)))
+
 enum {
        OPT_q = (1 << 0), /* be quiet */
        OPT_r = (1 << 1), /* module removal instead of loading */
@@ -923,23 +939,30 @@ The following options are useful for people managing 
distributions:
 int modprobe_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
 int modprobe_main(int argc UNUSED_PARAM, char **argv)
 {
+#if ENABLE_DEPMOD || ENABLE_MODPROBE
+       struct utsname uts;
+#endif
 #if ENABLE_MODPROBE || ENABLE_INSMOD || ENABLE_RMMOD
        int exitcode;
+# if ENABLE_FEATURE_CMDLINE_MODULE_OPTIONS
+       char *options = NULL;
+# endif
 #endif
-       struct utsname uts;
-       IF_FEATURE_CMDLINE_MODULE_OPTIONS(char *options = NULL;)
 
        INIT_G();
 
        /* Prevent ugly corner cases with no modules at all */
        modinfo = xzalloc(sizeof(modinfo[0]));
 
-       if (!is_insmod) {
+#if ENABLE_DEPMOD || ENABLE_MODPROBE
+       if (is_depmod_or_modprobe) {
                /* Goto modules directory */
                xchdir(CONFIG_DEFAULT_MODULES_DIR);
+               uname(&uts); /* never fails */
        }
-       uname(&uts); /* never fails */
+#endif
 
+#if ENABLE_DEPMOD
        /* depmod? */
        if (is_depmod) {
                /* Supported:
@@ -971,6 +994,7 @@ int modprobe_main(int argc UNUSED_PARAM, char **argv)
                process_module((char*)"/", NULL);
                return !wrote_dep_bb_ok;
        }
+#endif /* DEPMOD */
 
 #if ENABLE_MODPROBE || ENABLE_INSMOD || ENABLE_RMMOD
        /* modprobe, insmod, rmmod require at least one argument */
@@ -980,10 +1004,12 @@ int modprobe_main(int argc UNUSED_PARAM, char **argv)
        getopt32(argv, "qrfsvwb");
        argv += optind;
 
-       if (!is_insmod) {
+# if ENABLE_MODPROBE
+       if (is_modprobe) {
                /* Goto $VERSION directory */
                xchdir(uts.release);
        }
+# endif
 
        /* are we rmmod? -> simulate modprobe -r, but don't bother the flag if
         * there're no other applets here */
-- 
2.11.0

_______________________________________________
busybox mailing list
[email protected]
http://lists.busybox.net/mailman/listinfo/busybox

Reply via email to