From a554b1647c9d90567f070dd4d8638a97a003ef5d Mon Sep 17 00:00:00 2001
From: Twinaphex <libretro@gmail.com>
Date: Mon, 20 Apr 2015 14:05:55 +0200
Subject: [PATCH] Move code around - turn platform_apple.c into
 platform_apple.m

---
 .../{platform_apple.c => platform_apple.m}    | 119 +++++++++++++++++-
 griffin/griffin.c                             |   2 -
 griffin/griffin_objc.m                        |   4 +
 ui/drivers/cocoa/CFExtensions.h               |  68 ----------
 ui/drivers/cocoa/cocoa_common.h               |   1 -
 ui/drivers/cocoa/cocoa_common.m               |  79 ------------
 6 files changed, 122 insertions(+), 151 deletions(-)
 rename frontend/drivers/{platform_apple.c => platform_apple.m} (70%)
 delete mode 100644 ui/drivers/cocoa/CFExtensions.h

diff --git a/frontend/drivers/platform_apple.c b/frontend/drivers/platform_apple.m
similarity index 70%
rename from frontend/drivers/platform_apple.c
rename to frontend/drivers/platform_apple.m
index 845e0bb5d0..b5ea2bafb4 100644
--- a/frontend/drivers/platform_apple.c
+++ b/frontend/drivers/platform_apple.m
@@ -16,10 +16,13 @@
  */
 
 #include <CoreFoundation/CoreFoundation.h>
+#include <CoreFoundation/CFArray.h>
 #include <retro_miscellaneous.h>
 #include <file/file_path.h>
 
-#include "../../ui/drivers/cocoa/CFExtensions.h"
+#ifdef __OBJC__
+#include <Foundation/NSPathUtilities.h>
+#endif
 
 #include "../frontend_driver.h"
 #include "../../ui/ui_companion_driver.h"
@@ -36,8 +39,122 @@
 #include <Carbon/Carbon.h>
 #include <IOKit/ps/IOPowerSources.h>
 #include <IOKit/ps/IOPSKeys.h>
+
+#include <sys/sysctl.h>
 #endif
 
