Hi!

I just found a strange problem when using find on a FAT drive.
I got: "find: .\tmp changed during execution of find"

OK, I analyzed the problem a bit and found that lstat can give different inode numbers on fat, see the attached testcase.

To test this you have to have a directory called tmp in your
current working directory.

On a FAT drive you get:
$ /tmp/lstat_test.exe
Checking pathname: .\tmp
cur_stat_buf.st_ino: -1375632239
stat_buf.st_ino: 802199907
Error Inode numbers are different!

Bug or feature?

Volker

--
PGP/GPG key  (ID: 0x9F8A785D)  available  from  wwwkeys.de.pgp.net
key-fingerprint 550D F17E B082 A3E9 F913  9E53 3D35 C9BA 9F8A 785D
#include <sys/types.h>
#include <sys/stat.h>
#include <errno.h>

int
main (int argc, char **argv)
{
  char pathname[]=".\\tmp";
  long a,b;
  struct stat stat_buf, cur_stat_buf;

  /* get &stat_buf  */
  lstat (pathname, &stat_buf);

  if (chdir (pathname) < 0)
        {
          printf("Errno: %d Path: %s\n", errno, pathname);
          return;
        }

  /* get &cur_stat_buf. Should be the same as stat_buf. */
  if (lstat (".", &cur_stat_buf) != 0)
        printf("Errno: %d Path: %s\n", errno, pathname);
  /* Use a and b intsead of the variables, otherwise you get strange
     results with printf. */
  a = cur_stat_buf.st_ino;
  b = stat_buf.st_ino;
  printf("Checking pathname: %s\ncur_stat_buf.st_ino: %d\nstat_buf.st_ino: 
%d\n",pathname, a, b );
  if (cur_stat_buf.st_dev != stat_buf.st_dev ||
          cur_stat_buf.st_ino != stat_buf.st_ino)
        printf("Error Inode numbers are different!\n");
}

--
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple
Problem reports:       http://cygwin.com/problems.html
Documentation:         http://cygwin.com/docs.html
FAQ:                   http://cygwin.com/faq/

Reply via email to