Date: Sat, 23 Jan 2016 23:00:38 +0000 (UTC) From: Jilles Tjoelker <jilles@FreeBSD.org> To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r294649 - head/bin/sh Message-ID: <201601232300.u0NN0cHd090950@repo.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: jilles Date: Sat Jan 23 23:00:38 2016 New Revision: 294649 URL: https://svnweb.freebsd.org/changeset/base/294649 Log: sh: Use OLDPWD shell variable for 'cd -'. Per POSIX, 'cd -' should use the OLDPWD shell variable, not internal state. This variable is normally exported. Also, if OLDPWD is not set, fail 'cd -' instead of changing to the current directory. Modified: head/bin/sh/cd.c Modified: head/bin/sh/cd.c ============================================================================== --- head/bin/sh/cd.c Sat Jan 23 22:56:26 2016 (r294648) +++ head/bin/sh/cd.c Sat Jan 23 23:00:38 2016 (r294649) @@ -75,7 +75,6 @@ static char *getpwd(void); static char *getpwd2(void); static char *curdir = NULL; /* current working directory */ -static char *prevdir; /* previous working directory */ static char *cdcomppath; int @@ -112,11 +111,10 @@ cdcmd(int argc __unused, char **argv __u if (*dest == '\0') dest = "."; if (dest[0] == '-' && dest[1] == '\0') { - dest = prevdir ? prevdir : curdir; - if (dest) - print = 1; - else - dest = "."; + dest = bltinlookup("OLDPWD", 1); + if (dest == NULL) + error("OLDPWD not set"); + print = 1; } if (dest[0] == '/' || (dest[0] == '.' && (dest[1] == '/' || dest[1] == '\0')) || @@ -311,14 +309,15 @@ findcwd(char *dir) static void updatepwd(char *dir) { + char *prevdir; + hashcd(); /* update command hash table */ - if (prevdir) - ckfree(prevdir); + setvar("PWD", dir, VEXPORT); + setvar("OLDPWD", curdir, VEXPORT); prevdir = curdir; curdir = dir ? savestr(dir) : NULL; - setvar("PWD", curdir, VEXPORT); - setvar("OLDPWD", prevdir, VEXPORT); + ckfree(prevdir); } int
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201601232300.u0NN0cHd090950>