+typedef enum
+{
+    CFApplicationDirectory = 1,             // supported applications (Applications)
+    CFDemoApplicationDirectory,             // unsupported applications, demonstration versions (Demos)
+    CFDeveloperApplicationDirectory,        // developer applications (Developer/Applications). DEPRECATED - there is no one single Developer directory.
+    CFAdminApplicationDirectory,            // system and network administration applications (Administration)
+    CFLibraryDirectory,                     // various documentation, support, and configuration files, resources (Library)
+    CFDeveloperDirectory,                   // developer resources (Developer) DEPRECATED - there is no one single Developer directory.
+    CFUserDirectory,                        // user home directories (Users)
+    CFDocumentationDirectory,               // documentation (Documentation)
+    CFDocumentDirectory,                    // documents (Documents)
+    CFCoreServiceDirectory,                 // location of CoreServices directory (System/Library/CoreServices)
+    CFAutosavedInformationDirectory = 11,   // location of autosaved documents (Documents/Autosaved)
+    CFDesktopDirectory = 12,                // location of user's desktop
+    CFCachesDirectory = 13,                 // location of discardable cache files (Library/Caches)
+    CFApplicationSupportDirectory = 14,     // location of application support files (plug-ins, etc) (Library/Application Support)
+    CFDownloadsDirectory = 15,              // location of the user's "Downloads" directory
+    CFInputMethodsDirectory = 16,           // input methods (Library/Input Methods)
+    CFMoviesDirectory = 17,                 // location of user's Movies directory (~/Movies)
+    CFMusicDirectory = 18,                  // location of user's Music directory (~/Music)
+    CFPicturesDirectory = 19,               // location of user's Pictures directory (~/Pictures)
+    CFPrinterDescriptionDirectory = 20,     // location of system's PPDs directory (Library/Printers/PPDs)
+    CFSharedPublicDirectory = 21,           // location of user's Public sharing directory (~/Public)
+    CFPreferencePanesDirectory = 22,        // location of the PreferencePanes directory for use with System Preferences (Library/PreferencePanes)
+    CFApplicationScriptsDirectory = 23,     // location of the user scripts folder for the calling application (~/Library/Application Scripts/code-signing-id)
+    CFItemReplacementDirectory = 99,	     // For use with NSFileManager's URLForDirectory:inDomain:appropriateForURL:create:error:
+    CFAllApplicationsDirectory = 100,       // all directories where applications can occur
+    CFAllLibrariesDirectory = 101,          // all directories where resources can occur
+    CFTrashDirectory = 102                  // location of Trash directory
+} CFSearchPathDirectory;
+
+typedef enum
+{
+    CFUserDomainMask = 1,       // user's home directory --- place to install user's personal items (~)
+    CFLocalDomainMask = 2,      // local to the current machine --- place to install items available to everyone on this machine (/Library)
+    CFNetworkDomainMask = 4,    // publically available location in the local area network --- place to install items available on the network (/Network)
+    CFSystemDomainMask = 8,     // provided by Apple, unmodifiable (/System)
+    CFAllDomainsMask = 0x0ffff  // all domains: all of the above and future items
+} CFDomainMask;
+
+#ifndef __has_feature
+/* Compatibility with non-Clang compilers. */
+#define __has_feature(x) 0
+#endif
+
+#ifndef CF_RETURNS_RETAINED
+#if __has_feature(attribute_cf_returns_retained)
+#define CF_RETURNS_RETAINED __attribute__((cf_returns_retained))
+#else
+#define CF_RETURNS_RETAINED
+#endif
+#endif
+
+NS_INLINE CF_RETURNS_RETAINED CFTypeRef CFBridgingRetainCompat(id X)
+{
+#if __has_feature(objc_arc)
+	return (__bridge_retained CFTypeRef)X;
+#else
+	return X;
+#endif
+}
+
+static NSSearchPathDirectory NSConvertFlagsCF(unsigned flags)
+{
+    switch (flags)
+    {
+        case CFDocumentDirectory:
+            return NSDocumentDirectory;
+    }
+    
+    return 0;
+}
+
+static NSSearchPathDomainMask NSConvertDomainFlagsCF(unsigned flags)
+{
+    switch (flags)
+    {
+	    case CFUserDomainMask:
+		    return NSUserDomainMask;
+    }
+    
+    return 0;
+}
+
+void CFSearchPathForDirectoriesInDomains(unsigned flags,
+        unsigned domain_mask, unsigned expand_tilde,
+        char *buf, size_t sizeof_buf)
+{
+   CFTypeRef array_val = (CFTypeRef)CFBridgingRetainCompat(
+         NSSearchPathForDirectoriesInDomains(NSConvertFlagsCF(flags),
+            NSConvertDomainFlagsCF(domain_mask), (BOOL)expand_tilde));
+   CFArrayRef   array  = array_val ? CFRetain(array_val) : NULL;
+   CFTypeRef path_val  = (CFTypeRef)CFArrayGetValueAtIndex(array, 0);
+   CFStringRef    path = path_val ? CFRetain(path_val) : NULL;
+   if (!path || !array)
+      return;
+   
+   CFStringGetCString(path, buf, sizeof_buf, kCFStringEncodingUTF8);
+   CFRelease(path);
+   CFRelease(array);
+}
+
+void CFTemporaryDirectory(char *buf, size_t sizeof_buf)
+{
+#if __has_feature(objc_arc)
+    CFStringRef path = (__bridge_retained CFStringRef)NSTemporaryDirectory();
+#else
+    CFStringRef path = (CFStringRef)NSTemporaryDirectory();
+#endif
+    CFStringGetCString(path, buf, sizeof_buf, kCFStringEncodingUTF8);
+}
+
 #if defined(IOS)
 void get_ios_version(int *major, int *minor);
 
diff --git a/griffin/griffin.c b/griffin/griffin.c
index 1b09b2f0fe..ae77625b9a 100644
--- a/griffin/griffin.c
+++ b/griffin/griffin.c
@@ -609,8 +609,6 @@ FRONTEND
 #include "../frontend/drivers/platform_ctr.c"
 #elif defined(__QNX__)
 #include "../frontend/drivers/platform_qnx.c"
-#elif defined(__APPLE__)
-#include "../frontend/drivers/platform_apple.c"
 #elif defined(ANDROID)
 #include "../frontend/drivers/platform_android.c"
 #elif defined(__linux__) && !defined(ANDROID)
diff --git a/griffin/griffin_objc.m b/griffin/griffin_objc.m
index 1c351fb1d1..8cb7d1ee10 100644
--- a/griffin/griffin_objc.m
+++ b/griffin/griffin_objc.m
@@ -23,6 +23,10 @@
 #define __IPHONE_OS_VERSION_MAX_ALLOWED 00000
 #endif
 
+#if defined(__APPLE__)
+#include "../frontend/drivers/platform_apple.m"
+#endif
+
 #if defined(HAVE_COCOATOUCH) || defined(HAVE_COCOA)
 #include "../gfx/drivers_context/apple_cocoa_gl.m"
 #include "../ui/drivers/cocoa/cocoa_common.m"
diff --git a/ui/drivers/cocoa/CFExtensions.h b/ui/drivers/cocoa/CFExtensions.h
deleted file mode 100644
index c76787a9cd..0000000000
--- a/ui/drivers/cocoa/CFExtensions.h
+++ /dev/null
@@ -1,68 +0,0 @@
-/*  RetroArch - A frontend for libretro.
- *  Copyright (C) 2013-2014 - Jason Fetters
- *  Copyright (C) 2011-2015 - Daniel De Matteis
- * 
- *  RetroArch is free software: you can redistribute it and/or modify it under the terms
- *  of the GNU General Public License as published by the Free Software Found-
- *  ation, either version 3 of the License, or (at your option) any later version.
- *
- *  RetroArch is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
- *  without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
- *  PURPOSE.  See the GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License along with RetroArch.
- *  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef __COREFOUNDATION_TO_NSFOUNDATION_EXTENSIONS_H
-#define __COREFOUNDATION_TO_NSFOUNDATION_EXTENSIONS_H
-
-#include <CoreFoundation/CoreFoundation.h>
-#include <CoreFoundation/CFArray.h>
-
-typedef enum
-{
-    CFApplicationDirectory = 1,             // supported applications (Applications)
-    CFDemoApplicationDirectory,             // unsupported applications, demonstration versions (Demos)
-    CFDeveloperApplicationDirectory,        // developer applications (Developer/Applications). DEPRECATED - there is no one single Developer directory.
-    CFAdminApplicationDirectory,            // system and network administration applications (Administration)
-    CFLibraryDirectory,                     // various documentation, support, and configuration files, resources (Library)
-    CFDeveloperDirectory,                   // developer resources (Developer) DEPRECATED - there is no one single Developer directory.
-    CFUserDirectory,                        // user home directories (Users)
-    CFDocumentationDirectory,               // documentation (Documentation)
-    CFDocumentDirectory,                    // documents (Documents)
-    CFCoreServiceDirectory,                 // location of CoreServices directory (System/Library/CoreServices)
-    CFAutosavedInformationDirectory = 11,   // location of autosaved documents (Documents/Autosaved)
-    CFDesktopDirectory = 12,                // location of user's desktop
-    CFCachesDirectory = 13,                 // location of discardable cache files (Library/Caches)
-    CFApplicationSupportDirectory = 14,     // location of application support files (plug-ins, etc) (Library/Application Support)
-    CFDownloadsDirectory = 15,              // location of the user's "Downloads" directory
-    CFInputMethodsDirectory = 16,           // input methods (Library/Input Methods)
-    CFMoviesDirectory = 17,                 // location of user's Movies directory (~/Movies)
-    CFMusicDirectory = 18,                  // location of user's Music directory (~/Music)
-    CFPicturesDirectory = 19,               // location of user's Pictures directory (~/Pictures)
-    CFPrinterDescriptionDirectory = 20,     // location of system's PPDs directory (Library/Printers/PPDs)
-    CFSharedPublicDirectory = 21,           // location of user's Public sharing directory (~/Public)
-    CFPreferencePanesDirectory = 22,        // location of the PreferencePanes directory for use with System Preferences (Library/PreferencePanes)
-    CFApplicationScriptsDirectory = 23,     // location of the user scripts folder for the calling application (~/Library/Application Scripts/code-signing-id)
-    CFItemReplacementDirectory = 99,	     // For use with NSFileManager's URLForDirectory:inDomain:appropriateForURL:create:error:
-    CFAllApplicationsDirectory = 100,       // all directories where applications can occur
-    CFAllLibrariesDirectory = 101,          // all directories where resources can occur
-    CFTrashDirectory = 102                  // location of Trash directory
-} CFSearchPathDirectory;
-
-typedef enum
-{
-    CFUserDomainMask = 1,       // user's home directory --- place to install user's personal items (~)
-    CFLocalDomainMask = 2,      // local to the current machine --- place to install items available to everyone on this machine (/Library)
-    CFNetworkDomainMask = 4,    // publically available location in the local area network --- place to install items available on the network (/Network)
-    CFSystemDomainMask = 8,     // provided by Apple, unmodifiable (/System)
-    CFAllDomainsMask = 0x0ffff  // all domains: all of the above and future items
-} CFDomainMask;
-
-void CFSearchPathForDirectoriesInDomains(unsigned flags,
-      unsigned domain_mask, unsigned expand_tilde, char *buf, size_t sizeof_buf);
-
-void CFTemporaryDirectory(char *buf, size_t sizeof_buf);
-
-#endif
diff --git a/ui/drivers/cocoa/cocoa_common.h b/ui/drivers/cocoa/cocoa_common.h
index a28283a839..9a046aea17 100644
--- a/ui/drivers/cocoa/cocoa_common.h
+++ b/ui/drivers/cocoa/cocoa_common.h
@@ -19,7 +19,6 @@
 
 #include <Foundation/Foundation.h>
 
-#include "CFExtensions.h"
 #include "../../core_info.h"
 #include "../../playlist.h"
 #include "../../settings.h"
diff --git a/ui/drivers/cocoa/cocoa_common.m b/ui/drivers/cocoa/cocoa_common.m
index fa5119dcd5..1ce96d0e29 100644
--- a/ui/drivers/cocoa/cocoa_common.m
+++ b/ui/drivers/cocoa/cocoa_common.m
@@ -16,86 +16,7 @@
 
 #import <AvailabilityMacros.h>
 #include <sys/stat.h>
-#include <CoreFoundation/CFArray.h>
-#include <CoreFoundation/CFString.h>
-#import <Foundation/NSPathUtilities.h>
 #include "cocoa_common.h"
-#include "../../general.h"
-#include "../../runloop.h"
-#include "../../frontend/frontend.h"
-#include "../../gfx/video_context_driver.h"
-
-#ifndef __has_feature
-/* Compatibility with non-Clang compilers. */
-#define __has_feature(x) 0
-#endif
-
-#ifndef CF_RETURNS_RETAINED
-#if __has_feature(attribute_cf_returns_retained)
-#define CF_RETURNS_RETAINED __attribute__((cf_returns_retained))
-#else
-#define CF_RETURNS_RETAINED
-#endif
-#endif
-
-NS_INLINE CF_RETURNS_RETAINED CFTypeRef CFBridgingRetainCompat(id X)
-{
-#if __has_feature(objc_arc)
-	return (__bridge_retained CFTypeRef)X;
-#else
-	return X;
-#endif
-}
-
-static NSSearchPathDirectory NSConvertFlagsCF(unsigned flags)
-{
-    switch (flags)
-    {
-        case CFDocumentDirectory:
-            return NSDocumentDirectory;
-    }
-    
-    return 0;
-}
-
-static NSSearchPathDomainMask NSConvertDomainFlagsCF(unsigned flags)
-{
-    switch (flags)
-    {
-        case CFUserDomainMask:
-            return NSUserDomainMask;
-    }
-    
-    return 0;
-}
-
-void CFTemporaryDirectory(char *buf, size_t sizeof_buf)
-{
-#if __has_feature(objc_arc)
-    CFStringRef path = (__bridge_retained CFStringRef)NSTemporaryDirectory();
-#else
-    CFStringRef path = (CFStringRef)NSTemporaryDirectory();
-#endif
-    CFStringGetCString(path, buf, sizeof_buf, kCFStringEncodingUTF8);
-}
-
-void CFSearchPathForDirectoriesInDomains(unsigned flags,
-        unsigned domain_mask, unsigned expand_tilde,
-        char *buf, size_t sizeof_buf)
-{
-   CFTypeRef array_val = (CFTypeRef)CFBridgingRetainCompat(
-         NSSearchPathForDirectoriesInDomains(NSConvertFlagsCF(flags),
-            NSConvertDomainFlagsCF(domain_mask), (BOOL)expand_tilde));
-   CFArrayRef   array  = array_val ? CFRetain(array_val) : NULL;
-   CFTypeRef path_val  = (CFTypeRef)CFArrayGetValueAtIndex(array, 0);
-   CFStringRef    path = path_val ? CFRetain(path_val) : NULL;
-   if (!path || !array)
-      return;
-   
-   CFStringGetCString(path, buf, sizeof_buf, kCFStringEncodingUTF8);
-   CFRelease(path);
-   CFRelease(array);
-}
 
 void apple_display_alert(const char *message, const char *title)
 {