diff --git a/src/cmd/ksh93/sh/main.c b/src/cmd/ksh93/sh/main.c index b81d764f142b..96fe68846cff 100644 --- a/src/cmd/ksh93/sh/main.c +++ b/src/cmd/ksh93/sh/main.c @@ -52,7 +52,7 @@ /* These routines are referenced by this module */ static void exfile(Shell_t*, Sfio_t*,int); 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); #else # define fixargs(a,b) @@ -697,7 +697,7 @@ static void chkmail(Shell_t *shp, char *files) # define PSTAT 1 #endif -#if defined(_lib_fork) && !defined(_NEXT_SOURCE) +#if defined(_lib_fork) && !defined(_NEXT_SOURCE) && !defined(__FreeBSD__) /* * fix up command line for ps command * @@ -735,9 +735,7 @@ static void fixargs(char **argv, int mode) if(mode==0) { buff = argv[0]; - while(cp = *argv++) - command_len += strlen(cp)+1; - command_len -= 1; + command_len = environ[0] - buff - 1; return; } # endif /* PSTAT */ diff --git a/src/cmd/ksh93/tests/basic.sh b/src/cmd/ksh93/tests/basic.sh index f3c99b314104..fd43a0b6917d 100755 --- a/src/cmd/ksh93/tests/basic.sh +++ b/src/cmd/ksh93/tests/basic.sh @@ -708,7 +708,8 @@ getPsOutput() { 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 then expect='./atest 1 2' echo 'sleep 10; exit 0' >atest @@ -718,8 +719,6 @@ then expect='./atest 1 2' kill "$!" [[ $actual == "$expect" ]] || err_exit "ksh didn't rewrite argv correctly" \ "(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 unset -f getPsOutput