mirror of
git://git.code.sf.net/p/cdesktopenv/code
synced 2025-03-09 15:50:02 +00:00
Fix 'command -p' by fixing initialisation of default PATH variable
'command -p' was broken for non-interactive shells as the variable used to store the default system PATH, std_path, was not initialised correctly. For instance: $ ksh -c 'command -p ls' ksh: ls: not found This fix by Siteshwar Vashisht is backported from ksh2020. Ref.: https://github.com/att/ast/issues/426 https://github.com/att/ast/pull/448 src/cmd/ksh93/sh/path.c: - Correctly initialise std_path (the default PATH) when ksh is started as a non-interactive shell. src/cmd/ksh93/sh.1: - Fix vague explanation of 'command -p'. src/cmd/ksh93/tests/path.sh: - Add regression test. (cherry picked from commit a76439d60b70c18cf44d84c1962fcd8df84c947c)
This commit is contained in:
parent
f35e7ecd1d
commit
c9ccee86bb
5 changed files with 24 additions and 7 deletions
|
@ -56,11 +56,14 @@ static void funload(Shell_t*,int,const char*);
|
|||
static void exscript(Shell_t*,char*, char*[], char**);
|
||||
static int path_chkpaths(Shell_t*,Pathcomp_t*,Pathcomp_t*,Pathcomp_t*,int);
|
||||
static void path_checkdup(Shell_t *shp,register Pathcomp_t*);
|
||||
static Pathcomp_t *defpath_init(Shell_t *shp);
|
||||
|
||||
static const char *std_path;
|
||||
static const char *std_path = NULL;
|
||||
|
||||
static int onstdpath(const char *name)
|
||||
static int onstdpath(Shell_t *shp, const char *name)
|
||||
{
|
||||
if(!std_path)
|
||||
defpath_init(shp);
|
||||
register const char *cp = std_path, *sp;
|
||||
if(cp)
|
||||
while(*cp)
|
||||
|
@ -379,7 +382,7 @@ static void path_checkdup(Shell_t *shp,register Pathcomp_t *pp)
|
|||
pp->mtime = statb.st_mtime;
|
||||
pp->ino = statb.st_ino;
|
||||
pp->dev = statb.st_dev;
|
||||
if(*name=='/' && onstdpath(name))
|
||||
if(*name=='/' && onstdpath(shp, name))
|
||||
flag = PATH_STD_DIR;
|
||||
first = (pp->flags&PATH_CDPATH)?(Pathcomp_t*)shp->cdpathlist:path_get(shp,"");
|
||||
for(oldpp=first; oldpp && oldpp!=pp; oldpp=oldpp->next)
|
||||
|
@ -450,6 +453,8 @@ Pathcomp_t *path_nextcomp(Shell_t *shp,register Pathcomp_t *pp, const char *name
|
|||
|
||||
static Pathcomp_t* defpath_init(Shell_t *shp)
|
||||
{
|
||||
if(!std_path && !(std_path=astconf("PATH",NIL(char*),NIL(char*))))
|
||||
std_path = e_defpath;
|
||||
Pathcomp_t *pp = (void*)path_addpath(shp,(Pathcomp_t*)0,(std_path),PATH_PATH);
|
||||
return(pp);
|
||||
}
|
||||
|
@ -458,8 +463,6 @@ static void path_init(Shell_t *shp)
|
|||
{
|
||||
const char *val;
|
||||
Pathcomp_t *pp;
|
||||
if(!std_path && !(std_path=astconf("PATH",NIL(char*),NIL(char*))))
|
||||
std_path = e_defpath;
|
||||
if(val=sh_scoped(shp,(PATHNOD))->nvalue.cp)
|
||||
{
|
||||
shp->pathlist = pp = (void*)path_addpath(shp,(Pathcomp_t*)shp->pathlist,val,PATH_PATH);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue