From owner-svn-src-all@freebsd.org Fri Dec 28 18:03:44 2018 Return-Path: Delivered-To: svn-src-all@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id C5229141B86E; Fri, 28 Dec 2018 18:03:44 +0000 (UTC) (envelope-from john@baldwin.cx) Received: from mail.baldwin.cx (bigwig.baldwin.cx [IPv6:2001:470:1f11:75::1]) (using TLSv1 with cipher DHE-RSA-CAMELLIA256-SHA (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 0D37C93C85; Fri, 28 Dec 2018 18:03:44 +0000 (UTC) (envelope-from john@baldwin.cx) Received: from John-Baldwins-MacBook-Pro-3.local (ralph.baldwin.cx [66.234.199.215]) by mail.baldwin.cx (Postfix) with ESMTPSA id 9C13410AFD2; Fri, 28 Dec 2018 13:03:42 -0500 (EST) Subject: Re: svn commit: r342577 - head/bin/sh To: Edward Tomasz Napierala , src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org References: <201812281751.wBSHpeVV095681@repo.freebsd.org> From: John Baldwin Openpgp: preference=signencrypt Autocrypt: addr=john@baldwin.cx; keydata= mQGiBETQ+XcRBADMFybiq69u+fJRy/0wzqTNS8jFfWaBTs5/OfcV7wWezVmf9sgwn8TW0Dk0 c9MBl0pz+H01dA2ZSGZ5fXlmFIsee1WEzqeJzpiwd/pejPgSzXB9ijbLHZ2/E0jhGBcVy5Yo /Tw5+U/+laeYKu2xb0XPvM0zMNls1ah5OnP9a6Ql6wCgupaoMySb7DXm2LHD1Z9jTsHcAQMD /1jzh2BoHriy/Q2s4KzzjVp/mQO5DSm2z14BvbQRcXU48oAosHA1u3Wrov6LfPY+0U1tG47X 1BGfnQH+rNAaH0livoSBQ0IPI/8WfIW7ub4qV6HYwWKVqkDkqwcpmGNDbz3gfaDht6nsie5Z pcuCcul4M9CW7Md6zzyvktjnbz61BADGDCopfZC4of0Z3Ka0u8Wik6UJOuqShBt1WcFS8ya1 oB4rc4tXfSHyMF63aPUBMxHR5DXeH+EO2edoSwViDMqWk1jTnYza51rbGY+pebLQOVOxAY7k do5Ordl3wklBPMVEPWoZ61SdbcjhHVwaC5zfiskcxj5wwXd2E9qYlBqRg7QeSm9obiBCYWxk d2luIDxqb2huQGJhbGR3aW4uY3g+iGMEExECACMCGwMGCwkIBwMCBBUCCAMEFgIDAQIeAQIX gAUCRND5wwIZAQAKCRBy3lIGd+N/BNLXAJ9KIb6teuDL1W+FkCgvv+y8PxKTkACeIUfbn3sl cueBzqTcf09idwa8YTa5Ag0ERND5ghAIAPwsO0B7BL+bz8sLlLoQktGxXwXQfS5cInvL17Ds gnr31AKa94j9EnXQyPEj7u0d+LmEe6CGEGDh1OcGFTMVrof2ZzkSy4+FkZwMKJpTiqeaShMh +GojXlwIMDxyADYvBIg3eN5YdFKaPQpfgSqhT+7El7w+wSZZD8pPQuLAnie5iz9C8iKy4/cM SOrHYUK/tO+Nhw8Jjlw94Ik0T80iEhI2t+XBVjwdfjbq3HrJ0ehqdBwukyeJRYKmbn298KOF QVHOEVbHA4rF/37jzaMadK43FgJ0SAhPPF5l4l89z5oPu0b/+5e2inA3b8J3iGZxywjM+Csq 1tqzhltEc7Q+E08AAwUIAL+15XH8bPbjNJdVyg2CMl10JNW2wWg2Q6qdljeaRqeR6zFus7EZ TwtXsNzs5bP8y51PSUDJbeiy2RNCNKWFMndM22TZnk3GNG45nQd4OwYK0RZVrikalmJY5Q6m 7Z164yrZgIXFdKj2t8F+x613/SJW1lIr9/bDp4U9tw0V1g3l2dFtD3p3ZrQ3hpoDtoK70ioI AjjHaIXIAcm3FGZFXy503DOA0KaTWwvOVdYCFLm3zWuSOmrX/GsEc7ovasOWwjPn878qVjbU KWwxQ4QkF4OhUV9zPtf9tDSAZ3x7QSwoKbCoRCZ/xbyTUPyQ1VvNy/mYrBcYlzHodsaqUDjH uW+ISQQYEQIACQUCRND5ggIbDAAKCRBy3lIGd+N/BCO8AJ9j1dWVQWxw/YdTbEyrRKOY8YZN wwCfafMAg8QvmOWnHx3wl8WslCaXaE8= Message-ID: <7523dc7e-2fdb-bc91-40f9-ab4f760a2e3e@baldwin.cx> Date: Fri, 28 Dec 2018 10:03:41 -0800 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:60.0) Gecko/20100101 Thunderbird/60.4.0 MIME-Version: 1.0 In-Reply-To: <201812281751.wBSHpeVV095681@repo.freebsd.org> Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 8bit X-Greylist: Sender succeeded SMTP AUTH, not delayed by milter-greylist-4.4.3 (mail.baldwin.cx); Fri, 28 Dec 2018 13:03:43 -0500 (EST) X-Virus-Scanned: clamav-milter 0.99.2 at mail.baldwin.cx X-Virus-Status: Clean X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 28 Dec 2018 18:03:45 -0000 On 12/28/18 9:51 AM, Edward Tomasz Napierala wrote: > Author: trasz > Date: Fri Dec 28 17:51:40 2018 > New Revision: 342577 > URL: https://svnweb.freebsd.org/changeset/base/342577 > > Log: > Make sh(1) collapse $HOME into "~" in PS1. > > Reviewed by: jilles > MFC after: 2 weeks > Sponsored by: DARPA, AFRL > Differential Revision: https://reviews.freebsd.org/D18663 > > Modified: > head/bin/sh/parser.c > > Modified: head/bin/sh/parser.c > ============================================================================== > --- head/bin/sh/parser.c Fri Dec 28 17:50:40 2018 (r342576) > +++ head/bin/sh/parser.c Fri Dec 28 17:51:40 2018 (r342577) > @@ -1978,7 +1978,9 @@ getprompt(void *unused __unused) > { > static char ps[PROMPTLEN]; > const char *fmt; > + const char *home; > const char *pwd; > + size_t homelen; > int i, trim; > static char internal_error[] = "??"; > > @@ -2039,8 +2041,24 @@ getprompt(void *unused __unused) > *pwd == '/' && pwd[1] != '\0') > strlcpy(&ps[i], strrchr(pwd, '/') + 1, > PROMPTLEN - i); > - else > - strlcpy(&ps[i], pwd, PROMPTLEN - i); > + else { > + home = lookupvar("HOME"); > + if (home != NULL) > + homelen = strlen(home); > + if (home != NULL && > + strcmp(home, "/") != 0 && > + strncmp(pwd, home, homelen) == 0 && > + (pwd[homelen] == '/' || > + pwd[homelen] == '\0')) { > + strlcpy(&ps[i], "~", > + PROMPTLEN - i); > + strlcpy(&ps[i + 1], > + pwd + homelen, > + PROMPTLEN - i - 1); > + } else { > + strlcpy(&ps[i], pwd, PROMPTLEN - i); > + } > + } The existing code already did this, but isn't the fancy math with the size passed to strlcpy() one of the things strlcpy() tries to prevent? Using strlcat would seem to be harder to get wrong, that is: if (...) { strlcat(ps, "~", PROMPTLEN); strlcat(ps, pwd + homelen, PROMPTLEN); } else strlcat(ps, pwd, PROMPTLEN); looks simpler to read and seems less error prone. -- John Baldwin