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