Commit 229d0cfa authored by Masahiro Yamada's avatar Masahiro Yamada

kconfig: remove 'const' from the return type of sym_escape_string_value()

sym_escape_string_value() returns a malloc'ed memory, but as
(const char *). So, it must be casted to (void *) when it is free'd.
This is odd.

The return type of sym_escape_string_value() should be (char *).

I exploited that free(NULL) has no effect.
Signed-off-by: default avatarMasahiro Yamada <masahiroy@kernel.org>
parent 6988f70c
...@@ -647,17 +647,16 @@ static void check_conf(struct menu *menu) ...@@ -647,17 +647,16 @@ static void check_conf(struct menu *menu)
switch (input_mode) { switch (input_mode) {
case listnewconfig: case listnewconfig:
if (sym->name) { if (sym->name) {
const char *str; const char *val = sym_get_string_value(sym);
char *escaped = NULL;
if (sym->type == S_STRING) { if (sym->type == S_STRING) {
str = sym_get_string_value(sym); escaped = sym_escape_string_value(val);
str = sym_escape_string_value(str); val = escaped;
printf("%s%s=%s\n", CONFIG_, sym->name, str);
free((void *)str);
} else {
str = sym_get_string_value(sym);
printf("%s%s=%s\n", CONFIG_, sym->name, str);
} }
printf("%s%s=%s\n", CONFIG_, sym->name, val);
free(escaped);
} }
break; break;
case helpnewconfig: case helpnewconfig:
......
...@@ -728,21 +728,22 @@ static struct conf_printer header_printer_cb = ...@@ -728,21 +728,22 @@ static struct conf_printer header_printer_cb =
static void conf_write_symbol(FILE *fp, struct symbol *sym, static void conf_write_symbol(FILE *fp, struct symbol *sym,
struct conf_printer *printer, void *printer_arg) struct conf_printer *printer, void *printer_arg)
{ {
const char *str; const char *val;
char *escaped = NULL;
switch (sym->type) { if (sym->type == S_UNKNOWN)
case S_UNKNOWN: return;
break;
case S_STRING: val = sym_get_string_value(sym);
str = sym_get_string_value(sym);
str = sym_escape_string_value(str); if (sym->type == S_STRING) {
printer->print_symbol(fp, sym, str, printer_arg); escaped = sym_escape_string_value(val);
free((void *)str); val = escaped;
break;
default:
str = sym_get_string_value(sym);
printer->print_symbol(fp, sym, str, printer_arg);
} }
printer->print_symbol(fp, sym, val, printer_arg);
free(escaped);
} }
static void static void
......
...@@ -18,7 +18,7 @@ extern struct symbol * symbol_hash[SYMBOL_HASHSIZE]; ...@@ -18,7 +18,7 @@ extern struct symbol * symbol_hash[SYMBOL_HASHSIZE];
struct symbol * sym_lookup(const char *name, int flags); struct symbol * sym_lookup(const char *name, int flags);
struct symbol * sym_find(const char *name); struct symbol * sym_find(const char *name);
const char * sym_escape_string_value(const char *in); char *sym_escape_string_value(const char *in);
struct symbol ** sym_re_search(const char *pattern); struct symbol ** sym_re_search(const char *pattern);
const char * sym_type_name(enum symbol_type type); const char * sym_type_name(enum symbol_type type);
void sym_calc_value(struct symbol *sym); void sym_calc_value(struct symbol *sym);
......
...@@ -871,7 +871,8 @@ struct symbol *sym_find(const char *name) ...@@ -871,7 +871,8 @@ struct symbol *sym_find(const char *name)
return symbol; return symbol;
} }
const char *sym_escape_string_value(const char *in) /* The returned pointer must be freed on the caller side */
char *sym_escape_string_value(const char *in)
{ {
const char *p; const char *p;
size_t reslen; size_t reslen;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment