Commit f23e8fec authored by Juan Lang's avatar Juan Lang Committed by Alexandre Julliard

Implement NtQueryVolumeInformationFile for type

FileFsDeviceInformation on FreeBSD.
parent 5e6b43e2
......@@ -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 */
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment