Mail Archives: cygwin/2000/06/05/03:55:50
I have been looking into the problem with the "find" command returning error
messages like "No such file or directory".
http://sourceware.cygnus.com/ml/cygwin/2000-05/msg01156.html
(I'll admit to being a newbie to cygwin upfront, so apologies for any
obvious mistakes in what follows. This problem was biting me as I got
started with cygwin so I took it as a challenge to get my feet wet.)
I did some tracing through find and determined that what is happening
relates to chdir() and mounted directories. Here is my mount output (after a
default net setup):
Device Directory Type Flags
C:\bin /usr/bin user binmode
C:\lib /usr/lib user binmode
c: / user binmode
(Also, 569k 2000/05/15 C:\bin\cygwin1.dll)
Assume autoexec.bat exists in c:\ (this is in Win98).
The following program illustrates the problem:
#include <stdio.h>
#include <sys/stat.h>
#include <sys/unistd.h>
int main(int argc, char * argv[])
{
struct stat statBuf;
int i;
char dir[1024] = {'\0'};
chdir("/");
getcwd(dir, sizeof(dir));
printf("cwd: %s\n", dir);
for (i = 1; i < argc; i++) {
if (lstat(argv[i], &statBuf) != 0) {
fprintf(stderr, "stat failed on %s\n", argv[i]);
exit(1);
}
if (S_ISDIR(statBuf.st_mode)) {
printf("%s is a directory\n", argv[i]);
chdir(argv[i]);
chdir("..");
getcwd(dir, sizeof(dir));
printf("cwd: %s\n", dir);
}
}
return (0);
}
The following results when run:
/% ~/stat bin autoexec.bat
cwd: /
bin is a directory
cwd: /usr
stat failed on autoexec.bat
/% ~/stat windows autoexec.bat
cwd: /
windows is a directory
cwd: /
/%
Note that bin is mounted as /usr/bin while windows has no mount point. The
relative chdir(..) gets confused and makes cwd /usr instead of c:\
(/). Obviously, autoexec.bat does not exist in /usr so the lstat()
fails. This is what essentially happens in find, as well.
Note that on the same system, the following works correctly:
/% cd bin
/bin% cd ..
/% cygpath -w /bin
c:\bin
/% cygpath -w /usr/bin
C:\bin
I looked through path.cc, but w/o being able to trace through the code in
gdb, I do not grok what is happening in path_conv::check(). (I have not
figured out how to build and debug cygwin1.dll yet. Any hints?)
Hopefully someone more up on the intricacies of path.cc and mounts can
sort this one out.
Mark
--
Want to unsubscribe from this list?
Send a message to cygwin-unsubscribe AT sourceware DOT cygnus DOT com
- Raw text -