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.
Unified · Split
| @@ -2390,6 +2390,34 @@ static void write_if_changed(struct buffer *b, const char *fname) · 2389 unmodified lines | ||
| 2390 | 2390 | write_buf(b, fname); |
| 2391 | 2391 | } |
| 2392 | 2392 | |
| 2393 | +/* do sanity checks, and generate *.mod.c file */ | |
| 2394 | +static void write_mod_c_file(struct module *mod) | |
| 2395 | +{ | |
| 2396 | + struct buffer buf = { }; | |
| 2397 | + char fname[PATH_MAX]; | |
| 2398 | + int ret; | |
| 2399 | + | |
| 2400 | + check_modname_len(mod); | |
| 2401 | + check_exports(mod); | |
| 2402 | + | |
| 2403 | + add_header(&buf, mod); | |
| 2404 | + add_versions(&buf, mod); | |
| 2405 | + add_depends(&buf, mod); | |
| 2406 | + add_moddevtable(&buf, mod); | |
| 2407 | + add_srcversion(&buf, mod); | |
| 2408 | + | |
| 2409 | + ret = snprintf(fname, sizeof(fname), "%s.mod.c", mod->name); | |
| 2410 | + if (ret >= sizeof(fname)) { | |
| 2411 | + error("%s: too long path was truncated\n", fname); | |
| 2412 | + goto free; | |
| 2413 | + } | |
| 2414 | + | |
| 2415 | + write_if_changed(&buf, fname); | |
| 2416 | + | |
| 2417 | +free: | |
| 2418 | + free(buf.p); | |
| 2419 | +} | |
| 2420 | + | |
| 2393 | 2421 | /* parse Module.symvers file. line format: |
| 2394 | 2422 | * 0x12345678<tab>symbol<tab>module<tab>export<tab>namespace |
| 2395 | 2423 | **/ |
| @@ -2494,7 +2522,6 @@ struct dump_list { · 98 unmodified lines | ||
| 2494 | 2522 | int main(int argc, char **argv) |
| 2495 | 2523 | { |
| 2496 | 2524 | struct module *mod; |
| 2497 | − struct buffer buf = { }; | |
| 2498 | 2525 | char *missing_namespace_deps = NULL; |
| 2499 | 2526 | char *dump_write = NULL, *files_source = NULL; |
| 2500 | 2527 | int opt; |
| @@ -2557,30 +2584,11 @@ int main(int argc, char **argv) · 56 unmodified lines | ||
| 2557 | 2584 | read_symbols_from_files(files_source); |
| 2558 | 2585 | |
| 2559 | 2586 | list_for_each_entry(mod, &modules, list) { |
| 2560 | − char fname[PATH_MAX]; | |
| 2561 | − int ret; | |
| 2562 | − | |
| 2563 | − if (mod->is_vmlinux || mod->from_dump) | |
| 2564 | − continue; | |
| 2565 | − | |
| 2566 | − buf.pos = 0; | |
| 2567 | − | |
| 2568 | − check_modname_len(mod); | |
| 2569 | − check_exports(mod); | |
| 2570 | − | |
| 2571 | − add_header(&buf, mod); | |
| 2572 | − add_versions(&buf, mod); | |
| 2573 | − add_depends(&buf, mod); | |
| 2574 | − add_moddevtable(&buf, mod); | |
| 2575 | − add_srcversion(&buf, mod); | |
| 2576 | − | |
| 2577 | − ret = snprintf(fname, sizeof(fname), "%s.mod.c", mod->name); | |
| 2578 | − if (ret >= sizeof(fname)) { | |
| 2579 | − error("%s: too long path was truncated\n", fname); | |
| 2587 | + if (mod->from_dump) | |
| 2580 | 2588 | continue; |
| 2581 | − } | |
| 2582 | 2589 | |
| 2583 | − write_if_changed(&buf, fname); | |
| 2590 | + if (!mod->is_vmlinux) | |
| 2591 | + write_mod_c_file(mod); | |
| 2584 | 2592 | } |
| 2585 | 2593 | |
| 2586 | 2594 | if (missing_namespace_deps) |
| @@ -2606,7 +2614,5 @@ int main(int argc, char **argv) · 19 unmodified lines | ||
| 2606 | 2614 | warn("suppressed %u unresolved symbol warnings because there were too many)\n", |
| 2607 | 2615 | nr_unresolved - MAX_UNRESOLVED_REPORTS); |
| 2608 | 2616 | |
| 2609 | − free(buf.p); | |
| 2610 | − | |
| 2611 | 2617 | return error_occurred ? 1 : 0; |
| 2612 | 2618 | } |