Skip site navigation (1)Skip section navigation (2)
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>