diff options
Diffstat (limited to 'scripts/kconfig/symbol.c')
| -rw-r--r-- | scripts/kconfig/symbol.c | 47 | 
1 files changed, 45 insertions, 2 deletions
diff --git a/scripts/kconfig/symbol.c b/scripts/kconfig/symbol.c index a796c95fe8a0..071f00c3046e 100644 --- a/scripts/kconfig/symbol.c +++ b/scripts/kconfig/symbol.c @@ -9,7 +9,6 @@  #include <regex.h>  #include <sys/utsname.h> -#define LKC_DIRECT_LINK  #include "lkc.h"  struct symbol symbol_yes = { @@ -751,7 +750,8 @@ const char *sym_get_string_value(struct symbol *sym)  		case no:  			return "n";  		case mod: -			return "m"; +			sym_calc_value(modules_sym); +			return (modules_sym->curr.tri == no) ? "n" : "m";  		case yes:  			return "y";  		} @@ -893,6 +893,49 @@ const char *sym_expand_string_value(const char *in)  	return res;  } +const 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 = malloc(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 symbol **sym_re_search(const char *pattern)  {  	struct symbol *sym, **sym_arr = NULL;  |