Skip to content

Commit

Permalink
kconfig: refactor conf_write_autoconf()
Browse files Browse the repository at this point in the history
This function does similar for auto.conf and autoconf.h

Create __conf_write_autoconf() helper to factor out the common code.

Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
  • Loading branch information
Masahiro Yamada committed Oct 11, 2021
1 parent 8499f2d commit 57ddd07
Showing 1 changed file with 57 additions and 37 deletions.
94 changes: 57 additions & 37 deletions scripts/kconfig/confdata.c
Original file line number Diff line number Diff line change
Expand Up @@ -1058,13 +1058,53 @@ static int conf_touch_deps(void)
return 0;
}

static int __conf_write_autoconf(const char *filename,
void (*print_symbol)(FILE *, struct symbol *),
const struct comment_style *comment_style)
{
char tmp[PATH_MAX];
FILE *file;
struct symbol *sym;
int ret, i;

if (make_parent_dir(filename))
return -1;

ret = snprintf(tmp, sizeof(tmp), "%s.tmp", filename);
if (ret >= sizeof(tmp)) /* check truncation */
return -1;

file = fopen(tmp, "w");
if (!file) {
perror("fopen");
return -1;
}

conf_write_heading(file, comment_style);

for_all_symbols(i, sym)
if ((sym->flags & SYMBOL_WRITE) && sym->name)
print_symbol(file, sym);

/* check possible errors in conf_write_heading() and print_symbol() */
if (ferror(file))
return -1;

fclose(file);

if (rename(tmp, filename)) {
perror("rename");
return -1;
}

return 0;
}

int conf_write_autoconf(int overwrite)
{
struct symbol *sym;
const char *name;
const char *autoconf_name = conf_get_autoconfig_name();
FILE *out, *out_h;
int i;
int ret, i;

if (!overwrite && is_present(autoconf_name))
return 0;
Expand All @@ -1074,45 +1114,25 @@ int conf_write_autoconf(int overwrite)
if (conf_touch_deps())
return 1;

out = fopen(".tmpconfig", "w");
if (!out)
return 1;

out_h = fopen(".tmpconfig.h", "w");
if (!out_h) {
fclose(out);
return 1;
}

conf_write_heading(out, &comment_style_pound);
conf_write_heading(out_h, &comment_style_c);

for_all_symbols(i, sym) {
for_all_symbols(i, sym)
sym_calc_value(sym);
if (!(sym->flags & SYMBOL_WRITE) || !sym->name)
continue;

/* write symbols to auto.conf and autoconf.h */
print_symbol_for_autoconf(out, sym);
print_symbol_for_c(out_h, sym);
}
fclose(out);
fclose(out_h);

name = conf_get_autoheader_name();
if (make_parent_dir(name))
return 1;
if (rename(".tmpconfig.h", name))
return 1;
ret = __conf_write_autoconf(conf_get_autoheader_name(),
print_symbol_for_c,
&comment_style_c);
if (ret)
return ret;

if (make_parent_dir(autoconf_name))
return 1;
/*
* This must be the last step, kbuild has a dependency on auto.conf
* and this marks the successful completion of the previous steps.
* Create include/config/auto.conf. This must be the last step because
* Kbuild has a dependency on auto.conf and this marks the successful
* completion of the previous steps.
*/
if (rename(".tmpconfig", autoconf_name))
return 1;
ret = __conf_write_autoconf(conf_get_autoconfig_name(),
print_symbol_for_autoconf,
&comment_style_pound);
if (ret)
return ret;

return 0;
}
Expand Down

0 comments on commit 57ddd07

Please sign in to comment.