Commit 80f7bc77 authored by Masahiro Yamada's avatar Masahiro Yamada

kconfig: move sym_escape_string_value() to confdata.c

Now that sym_escape_string_value() is only used in confdata.c
it can be a 'static' function.

Rename it escape_string_value() because it is agnostic about
(struct sym *).
Signed-off-by: default avatarMasahiro Yamada <masahiroy@kernel.org>
parent 51d792cb
...@@ -620,6 +620,49 @@ static void conf_write_heading(FILE *fp, const struct comment_style *cs) ...@@ -620,6 +620,49 @@ static void conf_write_heading(FILE *fp, const struct comment_style *cs)
fprintf(fp, "%s\n", cs->postfix); fprintf(fp, "%s\n", cs->postfix);
} }
/* The returned pointer must be freed on the caller side */
static char *escape_string_value(const char *in)
{
const char *p;
char *out;
size_t len;
len = strlen(in) + strlen("\"\"") + 1;
p = in;
while (1) {
p += strcspn(p, "\"\\");
if (p[0] == '\0')
break;
len++;
p++;
}
out = xmalloc(len);
out[0] = '\0';
strcat(out, "\"");
p = in;
while (1) {
len = strcspn(p, "\"\\");
strncat(out, p, len);
p += len;
if (p[0] == '\0')
break;
strcat(out, "\\");
strncat(out, p++, 1);
}
strcat(out, "\"");
return out;
}
/* /*
* Kconfig configuration printer * Kconfig configuration printer
* *
...@@ -648,7 +691,7 @@ static void __print_symbol(FILE *fp, struct symbol *sym, enum output_n output_n, ...@@ -648,7 +691,7 @@ static void __print_symbol(FILE *fp, struct symbol *sym, enum output_n output_n,
} }
if (sym->type == S_STRING && escape_string) { if (sym->type == S_STRING && escape_string) {
escaped = sym_escape_string_value(val); escaped = escape_string_value(val);
val = escaped; val = escaped;
} }
...@@ -702,7 +745,7 @@ static void print_symbol_for_c(FILE *fp, struct symbol *sym) ...@@ -702,7 +745,7 @@ static void print_symbol_for_c(FILE *fp, struct symbol *sym)
val_prefix = "0x"; val_prefix = "0x";
break; break;
case S_STRING: case S_STRING:
escaped = sym_escape_string_value(val); escaped = escape_string_value(val);
val = escaped; val = escaped;
default: default:
break; break;
......
...@@ -18,7 +18,6 @@ extern struct symbol * symbol_hash[SYMBOL_HASHSIZE]; ...@@ -18,7 +18,6 @@ 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);
char *sym_escape_string_value(const char *in);
void print_symbol_for_listconfig(struct symbol *sym); void print_symbol_for_listconfig(struct symbol *sym);
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);
......
...@@ -871,50 +871,6 @@ struct symbol *sym_find(const char *name) ...@@ -871,50 +871,6 @@ struct symbol *sym_find(const char *name)
return symbol; return symbol;
} }
/* The returned pointer must be freed on the caller side */
char *sym_escape_string_value(const char *in)
{
const char *p;
size_t reslen;
char *res;
size_t l;
reslen = strlen(in) + strlen("\"\"") + 1;
p = in;
for (;;) {
l = strcspn(p, "\"\\");
p += l;
if (p[0] == '\0')
break;
reslen++;
p++;
}
res = xmalloc(reslen);
res[0] = '\0';
strcat(res, "\"");
p = in;
for (;;) {
l = strcspn(p, "\"\\");
strncat(res, p, l);
p += l;
if (p[0] == '\0')
break;
strcat(res, "\\");
strncat(res, p++, 1);
}
strcat(res, "\"");
return res;
}
struct sym_match { struct sym_match {
struct symbol *sym; struct symbol *sym;
off_t so, eo; off_t so, eo;
......
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