Alexandre Julliard : ntdll:
Remove the IOKit code and reuse the FreeBSD implementation for MacOS.
Alexandre Julliard
julliard at wine.codeweavers.com
Tue Sep 12 07:30:08 CDT 2006
Module: wine
Branch: master
Commit: c7279864991d18078f168265cddf320354b768d7
URL: http://source.winehq.org/git/?p=wine.git;a=commit;h=c7279864991d18078f168265cddf320354b768d7
Author: Alexandre Julliard <julliard at winehq.org>
Date: Tue Sep 12 09:43:37 2006 +0200
ntdll: Remove the IOKit code and reuse the FreeBSD implementation for MacOS.
FILE_GetDeviceInfo needs to be efficient, and IOKit is much too slow
to be used here.
---
dlls/ntdll/file.c | 85 ++++-------------------------------------------------
1 files changed, 6 insertions(+), 79 deletions(-)
diff --git a/dlls/ntdll/file.c b/dlls/ntdll/file.c
index dc8a6bc..c1acdd1 100644
--- a/dlls/ntdll/file.c
+++ b/dlls/ntdll/file.c
@@ -55,12 +55,6 @@ #ifdef HAVE_SYS_STATFS_H
# include <sys/statfs.h>
#endif
-#ifdef HAVE_IOKIT_IOKITLIB_H
-# include <IOKit/IOKitLib.h>
-# include <CoreFoundation/CFNumber.h> /* for kCFBooleanTrue, kCFBooleanFalse */
-# include <paths.h>
-#endif
-
#define NONAMELESSUNION
#define NONAMELESSSTRUCT
#include "ntstatus.h"
@@ -1629,7 +1623,7 @@ #if defined(linux) && defined(HAVE_FSTAT
info->DeviceType = FILE_DEVICE_DISK_FILE_SYSTEM;
break;
}
-#elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__)
+#elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__APPLE__)
struct statfs stfs;
/* The proper way to do this in FreeBSD seems to be with the
@@ -1638,23 +1632,15 @@ #elif defined(__FreeBSD__) || defined(__
*/
if (fstatfs( fd, &stfs ) < 0)
info->DeviceType = FILE_DEVICE_DISK_FILE_SYSTEM;
- else if (!strncmp("cd9660", stfs.f_fstypename,
- sizeof(stfs.f_fstypename)))
+ else if (!strncmp("cd9660", stfs.f_fstypename, sizeof(stfs.f_fstypename)) ||
+ !strncmp("udf", 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
- */
+ /* 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)))
+ else if (!strncmp("nfs", stfs.f_fstypename, sizeof(stfs.f_fstypename)) ||
+ !strncmp("nwfs", stfs.f_fstypename, sizeof(stfs.f_fstypename)))
{
info->DeviceType = FILE_DEVICE_NETWORK_FILE_SYSTEM;
info->Characteristics |= FILE_REMOTE_DEVICE;
@@ -1671,65 +1657,6 @@ #elif defined(__FreeBSD__) || defined(__
info->DeviceType = FILE_DEVICE_NETWORK_FILE_SYSTEM;
info->Characteristics |= FILE_REMOTE_DEVICE;
}
-#elif defined (__APPLE__)
- struct statfs stfs;
- kern_return_t kernResult = KERN_FAILURE;
- mach_port_t masterPort;
- char bsdName[6]; /* disk#\0 */
- const char *name;
-
- info->DeviceType = FILE_DEVICE_DISK_FILE_SYSTEM;
-
- if (fstatfs( fd, &stfs ) < 0) return FILE_GetNtStatus();
-
- /* stfs.f_type is reserved (always set to 0) so use IOKit */
- name = stfs.f_mntfromname + strlen(_PATH_DEV);
- memcpy( bsdName, name, min(strlen(name)+1,sizeof(bsdName)) );
- bsdName[sizeof(bsdName)-1] = 0;
-
- kernResult = IOMasterPort(MACH_PORT_NULL, &masterPort);
-
- if (kernResult == KERN_SUCCESS)
- {
- CFMutableDictionaryRef matching = IOBSDNameMatching(masterPort, 0, bsdName);
-
- if (matching)
- {
- CFStringRef type;
- CFMutableDictionaryRef properties;
- io_service_t devService = IOServiceGetMatchingService(masterPort, matching);
-
- if (IORegistryEntryCreateCFProperties(devService,
- &properties,
- kCFAllocatorDefault, 0) != KERN_SUCCESS)
- return FILE_GetNtStatus(); /* FIXME */
- if ( CFEqual(
- CFDictionaryGetValue(properties, CFSTR("Removable")),
- kCFBooleanTrue)
- ) info->Characteristics |= FILE_REMOVABLE_MEDIA;
-
- if ( CFEqual(
- CFDictionaryGetValue(properties, CFSTR("Writable")),
- kCFBooleanFalse)
- ) info->Characteristics |= FILE_READ_ONLY_DEVICE;
-
- /*
- NB : mounted disk image (.img/.dmg) don't provide specific type
- */
- if ( (type = CFDictionaryGetValue(properties, CFSTR("Type"))) )
- {
- if ( CFStringCompare(type, CFSTR("CD-ROM"), 0) == kCFCompareEqualTo
- || CFStringCompare(type, CFSTR("DVD-ROM"), 0) == kCFCompareEqualTo
- )
- {
- info->DeviceType = FILE_DEVICE_CD_ROM_FILE_SYSTEM;
- }
- }
-
- if (properties)
- CFRelease(properties);
- }
- }
#elif defined(sun)
/* Use dkio to work out device types */
{
More information about the wine-cvs
mailing list