mirror of
git://git.code.sf.net/p/cdesktopenv/code
synced 2025-02-13 11:42:21 +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…
Reference in a new issue