Received: by 2002:ac0:a594:0:0:0:0:0 with SMTP id m20-v6csp1657575imm; Wed, 23 May 2018 21:47:23 -0700 (PDT) X-Google-Smtp-Source: AB8JxZorfCj3C+R+NJdpmjkTdtlusifrUYBtJ8PpzZpqEwG2UHXNW0GDcLHOzka4I1ureDkle33v X-Received: by 2002:a62:2043:: with SMTP id g64-v6mr5661559pfg.12.1527137243350; Wed, 23 May 2018 21:47:23 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1527137243; cv=none; d=google.com; s=arc-20160816; b=EXHY/5HKTfuNzaEbF9gdtW3cJ3r+DLEp4nTu0Z2hdsAcmfFiWpqQZv1KZoRg8VUY9u /4FMJK35sC743eSweKmExUXf14k+S5NHwerdOpS8WPRuumHPD16b2Xncpv6NKnJmVul8 1Wni87aYxybK0Z9zMmnj93GP8VdP/m5Wu5KCtA/1HU1utI5FEf86t2xsEDw5sX4R9rcz x+oPgpkBOztAJ4qKKY2Wf0HQ51qCqNyLAP4k7APDM4Ta4qlPXfkGq+u8x/rzt1mVPsEh 1dMWDX0yI4zmZlq8I+jrd0+JqzQ4av8QGs5a/tvKVVz7xZk8WzyX7LpbFRZGHMhVUrsS Kffw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:cc:to:subject:message-id:date:from :references:in-reply-to:mime-version:dkim-signature:dkim-filter :arc-authentication-results; bh=r+XX+JzH5Lf/sVR/tMxf6RpPZf2UYqSfg2rNyJpSOuI=; b=m22X8Ne24yJKqdNFHOkGb/Ime8iNs0YpbiVLI17RjmzNVmpFAq/XAogrHp6Q+d+uTV kltWp6/8X3ckSUyivWOjFKUf4YRd2rXQLxnfqsn4pE5Cj258c456BY+vtW2nMxoa+b9J Bx4JTwKEE4CO2HdVSud3LxE2KYlAe4qFdTZ+HKzisLE2y1PuBAEEWYdRV7g0VJMsHpiu aqai7f6I8Ogw1A6tYCscGOouqJhPYTNmT0a+tEo0cUvSZlcdL6xvRoGEGqj120oNiejQ OekPVVCl/bA24Z1TQn02vBC0L9sIaCLwKpeoKGMwEgK98tFtG8zpINdcgOgWRYijdPyi qq2Q== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@nifty.com header.s=dec2015msa header.b=FG6lubea; 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 b93-v6si20538882plb.536.2018.05.23.21.47.08; Wed, 23 May 2018 21:47:23 -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=FG6lubea; 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 S1751869AbeEXEqD (ORCPT + 99 others); Thu, 24 May 2018 00:46:03 -0400 Received: from conssluserg-04.nifty.com ([210.131.2.83]:28395 "EHLO conssluserg-04.nifty.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751591AbeEXEqB (ORCPT ); Thu, 24 May 2018 00:46:01 -0400 Received: from mail-vk0-f51.google.com (mail-vk0-f51.google.com [209.85.213.51]) (authenticated) by conssluserg-04.nifty.com with ESMTP id w4O4juRA031682; Thu, 24 May 2018 13:45:57 +0900 DKIM-Filter: OpenDKIM Filter v2.10.3 conssluserg-04.nifty.com w4O4juRA031682 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nifty.com; s=dec2015msa; t=1527137157; bh=r+XX+JzH5Lf/sVR/tMxf6RpPZf2UYqSfg2rNyJpSOuI=; h=In-Reply-To:References:From:Date:Subject:To:Cc:From; b=FG6lubeaFkgSutZ6DHt3dZC7cQTIjXYOMgjHmWVXibm5w1z5kGn/lGOC2WhFtfV4b xN3DvLuptL4XUk+mRWhYj2fN/hW1bVW5WwoEQ8XoOR8QaT7dxjfEMZn1LiO89zVJse JoOZKnu9wdndHpwY5JzkOWnXtaf0cYc54nhRagUoBOnq7eVsSB0nYSMajHaf42QjK6 eqnLBdfkddUiA5upeajcFznQi4PQN5VWZyGgHcZKAKkKfKh5fQokaeP/sFzxNxfuUC +WzJVKv0EDVfatln7rvDwwrGmzE3NQ7h0n8ZY9shoAj1fg6NX2jsZ8XXr08skyWvlx KrFs/X1gwlQvg== X-Nifty-SrcIP: [209.85.213.51] Received: by mail-vk0-f51.google.com with SMTP id x191-v6so186418vke.10; Wed, 23 May 2018 21:45:57 -0700 (PDT) X-Gm-Message-State: ALKqPwcxIr+okJWfEo+8wpOdcBOmrbpkRgOtBEJuytVxHY+W9RnQ7nbh Kso5NKJOZ6JDh2uE9nL+31z86cbiFK+MKanUzgg= X-Received: by 2002:a1f:a991:: with SMTP id s139-v6mr3783716vke.54.1527137156189; Wed, 23 May 2018 21:45:56 -0700 (PDT) MIME-Version: 1.0 Received: by 2002:ab0:55d8:0:0:0:0:0 with HTTP; Wed, 23 May 2018 21:45:15 -0700 (PDT) In-Reply-To: References: <1526537830-22606-1-git-send-email-yamada.masahiro@socionext.com> <1526537830-22606-4-git-send-email-yamada.masahiro@socionext.com> From: Masahiro Yamada Date: Thu, 24 May 2018 13:45:15 +0900 X-Gmail-Original-Message-ID: Message-ID: Subject: Re: [PATCH v4 03/31] kconfig: reference environment variables directly and remove 'option env=' To: Ulf Magnusson Cc: Linux Kbuild mailing list , Linus Torvalds , Sam Ravnborg , "Luis R . Rodriguez" , Linux Kernel Mailing List , Nicholas Piggin , Kees Cook , Emese Revfy , X86 ML Content-Type: text/plain; charset="UTF-8" Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 2018-05-21 20:06 GMT+09:00 Ulf Magnusson : >> >> static char *__expand_string(const char **str, bool (*is_end)(const char *)) >> { >> const char *in, *prev_in, *p; >> char *new, *out; >> size_t outlen; >> >> out = xmalloc(1); >> *out = 0; >> >> p = in = *str; >> >> while (1) { >> if (*p == '$') { >> prev_in = in; >> in = p + 1; >> new = expand_dollar(&in); >> outlen = strlen(out) + (p - prev_in) + strlen(new) + 1; >> out = xrealloc(out, outlen); >> strncat(out, prev_in, p - prev_in); >> strcat(out, new); >> free(new); >> p = in; >> continue; >> } >> >> if (is_end(p)) >> break; >> >> p++; >> } >> >> outlen = strlen(out) + (p - in) + 1; >> out = xrealloc(out, outlen); >> strncat(out, in, p - in); >> >> *str = p; >> >> return out; >> } >> >> static bool is_end_of_str(const char *s) >> { >> return !*s; >> } >> >> char *expand_string(const char *in) >> { >> return __expand_string(&in, is_end_of_str); >> } >> >> static bool is_end_of_token(const char *s) >> { >> return !(isalnum(*s) || *s == '_' || *s == '-' || *s == '.' || >> *s == '/'); >> } >> >> char *expand_one_token(const char **str) >> { >> return __expand_string(str, is_end_of_token); >> } > > Yep, something like that would be nicer I think. > > This variant might work too (untested): > > dollar_i = p; > p++; > expansion = expand_dollar(&p); > > out = xrealloc(out, strlen(out) + (dollar_i - in) > + strlen(expansion) + 1); > strncat(out, in, dollar_i - in); > strcat(out, expansion); > free(expansion); > > in = p; > > continue; > > The p++ would disappear if expand_dollar() took a pointer to the '$'. > I took the variable name "expansion" because it is more descriptive than "new". I rewrote like follows: static char *__expand_string(const char **str, bool (*is_end)(const char *)) { const char *in, *p; char *expansion, *out; size_t in_len, out_len; out = xmalloc(1); *out = 0; out_len = 1; p = in = *str; while (1) { if (*p == '$') { in_len = p - in; p++; expansion = expand_dollar(&p); out_len += in_len + strlen(expansion); out = xrealloc(out, out_len); strncat(out, in, in_len); strcat(out, expansion); free(expansion); in = p; continue; } if (is_end(p)) break; p++; } in_len = p - in; out_len += in_len; out = xrealloc(out, out_len); strncat(out, in, in_len); /* Advance 'str' to the end character */ *str = p; return out; } I used "out_len" to remember the length of "out" instead of calculating strlen(out) every time. I do not need dollar_p. -- Best Regards Masahiro Yamada