]> git.kernelconcepts.de Git - karo-tx-uboot.git/blobdiff - scripts/kconfig/confdata.c
ARM: keystone2: Cleanup PLL init code
[karo-tx-uboot.git] / scripts / kconfig / confdata.c
index f88d90f20228e8783b5ca39accc436140af7b3ff..9847ae6c894633ca824fdab144ee9d7a4da8d2bb 100644 (file)
 
 #include "lkc.h"
 
+struct conf_printer {
+       void (*print_symbol)(FILE *, struct symbol *, const char *, void *);
+       void (*print_comment)(FILE *, const char *, void *);
+};
+
 static void conf_warning(const char *fmt, ...)
        __attribute__ ((format (printf, 1, 2)));
 
@@ -59,6 +64,7 @@ static void conf_message(const char *fmt, ...)
        va_start(ap, fmt);
        if (conf_message_callback)
                conf_message_callback(fmt, ap);
+       va_end(ap);
 }
 
 const char *conf_get_configname(void)
@@ -155,18 +161,14 @@ static int conf_set_sym_val(struct symbol *sym, int def, int def_flags, char *p)
        case S_STRING:
                if (*p++ != '"')
                        break;
-               for (p2 = p; (p2 = strpbrk(p2, "\"\\")); p2++) {
-                       if (*p2 == '"') {
-                               *p2 = 0;
-                               break;
-                       }
-                       memmove(p2, p2 + 1, strlen(p2));
-               }
-               if (!p2) {
+               /* Last char has to be a '"' */
+               if (p[strlen(p) - 1] != '"') {
                        if (def != S_DEF_AUTO)
                                conf_warning("invalid string found");
                        return 1;
                }
+               /* Overwrite '"' with \0 for string termination */
+               p[strlen(p) - 1] = 0;
                /* fall through */
        case S_INT:
        case S_HEX:
@@ -624,6 +626,7 @@ static void conf_write_symbol(FILE *fp, struct symbol *sym,
                              struct conf_printer *printer, void *printer_arg)
 {
        const char *str;
+       char *str2;
 
        switch (sym->type) {
        case S_OTHER:
@@ -631,9 +634,10 @@ static void conf_write_symbol(FILE *fp, struct symbol *sym,
                break;
        case S_STRING:
                str = sym_get_string_value(sym);
-               str = sym_escape_string_value(str);
-               printer->print_symbol(fp, sym, str, printer_arg);
-               free((void *)str);
+               str2 = xmalloc(strlen(str) + 3);
+               sprintf(str2, "\"%s\"", str);
+               printer->print_symbol(fp, sym, str2, printer_arg);
+               free((void *)str2);
                break;
        default:
                str = sym_get_string_value(sym);