sh: Handle empty hostname and $PWD when building prompt

If the hostname is empty and \h is used in $PS1,
the remainder of the prompt following \h will be empty.
Likewise for $PWD and \w.  Fix it.

Reviewed by:	jilles
MFC after:	1 week
Sponsored by:	Dell Inc.
Differential Revision:	https://reviews.freebsd.org/D6188
This commit is contained in:
Eric van Gyzen 2016-05-04 02:06:46 +00:00
parent cdd2592ffd
commit 8e3543eebc

View File

@ -2014,8 +2014,9 @@ getprompt(void *unused __unused)
gethostname(&ps[i], PROMPTLEN - i);
/* Skip to end of hostname. */
trim = (*fmt == 'h') ? '.' : '\0';
while ((ps[i+1] != '\0') && (ps[i+1] != trim))
while ((ps[i] != '\0') && (ps[i] != trim))
i++;
--i;
break;
/*
@ -2027,7 +2028,7 @@ getprompt(void *unused __unused)
case 'W':
case 'w':
pwd = lookupvar("PWD");
if (pwd == NULL)
if (pwd == NULL || *pwd == '\0')
pwd = "?";
if (*fmt == 'W' &&
*pwd == '/' && pwd[1] != '\0')