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