mirror of
https://github.com/torvalds/linux.git
synced 2024-11-22 20:22:09 +00:00
kconfig: refactor conf_write_autoconf()
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>
This commit is contained in:
parent
8499f2dd57
commit
57ddd07c45
@ -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;
|
||||
@ -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);
|
||||
ret = __conf_write_autoconf(conf_get_autoheader_name(),
|
||||
print_symbol_for_c,
|
||||
&comment_style_c);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
name = conf_get_autoheader_name();
|
||||
if (make_parent_dir(name))
|
||||
return 1;
|
||||
if (rename(".tmpconfig.h", name))
|
||||
return 1;
|
||||
|
||||
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;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user