svn commit: r342577 - head/bin/sh

Edward Tomasz Napierala trasz at FreeBSD.org
Fri Dec 28 17:51:41 UTC 2018


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);
+					}
+				}
 				/* Skip to end of path. */
 				while (ps[i + 1] != '\0')
 					i++;


More information about the svn-src-all mailing list