Implement NtQueryVolumeInformationFile for type

FileFsDeviceInformation on FreeBSD.
This commit is contained in:
Juan Lang 2005-05-20 19:16:37 +00:00 committed by Alexandre Julliard
parent 5e6b43e2a0
commit f23e8fec10
1 changed files with 42 additions and 0 deletions

View File

@ -1505,6 +1505,48 @@ NTSTATUS WINAPI NtQueryVolumeInformationFile( HANDLE handle, PIO_STATUS_BLOCK io
info->DeviceType = FILE_DEVICE_DISK_FILE_SYSTEM;
break;
}
#elif defined(__FreeBSD__)
struct statfs stfs;
/* The proper way to do this in FreeBSD seems to be with the
* name rather than the type, since their linux-compatible
* fstatfs call converts the name to one of the Linux types.
*/
if (fstatfs( fd, &stfs ) < 0)
info->DeviceType = FILE_DEVICE_DISK_FILE_SYSTEM;
else if (!strncmp("cd9660", stfs.f_fstypename,
sizeof(stfs.f_fstypename)))
{
info->DeviceType = FILE_DEVICE_CD_ROM_FILE_SYSTEM;
/* Don't assume read-only, let the mount options set it
* below
*/
info->Characteristics |= FILE_REMOVABLE_MEDIA;
}
else if (!strncmp("nfs", stfs.f_fstypename,
sizeof(stfs.f_fstypename)))
{
info->DeviceType = FILE_DEVICE_NETWORK_FILE_SYSTEM;
info->Characteristics |= FILE_REMOTE_DEVICE;
}
else if (!strncmp("nwfs", stfs.f_fstypename,
sizeof(stfs.f_fstypename)))
{
info->DeviceType = FILE_DEVICE_NETWORK_FILE_SYSTEM;
info->Characteristics |= FILE_REMOTE_DEVICE;
}
else if (!strncmp("procfs", stfs.f_fstypename,
sizeof(stfs.f_fstypename)))
info->DeviceType = FILE_DEVICE_VIRTUAL_DISK;
else
info->DeviceType = FILE_DEVICE_DISK_FILE_SYSTEM;
if (stfs.f_flags & MNT_RDONLY)
info->Characteristics |= FILE_READ_ONLY_DEVICE;
if (!(stfs.f_flags & MNT_LOCAL))
{
info->DeviceType = FILE_DEVICE_NETWORK_FILE_SYSTEM;
info->Characteristics |= FILE_REMOTE_DEVICE;
}
#elif defined (__APPLE__)
# include <IOKit/IOKitLib.h>
# include <CoreFoundation/CFNumber.h> /* for kCFBooleanTrue, kCFBooleanFalse */