For iOS, build the Mac OS X platform code, not the generic Unix code.
authorRyan C. Gordon <icculus@icculus.org>
Mon, 25 Jun 2012 14:40:03 -0400
changeset 1291 854cdfefdf12
parent 1290 a47c773cc5ee
child 1292 edc8d57f03c3
For iOS, build the Mac OS X platform code, not the generic Unix code. Also removed some Carbon calls; use CoreFoundation instead. These functions exist in all versions of Mac OS X and iOS, and replace the Mac OS Classic APIs we were previously depending upon.
src/physfs_platforms.h
src/platform_macosx.c
--- a/src/physfs_platforms.h	Wed Jun 20 20:16:11 2012 -0400
+++ b/src/physfs_platforms.h	Mon Jun 25 14:40:03 2012 -0400
@@ -27,15 +27,12 @@
 #  error OS/2 support was dropped from PhysicsFS 2.1. Sorry.
 #elif ((defined __MACH__) && (defined __APPLE__))
 /* To check if iphone or not, we need to include this file */
-# include <TargetConditionals.h> 
-# if ((TARGET_IPHONE_SIMULATOR) || (TARGET_OS_IPHONE))
-#    define PHYSFS_PLATFORM_UNIX 1
-#    define PHYSFS_PLATFORM_POSIX 1
-#    define PHYSFS_NO_CDROM_SUPPORT 1
-#  else
-#    define PHYSFS_PLATFORM_MACOSX 1
-#    define PHYSFS_PLATFORM_POSIX 1
+#  include <TargetConditionals.h>
+#  if ((TARGET_IPHONE_SIMULATOR) || (TARGET_OS_IPHONE))
+#     define PHYSFS_NO_CDROM_SUPPORT 1
 #  endif
+#  define PHYSFS_PLATFORM_MACOSX 1
+#  define PHYSFS_PLATFORM_POSIX 1
 #elif defined(macintosh)
 #  error Classic Mac OS support was dropped from PhysicsFS 2.0. Move to OS X.
 #elif defined(__linux)
--- a/src/platform_macosx.c	Wed Jun 20 20:16:11 2012 -0400
+++ b/src/platform_macosx.c	Mon Jun 25 14:40:03 2012 -0400
@@ -11,11 +11,15 @@
 
 #ifdef PHYSFS_PLATFORM_MACOSX
 
-#include <Carbon/Carbon.h>
+#include <CoreFoundation/CoreFoundation.h>
+
+#if !defined(PHYSFS_NO_CDROM_SUPPORT)
 #include <IOKit/storage/IOMedia.h>
 #include <IOKit/storage/IOCDMedia.h>
 #include <IOKit/storage/IODVDMedia.h>
 #include <sys/mount.h>
+#endif
+
 #include <sys/stat.h>
 
 /* Seems to get defined in some system header... */
@@ -80,6 +84,7 @@
 } /* __PHYSFS_platformDeinit */
 
 
+
 /* CD-ROM detection code... */
 
 /*
@@ -87,6 +92,8 @@
  *  http://developer.apple.com/samplecode/Sample_Code/Devices_and_Hardware/Disks/VolumeToBSDNode/VolumeToBSDNode.c.htm
  */
 
+#if !defined(PHYSFS_NO_CDROM_SUPPORT)
+
 static int darwinIsWholeMedia(io_service_t service)
 {
     int retval = 0;
@@ -161,9 +168,12 @@
     return retval;
 } /* darwinIsMountedDisc */
 
+#endif /* !defined(PHYSFS_NO_CDROM_SUPPORT) */
+
 
 void __PHYSFS_platformDetectAvailableCDs(PHYSFS_StringCallback cb, void *data)
 {
+#if !defined(PHYSFS_NO_CDROM_SUPPORT)
     const char *devPrefix = "/dev/";
     const int prefixLen = strlen(devPrefix);
     mach_port_t masterPort = 0;
@@ -185,6 +195,7 @@
         if (darwinIsMountedDisc(dev, masterPort))
             cb(data, mnt);
     } /* for */
+#endif /* !defined(PHYSFS_NO_CDROM_SUPPORT) */
 } /* __PHYSFS_platformDetectAvailableCDs */
 
 
@@ -219,9 +230,7 @@
 
 char *__PHYSFS_platformCalcBaseDir(const char *argv0)
 {
-    ProcessSerialNumber psn = { 0, kCurrentProcess };
     struct stat statbuf;
-    FSRef fsref;
     CFRange cfrange;
     CFURLRef cfurl = NULL;
     CFStringRef cfstr = NULL;
@@ -230,9 +239,7 @@
     char *cstr = NULL;
     int rc = 0;
 
-    if (GetProcessBundleLocation(&psn, &fsref) != noErr)
-        BAIL_MACRO(PHYSFS_ERR_OS_ERROR, NULL);
-    cfurl = CFURLCreateFromFSRef(cfallocator, &fsref);
+    cfurl = CFBundleCopyBundleURL(CFBundleGetMainBundle());
     BAIL_IF_MACRO(cfurl == NULL, PHYSFS_ERR_OS_ERROR, NULL);
     cfstr = CFURLCopyFileSystemPath(cfurl, kCFURLPOSIXPathStyle);
     CFRelease(cfurl);