insmod: clarify module_name / file_name distinction
authorDenis Vlasenko <vda.linux@googlemail.com>
Sat, 22 Nov 2008 18:29:01 +0000 (18:29 -0000)
committerDenis Vlasenko <vda.linux@googlemail.com>
Sat, 22 Nov 2008 18:29:01 +0000 (18:29 -0000)
include/usage.h
modutils/insmod.c
modutils/modutils-24.c
modutils/modutils.h

index 5223e9e18bc9f9ec25c28828ad693c5a48aa8a39..49c94000bd274c2e8946e5b0f460730e4e189dea 100644 (file)
      "\ninotifyd waits for PROG to exit." \
      "\nWhen x event happens for all FILEs, inotifyd exits" \
 
+/* 2.6 style insmod has no options and required filename
+ * (not module name - .ko can't be omitted) */
 #define insmod_trivial_usage \
-       USE_FEATURE_2_4_MODULES("[OPTION]... ") "MODULE [symbol=value]..."
+       USE_FEATURE_2_4_MODULES("[OPTION]... MODULE ") \
+       SKIP_FEATURE_2_4_MODULES("FILE ") \
+       "[symbol=value]..."
 #define insmod_full_usage "\n\n" \
        "Load the specified kernel modules into the kernel" \
        USE_FEATURE_2_4_MODULES( "\n" \
index 61ee5009b9bee281e8eb1a6c1887b31eeec4d59c..4d211f50ce74a50b231e7cef5b9e3e56f7f9c10a 100644 (file)
@@ -16,9 +16,17 @@ int insmod_main(int argc UNUSED_PARAM, char **argv)
        char *filename;
        int rc;
 
+       /* Compat note:
+        * 2.6 style insmod has no options and required filename
+        * (not module name - .ko can't be omitted).
+        * 2.4 style insmod can take module name without .ko
+        * and performs module search in default directories
+        * or in $MODPATH.
+        */
+
        USE_FEATURE_2_4_MODULES(
                getopt32(argv, INSMOD_OPTS INSMOD_ARGS);
-               argv += optind-1;
+               argv += optind - 1;
        );
 
        filename = *++argv;
index ae0afd44c10f4e2389881140c6f706dae712944e..ecab193cec10f3836fe23c5d28c93b5a17476a7f 100644 (file)
@@ -3810,7 +3810,7 @@ static void print_load_map(struct obj_file *f UNUSED_PARAM)
 }
 #endif
 
-int FAST_FUNC bb_init_module_24(const char *m_filename, const char *options UNUSED_PARAM)
+int FAST_FUNC bb_init_module_24(const char *m_filename, const char *options)
 {
        int k_crcs;
        unsigned long m_size;
@@ -3906,13 +3906,13 @@ int FAST_FUNC bb_init_module_24(const char *m_filename, const char *options UNUS
 
        m_addr = create_module(m_name, m_size);
        if (m_addr == (ElfW(Addr))(-1)) switch (errno) {
-               case EEXIST:
-                       bb_error_msg_and_die("a module named %s already exists", m_name);
-               case ENOMEM:
-                       bb_error_msg_and_die("can't allocate kernel memory for module; needed %lu bytes",
-                                       m_size);
-               default:
-                       bb_perror_msg_and_die("create_module: %s", m_name);
+       case EEXIST:
+               bb_error_msg_and_die("a module named %s already exists", m_name);
+       case ENOMEM:
+               bb_error_msg_and_die("can't allocate kernel memory for module; needed %lu bytes",
+                               m_size);
+       default:
+               bb_perror_msg_and_die("create_module: %s", m_name);
        }
 
 #if !LOADBITS
index 32ee18b06df1fa6d930cba63290de6995ac60745..ddd4e1790cc7714b2dd1cb135b440cd91df468bd 100644 (file)
@@ -23,7 +23,7 @@ const char *moderror(int err) FAST_FUNC;
 llist_t *llist_find(llist_t *first, const char *str) FAST_FUNC;
 void replace(char *s, char what, char with) FAST_FUNC;
 char *replace_underscores(char *s) FAST_FUNC;
-int string_to_llist(char *string, llist_t **llist, const char *delim) FAST_FUNC ;
+int string_to_llist(char *string, llist_t **llist, const char *delim) FAST_FUNC;
 char *filename2modname(const char *filename, char *modname) FAST_FUNC;
 char *parse_cmdline_module_options(char **argv) FAST_FUNC;