execvp* and spawnvp* react differently to same PATH environment variable
Ken Brown
kbrown@cornell.edu
Wed Oct 9 16:43:00 GMT 2019
On 10/7/2019 4:51 PM, donpedro.tdcadsl.dk via cygwin wrote:
> Hi all,
>
> While working on something i noticed that execvp* and spawnvp* behave differently with regards to $PATH, which i think is not correct.
>
> ----------------------------------------------
>
> 1) The execvp* functions are called like this:
>
> return spawnve ( _P_OVERLAY | _P_PATH_TYPE_EXEC ,
> find_exec ( file , buf , "PATH" , FE_NNF ) ? : "" ,
> argv , envp );
>
> This calls find_exec() with FE_NNF, which causes the path to be NULL if not found in $PATH.
>
> This later causes cygwin to fail correctly if the program is not in $PATH.
>
> ----------------------------------------------
>
> 2) The spawnvp* functions are called like this:
>
> return spawnve (mode | _P_PATH_TYPE_EXEC, find_exec (file, buf), argv, cur_environ ());
>
> This does _not_ calls find_exec() with FE_NNF which causes the path to be the posix form, as it is not found in path.
>
> This later causes cygwin to find the program even though it was not in $PATH which seems wrong.
>
> ----------------------------------------------
>
> This seems like a bug in spawnvp* functions unless i am missing something?
I think you're probably right. The use of FE_NNF in execvp* was introduced in
commit 6d63272b. I suspect it was just an oversight that the spawvp* functions
weren't changed in the same way. I'll send a patch to the cygwin-patches list
to fix this. When Corinna returns, she can tell us whether there's some reason
that spawnvp should be different from execvp.
Ken
--
Problem reports: http://cygwin.com/problems.html
FAQ: http://cygwin.com/faq/
Documentation: http://cygwin.com/docs.html
Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple
More information about the Cygwin
mailing list