bug-coreutils
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [bug]rm.c pwd.c getcwd.c don't work correctly in MSYS


From: Eric Blake
Subject: Re: [bug]rm.c pwd.c getcwd.c don't work correctly in MSYS
Date: Wed, 27 Apr 2005 17:46:36 +0000

> I have compiled a copy of coreutils CVS with msysDVLPR-1.0.0-alpha of 
> MSYS. After I run 'rm -r *' to delete a directory with subdirectory, I 
> deleted everything in the directory except for itself.
> 
> When I trace into this bug, I found the reason is because of getcwd.c:
>    when it does with a directory which is mounted, the MATCHING_INO (d, 
> thisino) is always false.

This is also a problem on modern cygwin, which may explain your problems with 
MSYS, since MSYS forked from an older version of cygwin.  In short, the cygwin 
code for readdir(2) populates the d_ino member using a hash algorithm, but in 
stat(2) it populates the inode information with what the underlying OS 
provides.  On Win98, the FAT filesystem has no concept of inode, so cygwin uses 
the same hash algorithm, and readdir() is accurate.  But on WinNT, where NTFS 
has a valid inode number, stat() and readdir() disagree about a file's inode, 
and d_ino should be ignored.  For cygwin, I worked around the issue by setting 
jm_cv_struct_dirent_d_ino=no before configuring, to force coreutils to ignore 
the d_ino member and fall back on stat instead.

Ultimately, it would be nicer if the gnulib module for detecting a working 
d_ino member would detect that cygwin's implementation is broken on NTFS drives.

--
Eric Blake






reply via email to

[Prev in Thread] Current Thread [Next in Thread]