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;
|
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)
|
int conf_write_autoconf(int overwrite)
|
||||||
{
|
{
|
||||||
struct symbol *sym;
|
struct symbol *sym;
|
||||||
const char *name;
|
|
||||||
const char *autoconf_name = conf_get_autoconfig_name();
|
const char *autoconf_name = conf_get_autoconfig_name();
|
||||||
FILE *out, *out_h;
|
int ret, i;
|
||||||
int i;
|
|
||||||
|
|
||||||
if (!overwrite && is_present(autoconf_name))
|
if (!overwrite && is_present(autoconf_name))
|
||||||
return 0;
|
return 0;
|
||||||
@ -1074,45 +1114,25 @@ int conf_write_autoconf(int overwrite)
|
|||||||
if (conf_touch_deps())
|
if (conf_touch_deps())
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
out = fopen(".tmpconfig", "w");
|
for_all_symbols(i, sym)
|
||||||
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) {
|
|
||||||
sym_calc_value(sym);
|
sym_calc_value(sym);
|
||||||
if (!(sym->flags & SYMBOL_WRITE) || !sym->name)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
/* write symbols to auto.conf and autoconf.h */
|
ret = __conf_write_autoconf(conf_get_autoheader_name(),
|
||||||
print_symbol_for_autoconf(out, sym);
|
print_symbol_for_c,
|
||||||
print_symbol_for_c(out_h, sym);
|
&comment_style_c);
|
||||||
}
|
if (ret)
|
||||||
fclose(out);
|
return ret;
|
||||||
fclose(out_h);
|
|
||||||
|
|
||||||
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
|
* Create include/config/auto.conf. This must be the last step because
|
||||||
* and this marks the successful completion of the previous steps.
|
* Kbuild has a dependency on auto.conf and this marks the successful
|
||||||
|
* completion of the previous steps.
|
||||||
*/
|
*/
|
||||||
if (rename(".tmpconfig", autoconf_name))
|
ret = __conf_write_autoconf(conf_get_autoconfig_name(),
|
||||||
return 1;
|
print_symbol_for_autoconf,
|
||||||
|
&comment_style_pound);
|
||||||
|
if (ret)
|
||||||
|
return ret;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user