diff --git a/src/cmd/ksh93/Mamfile b/src/cmd/ksh93/Mamfile index 692652fb6..8665b72ba 100644 --- a/src/cmd/ksh93/Mamfile +++ b/src/cmd/ksh93/Mamfile @@ -623,6 +623,10 @@ make FEATURE/pstat implicit meta FEATURE/pstat >FEATURE/% pstat exec - iffe -v -c '${CC} ${mam_cc_FLAGS} ${KSH_RELFLAGS} ${CCFLAGS} ${LDFLAGS} ' ref ${mam_cc_L+-L.} ${mam_cc_L+-L${INSTALLROOT}/lib} -I${PACKAGE_ast_INCLUDE} -I${INSTALLROOT}/include ${mam_libdll} ${mam_libcmd} ${mam_libast} ${mam_libm} ${mam_libnsl} : def pstat done FEATURE/pstat generated +make FEATURE/setproctitle implicit +meta FEATURE/setproctitle >FEATURE/% setproctitle +exec - iffe -v -c '${CC} ${mam_cc_FLAGS} ${KSH_RELFLAGS} ${CCFLAGS} ${LDFLAGS} ' ref ${mam_cc_L+-L.} ${mam_cc_L+-L${INSTALLROOT}/lib} -I${PACKAGE_ast_INCLUDE} -I${INSTALLROOT}/include ${mam_libdll} ${mam_libcmd} ${mam_libast} ${mam_libm} ${mam_libnsl} : def setproctitle +done FEATURE/setproctitle generated prev FEATURE/time implicit make include/timeout.h implicit done include/timeout.h diff --git a/src/cmd/ksh93/sh/main.c b/src/cmd/ksh93/sh/main.c index 389eb3aa9..9077c60fc 100644 --- a/src/cmd/ksh93/sh/main.c +++ b/src/cmd/ksh93/sh/main.c @@ -43,6 +43,7 @@ #include "timeout.h" #include "FEATURE/time" #include "FEATURE/pstat" +#include "FEATURE/setproctitle" #include "FEATURE/execargs" #include "FEATURE/externs" #ifdef _hdr_nc @@ -52,7 +53,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) && !defined(__FreeBSD__) && !defined(__DragonFly__) && !defined(__sun) +#if defined(_lib_fork) && !defined(_NEXT_SOURCE) && !defined(__USLC__) && !defined(__sun) static void fixargs(char**,int); #else # define fixargs(a,b) @@ -714,11 +715,11 @@ static void fixargs(char **argv, int mode) #if EXECARGS *execargs=(char *)argv; #else - static char *buff; - static int command_len; register char *cp; int offset=0,size; # ifdef PSTAT + static int command_len; + char *buff; union pstun un; if(mode==0) { @@ -731,7 +732,14 @@ static void fixargs(char **argv, int mode) } stakseek(command_len+2); buff = stakseek(0); +# elif _lib_setproctitle +# define command_len 255 + char buff[command_len + 1]; + if(mode==0) + return; # else + static int command_len; + static char *buff; if(mode==0) { buff = argv[0]; @@ -750,10 +758,12 @@ static void fixargs(char **argv, int mode) buff[offset++] = ' '; } offset--; - memset(&buff[offset], 0, command_len - offset); + memset(&buff[offset], 0, command_len - offset + 1); # ifdef PSTAT un.pst_command = stakptr(0); pstat(PSTAT_SETCMD,un,0,0,0); +# elif _lib_setproctitle + setproctitle("%s",buff); # endif /* PSTAT */ #endif /* EXECARGS */ } diff --git a/src/cmd/ksh93/tests/basic.sh b/src/cmd/ksh93/tests/basic.sh index 6c4f71bfc..f917c8b81 100755 --- a/src/cmd/ksh93/tests/basic.sh +++ b/src/cmd/ksh93/tests/basic.sh @@ -705,13 +705,14 @@ actual=$(exptest foo) getPsOutput() { # UNIX95=1 makes this work on HP-UX. actual=$(UNIX95=1 ps -o args= -p "$1" 2>&1) - # BSD 'ps' appends " (ksh)". Remove. - [[ $actual =~ \(.*\)$ ]] && actual=${actual%\(*} + # BSD: setproctitle(3) prepends "ksh:" and ps(1) appends " (ksh)". Remove. + actual=${actual#'ksh: '} + actual=${actual%' (ksh)'} # Some 'ps' implementations add leading and/or trailing whitespace. Remove. while [[ $actual == [[:space:]]* ]]; do actual=${actual#?}; done while [[ $actual == *[[:space:]] ]]; do actual=${actual%?}; done } -if [[ ! $(uname -s) =~ ^(FreeBSD|DragonFly|SunOS)$ ]] && +if [[ ! $(uname -s) =~ ^(SunOS|UnixWare)$ ]] && getPsOutput "$$" && [[ "$SHELL $0" == "$actual"* ]] # "$SHELL $0" is how shtests invokes this script then expect='./atest 1 2'