modpost: move *.mod.c generation to write_mod_c_files()
authorMasahiro Yamada <masahiroy@kernel.org>
Thu, 5 May 2022 07:22:33 +0000 (16:22 +0900)
committerMasahiro Yamada <masahiroy@kernel.org>
Wed, 11 May 2022 12:46:38 +0000 (21:46 +0900)
A later commit will add more code to this list_for_each_entry loop.

Before that, move the loop body into a separate helper function.

Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
Reviewed-by: Nicolas Schier <nicolas@fjasle.eu>
Tested-by: Nathan Chancellor <nathan@kernel.org>
scripts/mod/modpost.c

index 8cc3863..d9efbd5 100644 (file)
@@ -2390,6 +2390,34 @@ static void write_if_changed(struct buffer *b, const char *fname)
        write_buf(b, fname);
 }
 
+/* do sanity checks, and generate *.mod.c file */
+static void write_mod_c_file(struct module *mod)
+{
+       struct buffer buf = { };
+       char fname[PATH_MAX];
+       int ret;
+
+       check_modname_len(mod);
+       check_exports(mod);
+
+       add_header(&buf, mod);
+       add_versions(&buf, mod);
+       add_depends(&buf, mod);
+       add_moddevtable(&buf, mod);
+       add_srcversion(&buf, mod);
+
+       ret = snprintf(fname, sizeof(fname), "%s.mod.c", mod->name);
+       if (ret >= sizeof(fname)) {
+               error("%s: too long path was truncated\n", fname);
+               goto free;
+       }
+
+       write_if_changed(&buf, fname);
+
+free:
+       free(buf.p);
+}
+
 /* parse Module.symvers file. line format:
  * 0x12345678<tab>symbol<tab>module<tab>export<tab>namespace
  **/
@@ -2494,7 +2522,6 @@ struct dump_list {
 int main(int argc, char **argv)
 {
        struct module *mod;
-       struct buffer buf = { };
        char *missing_namespace_deps = NULL;
        char *dump_write = NULL, *files_source = NULL;
        int opt;
@@ -2557,30 +2584,11 @@ int main(int argc, char **argv)
                read_symbols_from_files(files_source);
 
        list_for_each_entry(mod, &modules, list) {
-               char fname[PATH_MAX];
-               int ret;
-
-               if (mod->is_vmlinux || mod->from_dump)
-                       continue;
-
-               buf.pos = 0;
-
-               check_modname_len(mod);
-               check_exports(mod);
-
-               add_header(&buf, mod);
-               add_versions(&buf, mod);
-               add_depends(&buf, mod);
-               add_moddevtable(&buf, mod);
-               add_srcversion(&buf, mod);
-
-               ret = snprintf(fname, sizeof(fname), "%s.mod.c", mod->name);
-               if (ret >= sizeof(fname)) {
-                       error("%s: too long path was truncated\n", fname);
+               if (mod->from_dump)
                        continue;
-               }
 
-               write_if_changed(&buf, fname);
+               if (!mod->is_vmlinux)
+                       write_mod_c_file(mod);
        }
 
        if (missing_namespace_deps)
@@ -2606,7 +2614,5 @@ int main(int argc, char **argv)
                warn("suppressed %u unresolved symbol warnings because there were too many)\n",
                     nr_unresolved - MAX_UNRESOLVED_REPORTS);
 
-       free(buf.p);
-
        return error_occurred ? 1 : 0;
 }