mirror of
				git://git.code.sf.net/p/cdesktopenv/code
				synced 2025-03-09 15:50:02 +00:00 
			
		
		
		
	main.c: Tweak fixargs() (re: cefe087d)
				
					
				
			src/cmd/ksh93/sh/main.c: fixargs(): - Erase the entire length of the command arguments buffer (the space from argv[0] until environ[0]) so that remnants of longer command arguments aren't left in 'ps' output when executing a hashbang-ess script with a shorter command line. - Disable fixargs() on FreeBSD. It has never had any effect on that system; apparently it either requires another method to rewrite arguments for 'ps' output purposes (which?) or it's not possible. src/cmd/ksh93/tests/basic.sh: - Skip the test if running on FreeBSD.
This commit is contained in:
		
							parent
							
								
									e7202832fd
								
							
						
					
					
						commit
						159fb9ee27
					
				
					 2 changed files with 5 additions and 8 deletions
				
			
		| 
						 | 
					@ -52,7 +52,7 @@
 | 
				
			||||||
/* These routines are referenced by this module */
 | 
					/* These routines are referenced by this module */
 | 
				
			||||||
static void	exfile(Shell_t*, Sfio_t*,int);
 | 
					static void	exfile(Shell_t*, Sfio_t*,int);
 | 
				
			||||||
static void	chkmail(Shell_t *shp, char*);
 | 
					static void	chkmail(Shell_t *shp, char*);
 | 
				
			||||||
#if defined(_lib_fork) && !defined(_NEXT_SOURCE)
 | 
					#if defined(_lib_fork) && !defined(_NEXT_SOURCE) && !defined(__FreeBSD__)
 | 
				
			||||||
    static void	fixargs(char**,int);
 | 
					    static void	fixargs(char**,int);
 | 
				
			||||||
#else
 | 
					#else
 | 
				
			||||||
#   define fixargs(a,b)
 | 
					#   define fixargs(a,b)
 | 
				
			||||||
| 
						 | 
					@ -697,7 +697,7 @@ static void chkmail(Shell_t *shp, char *files)
 | 
				
			||||||
#   define PSTAT	1
 | 
					#   define PSTAT	1
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if defined(_lib_fork) && !defined(_NEXT_SOURCE)
 | 
					#if defined(_lib_fork) && !defined(_NEXT_SOURCE) && !defined(__FreeBSD__)
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
 * fix up command line for ps command
 | 
					 * fix up command line for ps command
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
| 
						 | 
					@ -735,9 +735,7 @@ static void fixargs(char **argv, int mode)
 | 
				
			||||||
	if(mode==0)
 | 
						if(mode==0)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		buff = argv[0];
 | 
							buff = argv[0];
 | 
				
			||||||
		while(cp = *argv++)
 | 
							command_len = environ[0] - buff - 1;
 | 
				
			||||||
			command_len += strlen(cp)+1;
 | 
					 | 
				
			||||||
		command_len -= 1;
 | 
					 | 
				
			||||||
		return;
 | 
							return;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
#   endif /* PSTAT */
 | 
					#   endif /* PSTAT */
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -708,7 +708,8 @@ getPsOutput() {
 | 
				
			||||||
	while [[ $actual == [[:space:]]* ]]; do actual=${actual#?}; done
 | 
						while [[ $actual == [[:space:]]* ]]; do actual=${actual#?}; done
 | 
				
			||||||
	while [[ $actual == *[[:space:]] ]]; do actual=${actual%?}; done
 | 
						while [[ $actual == *[[:space:]] ]]; do actual=${actual%?}; done
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
if	getPsOutput "$$"
 | 
					if	[[ $(uname -s) != FreeBSD ]] &&
 | 
				
			||||||
 | 
						getPsOutput "$$" &&
 | 
				
			||||||
	[[ "$SHELL $0" == "$actual"* ]]  # "$SHELL $0" is how shtests invokes this script
 | 
						[[ "$SHELL $0" == "$actual"* ]]  # "$SHELL $0" is how shtests invokes this script
 | 
				
			||||||
then	expect='./atest 1 2'
 | 
					then	expect='./atest 1 2'
 | 
				
			||||||
	echo 'sleep 10; exit 0' >atest
 | 
						echo 'sleep 10; exit 0' >atest
 | 
				
			||||||
| 
						 | 
					@ -718,8 +719,6 @@ then	expect='./atest 1 2'
 | 
				
			||||||
	kill "$!"
 | 
						kill "$!"
 | 
				
			||||||
	[[ $actual == "$expect" ]] || err_exit "ksh didn't rewrite argv correctly" \
 | 
						[[ $actual == "$expect" ]] || err_exit "ksh didn't rewrite argv correctly" \
 | 
				
			||||||
		"(expected $(printf %q "$expect"), got $(printf %q "$actual"))"
 | 
							"(expected $(printf %q "$expect"), got $(printf %q "$actual"))"
 | 
				
			||||||
else	err_exit "warning: skipping argv rewrite test due to noncompliant 'ps' utility (got $(printf %q "$actual"))"
 | 
					 | 
				
			||||||
	let Errors--
 | 
					 | 
				
			||||||
fi
 | 
					fi
 | 
				
			||||||
unset -f getPsOutput
 | 
					unset -f getPsOutput
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue