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