Date: Sat, 9 Oct 2010 12:57:06 +0000 (UTC) From: Jilles Tjoelker <jilles@FreeBSD.org> To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-8@freebsd.org Subject: svn commit: r213654 - stable/8/bin/sh Message-ID: <201010091257.o99Cv6q6040225@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: jilles Date: Sat Oct 9 12:57:06 2010 New Revision: 213654 URL: http://svn.freebsd.org/changeset/base/213654 Log: MFC r209653: sh: Use $PWD instead of getcwd() for \w \W prompt expansions. This ensures that the logical working directory (which may include symlinks) is shown and is similar to the default behaviour of the pwd builtin. Modified: stable/8/bin/sh/parser.c Directory Properties: stable/8/bin/sh/ (props changed) Modified: stable/8/bin/sh/parser.c ============================================================================== --- stable/8/bin/sh/parser.c Sat Oct 9 11:43:00 2010 (r213653) +++ stable/8/bin/sh/parser.c Sat Oct 9 12:57:06 2010 (r213654) @@ -1583,7 +1583,8 @@ getprompt(void *unused __unused) { static char ps[PROMPTLEN]; char *fmt; - int i, j, trim; + const char *pwd; + int i, trim; static char internal_error[] = "<internal prompt error>"; /* @@ -1634,17 +1635,15 @@ getprompt(void *unused __unused) */ case 'W': case 'w': - ps[i] = '\0'; - getcwd(&ps[i], PROMPTLEN - i); - if (*fmt == 'W' && ps[i + 1] != '\0') { - /* Final path component only. */ - trim = 1; - for (j = i; ps[j] != '\0'; j++) - if (ps[j] == '/') - trim = j + 1; - memmove(&ps[i], &ps[trim], - j - trim + 1); - } + pwd = lookupvar("PWD"); + if (pwd == NULL) + pwd = "?"; + if (*fmt == 'W' && + *pwd == '/' && pwd[1] != '\0') + strlcpy(&ps[i], strrchr(pwd, '/') + 1, + PROMPTLEN - i); + else + strlcpy(&ps[i], pwd, PROMPTLEN - i); /* Skip to end of path. */ while (ps[i + 1] != '\0') i++;
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201010091257.o99Cv6q6040225>