On Mon, 27 Mar 2023 20:06:30 +0200, Omar Polo wrote:

> Is _PATH_BSHELL portable though?  I can see a few stuff that uses it
> (vi among others) but I'm not sure.

The paths.h header is a BSD invention, though it may be present on
some other systems.  I don't think that's a reason not to use it
though.

> Also, if you look at the callers of shellcmdoutput() they all prepare
> the argv array as {"sh", "-c", "command provided", NULL} so I'm
> wondering if we should just ignore $SHELL and always use /bin/sh, or
> change that "sh" accordingly to $SHELL.

It might be best to use the basename of the actual shell for argv[0].
Our ksh for instance has slightly different behavior when invoked
as sh.

OK millert@ for the diff as-is.

 - todd

> Index: region.c
> ===================================================================
> RCS file: /cvs/src/usr.bin/mg/region.c,v
> retrieving revision 1.42
> diff -u -p -r1.42 region.c
> --- region.c  27 Mar 2023 17:54:20 -0000      1.42
> +++ region.c  27 Mar 2023 17:58:11 -0000
> @@ -15,6 +15,7 @@
>  #include <sys/wait.h>
>  #include <errno.h>
>  #include <fcntl.h>
> +#include <paths.h>
>  #include <poll.h>
>  #include <signal.h>
>  #include <stdio.h>
> @@ -483,7 +484,8 @@ shellcmdoutput(char* const argv[], char*
>               return (FALSE);
>       }
>  
> -     shellp = getenv("SHELL");
> +     if ((shellp = getenv("SHELL")) == NULL)
> +             shellp = _PATH_BSHELL;
>  
>       ret = pipeio(shellp, argv, text, len, bp);
>  
> @@ -529,8 +531,6 @@ pipeio(const char* const path, char* con
>               if (dup2(s[1], STDOUT_FILENO) == -1)
>                       _exit(1);
>               if (dup2(s[1], STDERR_FILENO) == -1)
> -                     _exit(1);
> -             if (path == NULL)
>                       _exit(1);
>  
>               execv(path, argv);
>

Reply via email to