sh: Use $PWD instead of getcwd() for the \w and \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.
This commit is contained in:
parent
4802d158ef
commit
4ae2ec7aa4
@ -1734,7 +1734,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>";
|
||||
|
||||
/*
|
||||
@ -1785,17 +1786,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++;
|
||||
|
Loading…
x
Reference in New Issue
Block a user