[RFD]: GetFileAttributes and W2K
Corinna Vinschen
corinna@vinschen.de
Mon May 22 14:50:00 GMT 2000
I want to start a discussion because of what I read in MSDN
this morning:
Quote:
When GetFileAttributes is called on a directory
containing a volume mount point, the file attributes
returned are those of the directory where the volume
mount point is set, not those of the root directory
in the target mounted volume. To obtain the file
attributes of the mounted volume, call
GetVolumeNameForVolumeMountPoint to obtain the name
of the target volume. Then use the resulting name
in a call to GetFileAttributes. The result will be the
attributes of the root directory on the target volume.
This has the side effect in Cygwin that the usage of
GetFileAttributes in nearly all functions in Cygwin should be
replaced by a new function call (eg. cygwin_get_file_attributes)
with that function sth. like that:
cygwin_get_file_attributes(const char *name)
{
attr = GetFileAttributes(name);
if (attr != -1 && attr & DIRECTORY && attr & REPARSE_POINT)
{
newname = GetVolumeNameForVolumeMountPoint(name);
attr = GetFileAttributes(newname);
}
return attr;
}
Other problems are fhandler_disk_file::fstat() and stat_worker().
In both cases the handle to the wrong directory is opened. In
both cases we would need the new win32 name for further investigation.
Because all that would be too complicated (too many source
to change) I would like to suggest that we change path_conv
according to the above:
If the input file name is the cygwin name of a directory
which has a volume mounted to it, path_conv should return
the name of the mounted volume as w32 name.
Moreover some additions to w32api would be needed for W2K...
Corinna
More information about the Cygwin-developers
mailing list