kconfig: code refactoring in confdata.c
Add a a few local functions to avoid some code duplication No functional changes. Signed-off-by: Sam Ravnborg <sam@ravnborg.org> Signed-off-by: Michal Marek <mmarek@suse.cz>
This commit is contained in:
parent
c252147de6
commit
49192f266f
|
@ -399,15 +399,73 @@ int conf_read(const char *name)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Write a S_STRING */
|
||||||
|
static void conf_write_string(bool headerfile, const char *name,
|
||||||
|
const char *str, FILE *out)
|
||||||
|
{
|
||||||
|
int l;
|
||||||
|
if (headerfile)
|
||||||
|
fprintf(out, "#define CONFIG_%s \"", name);
|
||||||
|
else
|
||||||
|
fprintf(out, "CONFIG_%s=\"", name);
|
||||||
|
|
||||||
|
while (1) {
|
||||||
|
l = strcspn(str, "\"\\");
|
||||||
|
if (l) {
|
||||||
|
fwrite(str, l, 1, out);
|
||||||
|
str += l;
|
||||||
|
}
|
||||||
|
if (!*str)
|
||||||
|
break;
|
||||||
|
fprintf(out, "\\%c", *str++);
|
||||||
|
}
|
||||||
|
fputs("\"\n", out);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void conf_write_symbol(struct symbol *sym, enum symbol_type type,
|
||||||
|
FILE *out, bool write_no)
|
||||||
|
{
|
||||||
|
const char *str;
|
||||||
|
|
||||||
|
switch (type) {
|
||||||
|
case S_BOOLEAN:
|
||||||
|
case S_TRISTATE:
|
||||||
|
switch (sym_get_tristate_value(sym)) {
|
||||||
|
case no:
|
||||||
|
if (write_no)
|
||||||
|
fprintf(out, "# CONFIG_%s is not set\n", sym->name);
|
||||||
|
break;
|
||||||
|
case mod:
|
||||||
|
fprintf(out, "CONFIG_%s=m\n", sym->name);
|
||||||
|
break;
|
||||||
|
case yes:
|
||||||
|
fprintf(out, "CONFIG_%s=y\n", sym->name);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case S_STRING:
|
||||||
|
conf_write_string(false, sym->name, sym_get_string_value(sym), out);
|
||||||
|
break;
|
||||||
|
case S_HEX:
|
||||||
|
case S_INT:
|
||||||
|
str = sym_get_string_value(sym);
|
||||||
|
fprintf(out, "CONFIG_%s=%s\n", sym->name, str);
|
||||||
|
break;
|
||||||
|
case S_OTHER:
|
||||||
|
case S_UNKNOWN:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
int conf_write(const char *name)
|
int conf_write(const char *name)
|
||||||
{
|
{
|
||||||
FILE *out;
|
FILE *out;
|
||||||
struct symbol *sym;
|
struct symbol *sym;
|
||||||
struct menu *menu;
|
struct menu *menu;
|
||||||
const char *basename;
|
const char *basename;
|
||||||
char dirname[128], tmpname[128], newname[128];
|
|
||||||
int type, l;
|
|
||||||
const char *str;
|
const char *str;
|
||||||
|
char dirname[128], tmpname[128], newname[128];
|
||||||
|
enum symbol_type type;
|
||||||
time_t now;
|
time_t now;
|
||||||
int use_timestamp = 1;
|
int use_timestamp = 1;
|
||||||
char *env;
|
char *env;
|
||||||
|
@ -487,50 +545,11 @@ int conf_write(const char *name)
|
||||||
if (modules_sym->curr.tri == no)
|
if (modules_sym->curr.tri == no)
|
||||||
type = S_BOOLEAN;
|
type = S_BOOLEAN;
|
||||||
}
|
}
|
||||||
switch (type) {
|
/* Write config symbol to file */
|
||||||
case S_BOOLEAN:
|
conf_write_symbol(sym, type, out, true);
|
||||||
case S_TRISTATE:
|
|
||||||
switch (sym_get_tristate_value(sym)) {
|
|
||||||
case no:
|
|
||||||
fprintf(out, "# CONFIG_%s is not set\n", sym->name);
|
|
||||||
break;
|
|
||||||
case mod:
|
|
||||||
fprintf(out, "CONFIG_%s=m\n", sym->name);
|
|
||||||
break;
|
|
||||||
case yes:
|
|
||||||
fprintf(out, "CONFIG_%s=y\n", sym->name);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case S_STRING:
|
|
||||||
str = sym_get_string_value(sym);
|
|
||||||
fprintf(out, "CONFIG_%s=\"", sym->name);
|
|
||||||
while (1) {
|
|
||||||
l = strcspn(str, "\"\\");
|
|
||||||
if (l) {
|
|
||||||
fwrite(str, l, 1, out);
|
|
||||||
str += l;
|
|
||||||
}
|
|
||||||
if (!*str)
|
|
||||||
break;
|
|
||||||
fprintf(out, "\\%c", *str++);
|
|
||||||
}
|
|
||||||
fputs("\"\n", out);
|
|
||||||
break;
|
|
||||||
case S_HEX:
|
|
||||||
str = sym_get_string_value(sym);
|
|
||||||
if (str[0] != '0' || (str[1] != 'x' && str[1] != 'X')) {
|
|
||||||
fprintf(out, "CONFIG_%s=%s\n", sym->name, str);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case S_INT:
|
|
||||||
str = sym_get_string_value(sym);
|
|
||||||
fprintf(out, "CONFIG_%s=%s\n", sym->name, str);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
next:
|
next:
|
||||||
if (menu->list) {
|
if (menu->list) {
|
||||||
menu = menu->list;
|
menu = menu->list;
|
||||||
continue;
|
continue;
|
||||||
|
@ -682,7 +701,7 @@ int conf_write_autoconf(void)
|
||||||
const char *name;
|
const char *name;
|
||||||
FILE *out, *tristate, *out_h;
|
FILE *out, *tristate, *out_h;
|
||||||
time_t now;
|
time_t now;
|
||||||
int i, l;
|
int i;
|
||||||
|
|
||||||
sym_clear_all_valid();
|
sym_clear_all_valid();
|
||||||
|
|
||||||
|
@ -732,6 +751,11 @@ int conf_write_autoconf(void)
|
||||||
sym_calc_value(sym);
|
sym_calc_value(sym);
|
||||||
if (!(sym->flags & SYMBOL_WRITE) || !sym->name)
|
if (!(sym->flags & SYMBOL_WRITE) || !sym->name)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
/* write symbol to config file */
|
||||||
|
conf_write_symbol(sym, sym->type, out, false);
|
||||||
|
|
||||||
|
/* update autoconf and tristate files */
|
||||||
switch (sym->type) {
|
switch (sym->type) {
|
||||||
case S_BOOLEAN:
|
case S_BOOLEAN:
|
||||||
case S_TRISTATE:
|
case S_TRISTATE:
|
||||||
|
@ -739,12 +763,10 @@ int conf_write_autoconf(void)
|
||||||
case no:
|
case no:
|
||||||
break;
|
break;
|
||||||
case mod:
|
case mod:
|
||||||
fprintf(out, "CONFIG_%s=m\n", sym->name);
|
|
||||||
fprintf(tristate, "CONFIG_%s=M\n", sym->name);
|
fprintf(tristate, "CONFIG_%s=M\n", sym->name);
|
||||||
fprintf(out_h, "#define CONFIG_%s_MODULE 1\n", sym->name);
|
fprintf(out_h, "#define CONFIG_%s_MODULE 1\n", sym->name);
|
||||||
break;
|
break;
|
||||||
case yes:
|
case yes:
|
||||||
fprintf(out, "CONFIG_%s=y\n", sym->name);
|
|
||||||
if (sym->type == S_TRISTATE)
|
if (sym->type == S_TRISTATE)
|
||||||
fprintf(tristate, "CONFIG_%s=Y\n",
|
fprintf(tristate, "CONFIG_%s=Y\n",
|
||||||
sym->name);
|
sym->name);
|
||||||
|
@ -753,35 +775,16 @@ int conf_write_autoconf(void)
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case S_STRING:
|
case S_STRING:
|
||||||
str = sym_get_string_value(sym);
|
conf_write_string(true, sym->name, sym_get_string_value(sym), out_h);
|
||||||
fprintf(out, "CONFIG_%s=\"", sym->name);
|
|
||||||
fprintf(out_h, "#define CONFIG_%s \"", sym->name);
|
|
||||||
while (1) {
|
|
||||||
l = strcspn(str, "\"\\");
|
|
||||||
if (l) {
|
|
||||||
fwrite(str, l, 1, out);
|
|
||||||
fwrite(str, l, 1, out_h);
|
|
||||||
str += l;
|
|
||||||
}
|
|
||||||
if (!*str)
|
|
||||||
break;
|
|
||||||
fprintf(out, "\\%c", *str);
|
|
||||||
fprintf(out_h, "\\%c", *str);
|
|
||||||
str++;
|
|
||||||
}
|
|
||||||
fputs("\"\n", out);
|
|
||||||
fputs("\"\n", out_h);
|
|
||||||
break;
|
break;
|
||||||
case S_HEX:
|
case S_HEX:
|
||||||
str = sym_get_string_value(sym);
|
str = sym_get_string_value(sym);
|
||||||
if (str[0] != '0' || (str[1] != 'x' && str[1] != 'X')) {
|
if (str[0] != '0' || (str[1] != 'x' && str[1] != 'X')) {
|
||||||
fprintf(out, "CONFIG_%s=%s\n", sym->name, str);
|
|
||||||
fprintf(out_h, "#define CONFIG_%s 0x%s\n", sym->name, str);
|
fprintf(out_h, "#define CONFIG_%s 0x%s\n", sym->name, str);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case S_INT:
|
case S_INT:
|
||||||
str = sym_get_string_value(sym);
|
str = sym_get_string_value(sym);
|
||||||
fprintf(out, "CONFIG_%s=%s\n", sym->name, str);
|
|
||||||
fprintf(out_h, "#define CONFIG_%s %s\n", sym->name, str);
|
fprintf(out_h, "#define CONFIG_%s %s\n", sym->name, str);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
|
Loading…
Reference in New Issue