diff options
author | Michal Marek <mmarek@suse.cz> | 2010-09-27 17:24:53 -0400 |
---|---|---|
committer | Michal Marek <mmarek@suse.cz> | 2010-09-27 17:24:53 -0400 |
commit | 0455029bea7da2a2a92003238c9617a36d5d48fd (patch) | |
tree | 5dd4935db441dd443f38846236a8b353c9a92da1 /scripts/kconfig/symbol.c | |
parent | 8c41e5e363db55d91aa3b1cdce4ab02ad9821de7 (diff) | |
parent | 838a2e55e6a4e9e8a10451ed2ef0f7a08dabdb04 (diff) |
Merge branch 'kbuild/kconfig/kbuild-generic-v7' of http://github.com/lacombar/linux-2.6 into kbuild/kconfig
* 'kbuild/kconfig/kbuild-generic-v7' of http://github.com/lacombar/linux-2.6:
kbuild: migrate all arch to the kconfig mainmenu upgrade
kconfig: expand file names
kconfig: use the file's name of sourced file
kconfig: constify file name
kconfig: don't emit warning upon rootmenu's prompt redefinition
kconfig: replace KERNELVERSION usage by the mainmenu's prompt
kconfig: delay gconf window initialization
kconfig: expand by default the rootmenu's prompt
kconfig: add a symbol string expansion helper
kconfig: regen parser
kconfig: implement the `mainmenu' directive
kconfig: allow PACKAGE to be defined on the compiler's command-line
kconfig: rephrase help texts/comments not to include the package name
kconfig: allow build-time definition of the internal config prefix
kconfig: rephrase help text not to mention the internal prefix
kconfig: replace a `switch()' statement by a more flexible `if()' statement
Diffstat (limited to 'scripts/kconfig/symbol.c')
-rw-r--r-- | scripts/kconfig/symbol.c | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/scripts/kconfig/symbol.c b/scripts/kconfig/symbol.c index 943712ca6c0a..dc5dcf2189a0 100644 --- a/scripts/kconfig/symbol.c +++ b/scripts/kconfig/symbol.c | |||
@@ -840,6 +840,55 @@ struct symbol *sym_find(const char *name) | |||
840 | return symbol; | 840 | return symbol; |
841 | } | 841 | } |
842 | 842 | ||
843 | /* | ||
844 | * Expand symbol's names embedded in the string given in argument. Symbols' | ||
845 | * name to be expanded shall be prefixed by a '$'. Unknown symbol expands to | ||
846 | * the empty string. | ||
847 | */ | ||
848 | const char *sym_expand_string_value(const char *in) | ||
849 | { | ||
850 | const char *src; | ||
851 | char *res; | ||
852 | size_t reslen; | ||
853 | |||
854 | reslen = strlen(in) + 1; | ||
855 | res = malloc(reslen); | ||
856 | res[0] = '\0'; | ||
857 | |||
858 | while ((src = strchr(in, '$'))) { | ||
859 | char *p, name[SYMBOL_MAXLENGTH]; | ||
860 | const char *symval = ""; | ||
861 | struct symbol *sym; | ||
862 | size_t newlen; | ||
863 | |||
864 | strncat(res, in, src - in); | ||
865 | src++; | ||
866 | |||
867 | p = name; | ||
868 | while (isalnum(*src) || *src == '_') | ||
869 | *p++ = *src++; | ||
870 | *p = '\0'; | ||
871 | |||
872 | sym = sym_find(name); | ||
873 | if (sym != NULL) { | ||
874 | sym_calc_value(sym); | ||
875 | symval = sym_get_string_value(sym); | ||
876 | } | ||
877 | |||
878 | newlen = strlen(res) + strlen(symval) + strlen(src); | ||
879 | if (newlen > reslen) { | ||
880 | reslen = newlen; | ||
881 | realloc(res, reslen); | ||
882 | } | ||
883 | |||
884 | strcat(res, symval); | ||
885 | in = src; | ||
886 | } | ||
887 | strcat(res, in); | ||
888 | |||
889 | return res; | ||
890 | } | ||
891 | |||
843 | struct symbol **sym_re_search(const char *pattern) | 892 | struct symbol **sym_re_search(const char *pattern) |
844 | { | 893 | { |
845 | struct symbol *sym, **sym_arr = NULL; | 894 | struct symbol *sym, **sym_arr = NULL; |