From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from simark.ca by simark.ca with LMTP id LahZOlgm+F/IJgAAWB0awg (envelope-from ) for ; Fri, 08 Jan 2021 04:31:04 -0500 Received: by simark.ca (Postfix, from userid 112) id E05911E99A; Fri, 8 Jan 2021 04:31:04 -0500 (EST) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on simark.ca X-Spam-Level: X-Spam-Status: No, score=0.2 required=5.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,MAILING_LIST_MULTI,RDNS_NONE,URIBL_BLOCKED autolearn=no autolearn_force=no version=3.4.2 Received: from sourceware.org (unknown [8.43.85.97]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by simark.ca (Postfix) with ESMTPS id 9165A1E4F4; Fri, 8 Jan 2021 04:31:03 -0500 (EST) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 57F14395C012; Fri, 8 Jan 2021 09:31:03 +0000 (GMT) Received: from mail-wr1-x429.google.com (mail-wr1-x429.google.com [IPv6:2a00:1450:4864:20::429]) by sourceware.org (Postfix) with ESMTPS id A02153972828 for ; Fri, 8 Jan 2021 09:31:00 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org A02153972828 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=embecosm.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=andrew.burgess@embecosm.com Received: by mail-wr1-x429.google.com with SMTP id i9so8323290wrc.4 for ; Fri, 08 Jan 2021 01:31:00 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=embecosm.com; s=google; h=date:from:to:cc:subject:message-id:references:mime-version :content-disposition:in-reply-to; bh=sj5gqkP9LZV3UvY+nmVDNG3RrWRnTdNpUUzdAVYvYTg=; b=TKg8LgThW3DmM2VdaIuFGQYinLuRVMnjDrzkjG11JJR32l51eFnoR/pmodLlUkoe+l k+JAHtRpfb7GCxou3crLS9NIsCF0mft6KU32kknEytTs7irVUcwqqRaxW0JWCWDumOk9 WTG8m68T78Y03KJWDEO/6pNxBFr/NUmBnv8E+0jg3T0jo5hPAtaJWy7hKlnuRmLfU+xG mEmSE+BE4kGKYmiPzVPsTMcjL8hy4mvKpHfOha1eAWsTwPpgkOKWUI6JMVhw3KEVb6HD ZZpzmC4mMCbTem2Vj22aOEy1kZhdDsrsYZv76COwVTYQpTeCokLpVCoJ3p/yQFmt6opy PbAQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:from:to:cc:subject:message-id:references :mime-version:content-disposition:in-reply-to; bh=sj5gqkP9LZV3UvY+nmVDNG3RrWRnTdNpUUzdAVYvYTg=; b=PMkxqIs/7SbOI8oZ5wWvhnHmTWUTJqPeNwoSzbCQ96ecePTAdm4QK9tnTUizBHD3kz UtF8aje/6we9bhoDpGq5J4E7UXBXgZM89n7SWErm6CwT/ngN5rf6pA/vkxX8x6CA9Ud8 CpKYH32G5ckWFfgcjOTz915r3qS6WXVMnIyQNlWKmlNT8H4y0ro+5vCg1DjJ4vRnMlbT cE5YqrE0cHIMb1h2yFlK9p7vHnIjlI/Zf3qi0y4S720PFBgqVFHn8SoVx10+yefrkBsY DmazRdjPkM9Qm8ls+cm6AVrhc+gbOVZTe4bSYUn5mxq9tqEugu+KH1dkftlDAB5xN8R/ PiRg== X-Gm-Message-State: AOAM532caSjTNEbVrLxndANe7iGGqX7dT0fwv5GYg2nek2UDum+WZ4jq uFVfhMvtMKnEWE/7/Be4+UwETtK7fLmCFg== X-Google-Smtp-Source: ABdhPJyaAFwDQ4NRyBnUgpNmB7AYhzP1UIWHdcl1iHZ2V4eCMsv3PXqWhxQyc2/aFO+7roVPcT+giA== X-Received: by 2002:adf:f6cc:: with SMTP id y12mr2701183wrp.35.1610098259692; Fri, 08 Jan 2021 01:30:59 -0800 (PST) Received: from localhost (host86-166-129-230.range86-166.btcentralplus.com. [86.166.129.230]) by smtp.gmail.com with ESMTPSA id c16sm13064913wrx.51.2021.01.08.01.30.58 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 08 Jan 2021 01:30:59 -0800 (PST) Date: Fri, 8 Jan 2021 09:30:58 +0000 From: Andrew Burgess To: Lancelot SIX Subject: Re: [PATCH] Improve gdb_tilde_expand logic Message-ID: <20210108093058.GR2945@embecosm.com> References: <20210108001337.29164-1-lsix@lancelotsix.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20210108001337.29164-1-lsix@lancelotsix.com> X-Operating-System: Linux/5.8.13-100.fc31.x86_64 (x86_64) X-Uptime: 09:29:18 up 30 days, 14:13, X-Editor: GNU Emacs [ http://www.gnu.org/software/emacs ] X-BeenThere: gdb-patches@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gdb-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: gdb-patches@sourceware.org Errors-To: gdb-patches-bounces@sourceware.org Sender: "Gdb-patches" * Lancelot SIX via Gdb-patches [2021-01-08 00:13:37 +0000]: > Before this patch, gdb_tilde_expand would use glob(3) in order to expand > tilde at the begining of a path. This implementation has limitation when > expanding a tilde leading path to a non existing file since glob fails to > expand. > > This patch proposes to use glob only to expand the tilde component of the > path and leave the rest of the path unchanged. > > This patch is a followup to the following discution: > https://sourceware.org/pipermail/gdb-patches/2021-January/174776.html > > Before: > > gdb_tilde_expand("~") -> "/home/lsix" > gdb_tilde_expand("~/a/c/b") -> error() is called > > After the patch: > > gdb_tilde_expand("~") -> "/home/lsix" > gdb_tilde_expand("~/a/c/b") -> "/home/lsix/a/c/b" > > Tested on x84_64 linux. I am unsure where to place unittests for this > function. There's only very limited unit testing within GDB. You should write a test in gdb/testsuite/.... that triggers this behaviour and check the functionality that way. Thanks, Andrew > > My copyright assignment is still pending, but should be signed soon. > > gdbsupport/ChangeLog: > > * gdb_tilde_expand.cc (gdb_tilde_expand): Improve > implementation. > (gdb_tilde_expand_up): Delegate logic to gdb_tilde_expand. > * gdb_tilde_expand.h (gdb_tilde_expand): Update description. > --- > gdbsupport/gdb_tilde_expand.cc | 45 +++++++++++++++++++++++++--------- > gdbsupport/gdb_tilde_expand.h | 3 +-- > 2 files changed, 34 insertions(+), 14 deletions(-) > > diff --git a/gdbsupport/gdb_tilde_expand.cc b/gdbsupport/gdb_tilde_expand.cc > index b31fc48446..d060e26f50 100644 > --- a/gdbsupport/gdb_tilde_expand.cc > +++ b/gdbsupport/gdb_tilde_expand.cc > @@ -17,7 +17,9 @@ > You should have received a copy of the GNU General Public License > along with this program. If not, see . */ > > +#include > #include "common-defs.h" > +#include "filenames.h" > #include "gdb_tilde_expand.h" > #include > > @@ -71,14 +73,37 @@ private: > std::string > gdb_tilde_expand (const char *dir) > { > - gdb_glob glob (dir, GLOB_TILDE_CHECK, NULL); > + if (dir[0] == '~') > + { > + /* This function uses glob in order to expand the ~. However, this > + function will fail to expand if the actual dir we are looking > + for does not exist. Given "~/does/not/exist", glob will fail. > > - gdb_assert (glob.pathc () > 0); > - /* "glob" may return more than one match to the path provided by the > - user, but we are only interested in the first match. */ > - std::string expanded_dir = glob.pathv ()[0]; > + In order to avoid such limitation, we only use > + glob to expand "~" and keep "/does/not/exist" unchanged. > > - return expanded_dir; > + Similarly, to expand ~gdb/might/not/exist, we only expand > + "~gdb" using glob and leave "/might/not/exist" unchanged. */ > + > + const std::string d (dir); > + > + // Look for the first dir separator (if any) > + const auto first_sep = > + std::find_if (d.cbegin (), d.cend(), > + [](const auto c) { return IS_DIR_SEPARATOR (c); }); > + > + // split d according to the first separator > + const std::string to_expand (d.cbegin (), first_sep); > + const std::string remainder (first_sep, d.cend ()); > + > + // Expand the first element > + const gdb_glob glob (to_expand.c_str (), GLOB_TILDE_CHECK, nullptr); > + gdb_assert (glob.pathc () == 1); > + > + return std::string (glob.pathv ()[0]) + remainder; > + } > + else > + return std::string (dir); > } > > /* See gdbsupport/gdb_tilde_expand.h. */ > @@ -86,10 +111,6 @@ gdb_tilde_expand (const char *dir) > gdb::unique_xmalloc_ptr > gdb_tilde_expand_up (const char *dir) > { > - gdb_glob glob (dir, GLOB_TILDE_CHECK, NULL); > - > - gdb_assert (glob.pathc () > 0); > - /* "glob" may return more than one match to the path provided by the > - user, but we are only interested in the first match. */ > - return make_unique_xstrdup (glob.pathv ()[0]); > + auto const expanded = gdb_tilde_expand (dir); > + return make_unique_xstrdup (expanded.c_str ()); > } > diff --git a/gdbsupport/gdb_tilde_expand.h b/gdbsupport/gdb_tilde_expand.h > index e2d85cadad..a61f246329 100644 > --- a/gdbsupport/gdb_tilde_expand.h > +++ b/gdbsupport/gdb_tilde_expand.h > @@ -20,8 +20,7 @@ > #ifndef COMMON_GDB_TILDE_EXPAND_H > #define COMMON_GDB_TILDE_EXPAND_H > > -/* Perform path expansion (i.e., tilde expansion) on DIR, and return > - the full path. */ > +/* Perform tilde expansion on DIR, and return the full path. */ > extern std::string gdb_tilde_expand (const char *dir); > > /* Same as GDB_TILDE_EXPAND, but return the full path as a > -- > 2.29.2 >