On Aug 1 13:58, Denis Excoffier wrote: > > Hello, > > I have a bash-4.2 (installed in /home/my), compiled with GCC 4.6.1 > directly from the sources. With this one, the following script: > > --------------------------------- > #!/home/my/bash-4.2 > > rm -rf /tmp/xxx > mkdir -p /tmp/xxx/folder1 > ln -s folder1 /tmp/xxx/folder > if [ -d /tmp/xxx/folder ]; then echo folder; else echo no folder; fi > if [ -x /tmp/xxx/folder ]; then echo execut; else echo no execut; fi > exit > --------------------------------- > > produces: > > folder > no execut > > while the regular /bin/bash (4.1.10), with the same script: > > --------------------------------- > #!/bin/bash > > rm -rf /tmp/xxx > mkdir -p /tmp/xxx/folder1 > ln -s folder1 /tmp/xxx/folder > if [ -d /tmp/xxx/folder ]; then echo folder; else echo no folder; fi > if [ -x /tmp/xxx/folder ]; then echo execut; else echo no execut; fi > exit > --------------------------------- > > produces (correctly): > > folder > execut > > > Could be a bug in bash-4.2, but... > i have noticed that it occurs only under the newest snapshots. > The change occurred between the 2011-07-21 and 2011-07-29 snapshots. > > My current /proc/version | tr -d '@' is: > CYGWIN_NT-5.1 version 1.7.10s(0.249/5/3) (cgf) (gcc version 4.3.4 20090804 > (release) 1 (GCC) ) 20110801 00:02:52 > > Could someone please have a look and reproduce this?
I can't since I have bash 4.1.10(4) from the distro installed. This is a nice case where you would have to debug this yourself since you have the binaries available to do it. However, at a first glance I doubt this is a Cygwin bug. Consider: - bash 4.1.10 returns "execut" - /bin/test from coreustils returns "execut" - My highly professional and streamlined testcase returns the correct result: #include <stdio.h> #include <unistd.h> #include <errno.h> #include <string.h> void my_access (const char *file, int flag, const char *fname, int effective) { int ret = effective ? access (file, flag) : eaccess (file, flag); printf ("%saccess (%s, %s) = %d", effective ? "e" : " ", file, fname, ret); if (ret) printf (" <%s>", strerror (errno)); fputc ('\n', stdout); } int main (int argc, char**argv) { int eff; if (argc > 1) for (eff = 0; eff < 2; ++eff) { my_access (argv[1], F_OK, "F_OK", eff); my_access (argv[1], R_OK, "R_OK", eff); my_access (argv[1], W_OK, "W_OK", eff); my_access (argv[1], X_OK, "X_OK", eff); } return 0; } $ gcc -g -o access access.c $ ./access /tmp/xxx/folder access (/tmp/xxx/folder, F_OK) = 0 access (/tmp/xxx/folder, R_OK) = 0 access (/tmp/xxx/folder, W_OK) = 0 access (/tmp/xxx/folder, X_OK) = 0 eaccess (/tmp/xxx/folder, F_OK) = 0 eaccess (/tmp/xxx/folder, R_OK) = 0 eaccess (/tmp/xxx/folder, W_OK) = 0 eaccess (/tmp/xxx/folder, X_OK) = 0 Corinna -- Corinna Vinschen Please, send mails regarding Cygwin to Cygwin Project Co-Leader cygwin AT cygwin DOT com Red Hat -- 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