From patchwork Tue Mar 27 05:29:17 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Masahiro Yamada X-Patchwork-Id: 132455 Delivered-To: patch@linaro.org Received: by 10.46.84.29 with SMTP id i29csp4655973ljb; Mon, 26 Mar 2018 22:35:58 -0700 (PDT) X-Google-Smtp-Source: AG47ELvNvhLhDaj7K1nLxzEEpxSJ53wrMrgHoMkzhr+Pkx1CfiHMftmbF8wXdFjg+1kz04D4RBeV X-Received: by 10.99.107.9 with SMTP id g9mr30201354pgc.3.1522128957951; Mon, 26 Mar 2018 22:35:57 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1522128957; cv=none; d=google.com; s=arc-20160816; b=XzXxjx2oTqtmKCL6x2BejqQ8BcVacHKQiTFdoS5MksPRqlVAaNQJAFTtxnxL8MsDSP VMZ737u/e+WqIexOBZ69EEUcLDhYHKihMbKD7jZopDo/c23sF31nPO7EbXSq+Izu4ZXV hEfKAgoUswju9fYGfCXFmo+pMhgTMB7TDVLGyzW6ZSPw3YcOfCKSbT7hpRhnzjixEWUw GHPUnQPAJE7hxBIn2jOLREnW4nmPmYe5ZP5c+vEdeihIksfJiojkk1+yGUIHaS38gxTu T5Vsojh3AW+p6TVcnhSLES451vUPv9+BBRFo4TmAo2lUCSJabYjytG/FRA9Q5igmajTX l1EA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:cc:to:from:dkim-signature:dkim-filter :arc-authentication-results; bh=yADi40SR8/2ChTwsNSAQd580Q6MNTEbsv8czRHjI84U=; b=vrCBTnvq2hTwSokEpwPJR6B++D0vHxyjCcD4mgNvaEQtV7bnVX2m3LndF/TwKN1/8g vYFNEGzQPIHlgA/ksdgs/D1RNylfyCuUgMD7BBvLodku91nkJ6NzMte7s9fupYySGjYz G4sVmMqfk97NgfT50egshZnuIctFHd5iqYFjvCmAhb4Vp9uGgbXG5dwBMk5N4oCo0Xv0 WnYuhqGHqEEQssbj5S5Ek0Zu+uibbH7/IF3PyJlKx1uMsYXpRKZzVcka5aveVV2HgLOi JXQRao5dldSFF9vvczJNUs4t4ihkkJxYIOGJcE4feDyXvbQ3fXvdzVquDw+R44pbEptZ JfOg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@nifty.com header.s=dec2015msa header.b=pR+nPa2P; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id i1si350626pgc.229.2018.03.26.22.35.57; Mon, 26 Mar 2018 22:35:57 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@nifty.com header.s=dec2015msa header.b=pR+nPa2P; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752489AbeC0Ffw (ORCPT + 28 others); Tue, 27 Mar 2018 01:35:52 -0400 Received: from conuserg-09.nifty.com ([210.131.2.76]:44622 "EHLO conuserg-09.nifty.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751897AbeC0FcA (ORCPT ); Tue, 27 Mar 2018 01:32:00 -0400 Received: from pug.e01.socionext.com (p14092-ipngnfx01kyoto.kyoto.ocn.ne.jp [153.142.97.92]) (authenticated) by conuserg-09.nifty.com with ESMTP id w2R5TaLm011947; Tue, 27 Mar 2018 14:29:40 +0900 DKIM-Filter: OpenDKIM Filter v2.10.3 conuserg-09.nifty.com w2R5TaLm011947 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nifty.com; s=dec2015msa; t=1522128581; bh=yADi40SR8/2ChTwsNSAQd580Q6MNTEbsv8czRHjI84U=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=pR+nPa2PtF7veLsn9F+yPSqMVx9GvNm+9GhiGTrgJZu6MOjdICf5R7IchwY8DiS9Z n9j+R0YANnw5IqrqOpogVzfw7WLqhGxRsupuwH82nUCEWXqt6CnrlPTjnQ+2iMCx+e V6UGAZ+/ds0UCTmY6O+IYtG8yp1nn1p0rl53RipSkb+Ll56ht5t7TovkwLEQTIfNDX h8UiQDnqjafPJYUm85UAbsKdZNqrjS/tX5AN9Rt11GUFKghd5qISe6FEBsHVHRPrnA hf1xldzC5pbk+kFD8FJbgQpwsl7DKBGVqWP0QMLGl7Rq/Aei+kJ2TlVln4buMXRgrL ReJGEmVuPoN/A== X-Nifty-SrcIP: [153.142.97.92] From: Masahiro Yamada To: linux-kbuild@vger.kernel.org Cc: Sam Ravnborg , Linus Torvalds , Arnd Bergmann , Ulf Magnusson , Kees Cook , Thomas Gleixner , Greg Kroah-Hartman , Randy Dunlap , "Luis R . Rodriguez" , Nicolas Pitre , Masahiro Yamada , linux-kernel@vger.kernel.org Subject: [PATCH v2 03/21] kconfig: move and rename sym_expand_string_value() Date: Tue, 27 Mar 2018 14:29:17 +0900 Message-Id: <1522128575-5326-4-git-send-email-yamada.masahiro@socionext.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1522128575-5326-1-git-send-email-yamada.masahiro@socionext.com> References: <1522128575-5326-1-git-send-email-yamada.masahiro@socionext.com> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org This helper expands symbols contained in a string. I am about to change it to expand environments instead of symbols. Also, I will add function expansion later. Rename it to expand_string_value(), and move it to util.c, which is a more suitable place. Signed-off-by: Masahiro Yamada --- Changes in v2: None scripts/kconfig/lkc.h | 1 + scripts/kconfig/lkc_proto.h | 1 - scripts/kconfig/symbol.c | 53 ------------------------------------------- scripts/kconfig/util.c | 55 ++++++++++++++++++++++++++++++++++++++++++++- scripts/kconfig/zconf.y | 2 +- 5 files changed, 56 insertions(+), 56 deletions(-) -- 2.7.4 Reviewed-by: Kees Cook diff --git a/scripts/kconfig/lkc.h b/scripts/kconfig/lkc.h index f4394af..c8d9e55 100644 --- a/scripts/kconfig/lkc.h +++ b/scripts/kconfig/lkc.h @@ -111,6 +111,7 @@ void menu_finalize(struct menu *parent); void menu_set_type(int type); /* util.c */ +char *expand_string_value(const char *in); struct file *file_lookup(const char *name); int file_write_dep(const char *name); void *xmalloc(size_t size); diff --git a/scripts/kconfig/lkc_proto.h b/scripts/kconfig/lkc_proto.h index 9dc8abf..9884adc 100644 --- a/scripts/kconfig/lkc_proto.h +++ b/scripts/kconfig/lkc_proto.h @@ -31,7 +31,6 @@ extern struct symbol * symbol_hash[SYMBOL_HASHSIZE]; struct symbol * sym_lookup(const char *name, int flags); struct symbol * sym_find(const char *name); -char *sym_expand_string_value(const char *in); const char * sym_escape_string_value(const char *in); struct symbol ** sym_re_search(const char *pattern); const char * sym_type_name(enum symbol_type type); diff --git a/scripts/kconfig/symbol.c b/scripts/kconfig/symbol.c index f0b2e3b..03143b2 100644 --- a/scripts/kconfig/symbol.c +++ b/scripts/kconfig/symbol.c @@ -906,59 +906,6 @@ struct symbol *sym_find(const char *name) return symbol; } -/* - * Expand symbol's names embedded in the string given in argument. Symbols' - * name to be expanded shall be prefixed by a '$'. Unknown symbol expands to - * the empty string. - */ -char *sym_expand_string_value(const char *in) -{ - const char *src; - char *res; - size_t reslen; - - /* - * Note: 'in' might come from a token that's about to be - * freed, so make sure to always allocate a new string - */ - reslen = strlen(in) + 1; - res = xmalloc(reslen); - res[0] = '\0'; - - while ((src = strchr(in, '$'))) { - char *p, name[SYMBOL_MAXLENGTH]; - const char *symval = ""; - struct symbol *sym; - size_t newlen; - - strncat(res, in, src - in); - src++; - - p = name; - while (isalnum(*src) || *src == '_') - *p++ = *src++; - *p = '\0'; - - sym = sym_find(name); - if (sym != NULL) { - sym_calc_value(sym); - symval = sym_get_string_value(sym); - } - - newlen = strlen(res) + strlen(symval) + strlen(src) + 1; - if (newlen > reslen) { - reslen = newlen; - res = xrealloc(res, reslen); - } - - strcat(res, symval); - in = src; - } - strcat(res, in); - - return res; -} - const char *sym_escape_string_value(const char *in) { const char *p; diff --git a/scripts/kconfig/util.c b/scripts/kconfig/util.c index c6f6e21..22201a4 100644 --- a/scripts/kconfig/util.c +++ b/scripts/kconfig/util.c @@ -10,11 +10,64 @@ #include #include "lkc.h" +/* + * Expand symbol's names embedded in the string given in argument. Symbols' + * name to be expanded shall be prefixed by a '$'. Unknown symbol expands to + * the empty string. + */ +char *expand_string_value(const char *in) +{ + const char *src; + char *res; + size_t reslen; + + /* + * Note: 'in' might come from a token that's about to be + * freed, so make sure to always allocate a new string + */ + reslen = strlen(in) + 1; + res = xmalloc(reslen); + res[0] = '\0'; + + while ((src = strchr(in, '$'))) { + char *p, name[SYMBOL_MAXLENGTH]; + const char *symval = ""; + struct symbol *sym; + size_t newlen; + + strncat(res, in, src - in); + src++; + + p = name; + while (isalnum(*src) || *src == '_') + *p++ = *src++; + *p = '\0'; + + sym = sym_find(name); + if (sym != NULL) { + sym_calc_value(sym); + symval = sym_get_string_value(sym); + } + + newlen = strlen(res) + strlen(symval) + strlen(src) + 1; + if (newlen > reslen) { + reslen = newlen; + res = xrealloc(res, reslen); + } + + strcat(res, symval); + in = src; + } + strcat(res, in); + + return res; +} + /* file already present in list? If not add it */ struct file *file_lookup(const char *name) { struct file *file; - char *file_name = sym_expand_string_value(name); + char *file_name = expand_string_value(name); for (file = file_list; file; file = file->next) { if (!strcmp(name, file->name)) { diff --git a/scripts/kconfig/zconf.y b/scripts/kconfig/zconf.y index ad6305b..262c464 100644 --- a/scripts/kconfig/zconf.y +++ b/scripts/kconfig/zconf.y @@ -547,7 +547,7 @@ void conf_parse(const char *name) tmp = rootmenu.prompt->text; rootmenu.prompt->text = _(rootmenu.prompt->text); - rootmenu.prompt->text = sym_expand_string_value(rootmenu.prompt->text); + rootmenu.prompt->text = expand_string_value(rootmenu.prompt->text); free((char*)tmp); menu_finalize(&rootmenu);