Cygwin's execlp() does not work with an empty $PATH element

Lavrentiev, Anton (NIH/NLM/NCBI) [C] lavr@ncbi.nlm.nih.gov
Sun Jun 26 16:26:35 GMT 2022


There's another discrepancy for execlp() on Cygwin.  In the absence of the PATH environment, it should consider the current directory first, then look up somewhere else.
And it does so on Linux!  Not on Cygwin, though.  Please take a look below:

Linux:

$ ./hello
exec: No such file or directory
$ unset PATH
$ echo $PATH

$ ./hello
Hello

Cygwin:

$ ./hello
exec: No such file or directory
$ unset PATH

$ echo $PATH
$ ./hello
exec: No such file or directory

Anton Lavrentiev
Contractor NIH/NLM/NCBI

> -----Original Message-----
> From: Cygwin <cygwin-bounces+lavr=ncbi.nlm.nih.gov@cygwin.com> On Behalf Of Lavrentiev,
> Anton (NIH/NLM/NCBI) [C] via Cygwin
> Sent: Sunday, June 26, 2022 11:10 AM
> To: 'cygwin@cygwin.com' <cygwin@cygwin.com>
> Subject: [EXTERNAL] Cygwin's execlp() does not work with an empty $PATH element
> 
> Hi all,
> 
> An empty PATH element (":xxx" or "xxx::xxx" or "xxx:") is to be considered as the current
> directory (from the very first days of Unix).
> 
> However, Cygwin does not seem to obey the rule.
> 
> Consider the following simple C program:
> 
> $ cat hello.c
> #include <stdio.h>
> #include <stdlib.h>
> #include <string.h>
> #include <unistd.h>
> 
> int main(int argc, const char* argv[])
> {
>     if (argc < 2) {
>         const char* prog = strrchr(argv[0], '/');
>         if (!prog++)
>            prog = argv[0];
>         execlp(prog, prog, "Hello", NULL);  // execute just by the program name
>         perror("exec");
>         return 1;
>     }
>     printf("%s\n", argv[1]);
>     return 0;
> }
> 
> Now compare the execution on Linux and Cygwin:
> 
> Linux:
> 
> $ gcc -Wall -o hello hello.c
> $ hello
> bash: hello: command not found
> $ ./hello
> exec: No such file or directory
> $ PATH=".:$PATH" ./hello
> Hello
> $ PATH=":$PATH" ./hello
> Hello
> $ PATH="${PATH}:" ./hello
> Hello
> 
> Cygwin:
> 
> $ gcc -Wall -o hello hello.c
> $ hello
> -bash: hello: command not found
> $ ./hello
> exec: No such file or directory
> $ PATH=".:$PATH" ./hello
> Hello
> $ PATH=":$PATH" ./hello
> exec: No such file or directory
> $ PATH="${PATH}:" ./hello
> exec: No such file or directory
> 
> As you can see, the execution failed when an empty PATH element was added on Cygwin
> (yet it was perfectly fine on Linux).
> 
> Anton Lavrentiev
> Contractor NIH/NLM/NCBI
> 
> 
> --
> Problem reports:
> https://gcc02.safelinks.protection.outlook.com/?url=https%3A%2F%2Fcygwin.com%2Fproblems.ht
> ml&data=05%7C01%7Clavr%40ncbi.nlm.nih.gov%7C4f115d6612d84622f36e08da578602f6%7C14b7757
> 8977342d58507251ca2dc2b06%7C0%7C0%7C637918530342421084%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4
> wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000%7C%7C%7C&sdata=5W%2FkRL
> P2C5dOS1mAwXbXjeW3jLCNm3Kn%2BCFMJbPlgyo%3D&reserved=0
> FAQ:
> https://gcc02.safelinks.protection.outlook.com/?url=https%3A%2F%2Fcygwin.com%2Ffaq%2F&
> data=05%7C01%7Clavr%40ncbi.nlm.nih.gov%7C4f115d6612d84622f36e08da578602f6%7C14b77578977342
> d58507251ca2dc2b06%7C0%7C0%7C637918530342421084%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMD
> AiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000%7C%7C%7C&sdata=vYE4PpDSlT6%2Fw
> jApZyC8r1BjQULY4MmBH2nUJIXE3BQ%3D&reserved=0
> Documentation:
> https://gcc02.safelinks.protection.outlook.com/?url=https%3A%2F%2Fcygwin.com%2Fdocs.html&a
> mp;data=05%7C01%7Clavr%40ncbi.nlm.nih.gov%7C4f115d6612d84622f36e08da578602f6%7C14b77578977
> 342d58507251ca2dc2b06%7C0%7C0%7C637918530342421084%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjA
> wMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000%7C%7C%7C&sdata=pbcpGI8Ykvb5
> UQlP%2FOT6G2ZUXloiARlZvax0NhyO2t0%3D&reserved=0
> Unsubscribe info:
> https://gcc02.safelinks.protection.outlook.com/?url=https%3A%2F%2Fcygwin.com%2Fml%2F%23uns
> ubscribe-
> simple&data=05%7C01%7Clavr%40ncbi.nlm.nih.gov%7C4f115d6612d84622f36e08da578602f6%7C14b
> 77578977342d58507251ca2dc2b06%7C0%7C0%7C637918530342421084%7CUnknown%7CTWFpbGZsb3d8eyJWIjo
> iMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000%7C%7C%7C&sdata=DGMP
> SVCqWNO6qKi6BCqKvvWxBD4x2m2vUfBCIHfI9Ts%3D&reserved=0



More information about the Cygwin mailing list