Received: by 2002:ac0:a5b6:0:0:0:0:0 with SMTP id m51-v6csp875223imm; Sat, 26 May 2018 13:48:27 -0700 (PDT) X-Google-Smtp-Source: AB8JxZr3N6QRDula1OwuN+MTBaPD/QloLt4B4ML3PNcJYC5bnXZ1nHNAjwXp2+To7OuHGddfYn50 X-Received: by 2002:a63:715d:: with SMTP id b29-v6mr6002043pgn.325.1527367707870; Sat, 26 May 2018 13:48:27 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1527367707; cv=none; d=google.com; s=arc-20160816; b=Bss9hyXQo9wT66WrsNx+YfLxZU/qqzWFERJe8QMMtJXMsybwgCMH5mLmpejpMuev5i L0Yy2cNPnA+kglV1Le1NVJOCHyHDdgk/CuSuyzqmrtOUUl6ZUTB9TI7s3yNFP8ZAfRxI Jy4aC84VfYAAArUS5OOjzixtYh6QkM9XCQbLhvssWIsMJl+Qk7H6NJSy/8jCx3oCM3ka 9XV4EmHJPWfC9r900n1RhGyYEOPxDH5XHK2IX9fEMhtzKZtxDNhEh7rqOp99NfA1jSbm /ImdA65GWSgrEy8nQQKUQhqk9tE0ExICW8I8NXiVG8Hirl8VDw1YWuVl9IDVQMKQuNqP C0/w== 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 :arc-authentication-results; bh=+Wp+x86KdjdXP7AOQmMJmmO3YoEpEBJUvMjkGFakX10=; b=GECZiXJEnIdv5oNucY6VLwmqWUA+m0x5gyeIPGSRruzWyD7b1yRKJm/yhkjTTjwqJ0 pez3Stgr2hVykhd1qOjdxM5pzssbzxbsv5s7Dp6ZRAZXfq/GlqPUtBkVOAqxHtrZ5itN 7e/WMrsRav6jh9v1ceyPY/y/21vbUoaycJLaAPom/QXigrBAfndr2A5rn1Yy9JddYNA6 LoNnL72PfflhvF/K9hFEoywtlRiLqZ6I/7EpntS2e9RZ6c3/63hsj2Ydd7y00289b5Dq Hp99xVtcLXt4Va3/MY0P0IiOTSqiBPbhU7ufVe8RpiefjLMVakfOY+PfsM7slUCxAI7d Cw3A== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=YP7FHcKd; 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; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id o6-v6si25479956pls.234.2018.05.26.13.48.13; Sat, 26 May 2018 13:48:27 -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=@gmail.com header.s=20161025 header.b=YP7FHcKd; 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; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1032433AbeEZUrw (ORCPT + 99 others); Sat, 26 May 2018 16:47:52 -0400 Received: from mail-ot0-f172.google.com ([74.125.82.172]:42123 "EHLO mail-ot0-f172.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1032376AbeEZUru (ORCPT ); Sat, 26 May 2018 16:47:50 -0400 Received: by mail-ot0-f172.google.com with SMTP id l13-v6so9709896otk.9; Sat, 26 May 2018 13:47:50 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :cc; bh=+Wp+x86KdjdXP7AOQmMJmmO3YoEpEBJUvMjkGFakX10=; b=YP7FHcKd6rkPx2gre1SFoticoBa0JefcrdIILKTdPdz1te7c32I47L4uvy2yCDknbI PNJg/K+0EX/rdEssPE7frrtHcq3tYIK6Ffg6Gr+oyZWq/afDKYAoEJ6WRozKBrXw3sOi 9zopTDYfZJ6c/9NCIfkLW38w/rKbbkz6NMBJCr5HabIVRVuSeWqOFQZtfhOy4XLlwV2S 1mW6myuhIH9GfRsYXHVMtQsHaTvDCTJFIziRyLZNb2Fh0xRyvu8svJ4SpOdBE1HJW0I0 AMbiItNiIa2SitBSJemXS7Ou2cktkyS3uMwBzpdroWTl6QZ7ARf/BUgvxeOSajcyT9X9 wazg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to:cc; bh=+Wp+x86KdjdXP7AOQmMJmmO3YoEpEBJUvMjkGFakX10=; b=Iat/gEqrYZf5sjbaZCvy6v2b1CaYpejuuYN2MvSqc7ovQlRqFvAX//zYPcIcbV8kIf xFotCEf8Bc6lBedKCj+O/IlrmE+EHRnmjD8YQ5ux2IvHMrEOFS7s6SicMO/e736qX+mG aW0zqghh0nihfrZE66j8NEGJsm9hRFg9InjuPEaBuVUMWxuNfWfwLyervy/hullljtdu yi2O6tgPVSQJhfGeEeYUmV1S1EJerIXasn7FFZL/+aZayqmNU0l071/fUuAZrjp/9F8I QRLqnYet6Zo3RnSa+xP3QGjDDxANtYMB7uq+9+FGeW+ZNS/23UIDOto+TFR2iKZdXmVE K7nA== X-Gm-Message-State: ALKqPwe3LQHFboM2aFXCJQURUgPQLq33QOwCtfMHkoT5SvnxxqZvDsPu reD2QtzpMUHWDD3QZQvLfmFKm3VGsrZfOo3CXvQ= X-Received: by 2002:a9d:34a4:: with SMTP id g33-v6mr5059190otc.182.1527367670065; Sat, 26 May 2018 13:47:50 -0700 (PDT) MIME-Version: 1.0 Received: by 2002:a9d:5b4:0:0:0:0:0 with HTTP; Sat, 26 May 2018 13:47:49 -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: Ulf Magnusson Date: Sat, 26 May 2018 22:47:49 +0200 Message-ID: Subject: Re: [PATCH v4 03/31] kconfig: reference environment variables directly and remove 'option env=' To: Masahiro Yamada 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 On Thu, May 24, 2018 at 6:45 AM, Masahiro Yamada wrote: > 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 Looks good to me. Could keep some 'out' pointer to avoid the str(n)cat()s too, but pretty sure it's overkilling it. Should have some general string buffer helpers at that point I think. :) Cheers, Ulf