diff --git a/apple/common/CFExtensions.m b/apple/common/CFExtensions.m index 2a1363d194..f9d6bfb4ae 100644 --- a/apple/common/CFExtensions.m +++ b/apple/common/CFExtensions.m @@ -41,16 +41,6 @@ NS_INLINE CF_RETURNS_RETAINED CFTypeRef CFBridgingRetainCompat(id X) #endif } -#ifdef IOS -NS_INLINE CF_RETURNS_RETAINED CFStringRef CFBridgingRetainStringRefCompat(id X) -{ -#if __has_feature(objc_arc) - return (__bridge_retained CFStringRef)X; -#else - return (CFStringRef)X; -#endif -} - static NSSearchPathDirectory NSConvertFlagsCF(unsigned flags) { switch (flags) @@ -73,6 +63,16 @@ static NSSearchPathDomainMask NSConvertDomainFlagsCF(unsigned flags) return 0; } +#ifdef IOS +NS_INLINE CF_RETURNS_RETAINED CFStringRef CFBridgingRetainStringRefCompat(id X) +{ +#if __has_feature(objc_arc) + return (__bridge_retained CFStringRef)X; +#else + return (CFStringRef)X; +#endif +} + void CFTemporaryDirectory(char *buf, size_t sizeof_buf) { CFStringRef path = (CFStringRef)(CFBridgingRetainStringRefCompat(NSTemporaryDirectory())); @@ -86,11 +86,7 @@ void CFSearchPathForDirectoriesInDomains(unsigned flags, unsigned domain_mask, unsigned expand_tilde, char *buf, size_t sizeof_buf) { -#ifdef OSX - CFTypeRef array_val = (CFTypeRef)CFBridgingRetainCompat(NSSearchPathForDirectoriesInDomains(flags, domain_mask, (BOOL)expand_tilde)); -#else CFTypeRef array_val = (CFTypeRef)CFBridgingRetainCompat(NSSearchPathForDirectoriesInDomains(NSConvertFlagsCF(flags), NSConvertDomainFlagsCF(domain_mask), (BOOL)expand_tilde)); -#endif CFArrayRef array = array_val ? CFRetain(array_val) : NULL; CFTypeRef path_val = (CFTypeRef)CFArrayGetValueAtIndex(array, 0); CFStringRef path = path_val ? CFRetain(path_val) : NULL; diff --git a/frontend/drivers/platform_apple.c b/frontend/drivers/platform_apple.c index 7bdc025426..d0be66b31e 100644 --- a/frontend/drivers/platform_apple.c +++ b/frontend/drivers/platform_apple.c @@ -31,13 +31,11 @@ static void frontend_apple_get_environment_settings(int *argc, char *argv[], void *args, void *params_data) { char temp_dir[PATH_MAX_LENGTH]; - char bundle_path_buf[PATH_MAX_LENGTH], home_dir_buf[PATH_MAX_LENGTH], - support_path_buf[PATH_MAX_LENGTH]; + char bundle_path_buf[PATH_MAX_LENGTH], home_dir_buf[PATH_MAX_LENGTH]; CFURLRef bundle_url; CFStringRef bundle_path; CFBundleRef bundle = CFBundleGetMainBundle(); - (void)support_path_buf; (void)temp_dir; if (!bundle) @@ -49,59 +47,47 @@ static void frontend_apple_get_environment_settings(int *argc, char *argv[], CFStringGetCString(bundle_path, bundle_path_buf, sizeof(bundle_path_buf), kCFStringEncodingUTF8); (void)home_dir_buf; + CFSearchPathForDirectoriesInDomains(CFDocumentDirectory, CFUserDomainMask, 1, home_dir_buf, sizeof(home_dir_buf)); + +#ifdef OSX + strlcat(home_dir_buf, "/RetroArch", sizeof(home_dir_buf)); +#endif + + fill_pathname_join(g_defaults.core_dir, home_dir_buf, "modules", sizeof(g_defaults.core_dir)); + fill_pathname_join(g_defaults.core_info_dir, home_dir_buf, "info", sizeof(g_defaults.core_info_dir)); + fill_pathname_join(g_defaults.overlay_dir, home_dir_buf, "overlays", sizeof(g_defaults.overlay_dir)); + fill_pathname_join(g_defaults.autoconfig_dir, home_dir_buf, "autoconfig/apple", sizeof(g_defaults.autoconfig_dir)); + fill_pathname_join(g_defaults.assets_dir, home_dir_buf, "assets", sizeof(g_defaults.assets_dir)); + fill_pathname_join(g_defaults.system_dir, home_dir_buf, ".RetroArch", sizeof(g_defaults.system_dir)); + strlcpy(g_defaults.menu_config_dir, g_defaults.system_dir, sizeof(g_defaults.menu_config_dir)); + fill_pathname_join(g_defaults.config_path, g_defaults.menu_config_dir, "retroarch.cfg", sizeof(g_defaults.config_path)); + fill_pathname_join(g_defaults.database_dir, home_dir_buf, "rdb", sizeof(g_defaults.database_dir)); + fill_pathname_join(g_defaults.cursor_dir, home_dir_buf, "cursors", sizeof(g_defaults.cursor_dir)); + fill_pathname_join(g_defaults.cheats_dir, home_dir_buf, "cht", sizeof(g_defaults.cheats_dir)); + strlcpy(g_defaults.sram_dir, g_defaults.system_dir, sizeof(g_defaults.sram_dir)); + strlcpy(g_defaults.savestate_dir, g_defaults.system_dir, sizeof(g_defaults.savestate_dir)); #ifdef IOS CFTemporaryDirectory(temp_dir, sizeof(temp_dir)); strlcpy(g_defaults.extraction_dir, temp_dir, sizeof(g_defaults.extraction_dir)); - - CFSearchPathForDirectoriesInDomains(CFDocumentDirectory, CFUserDomainMask, 1, home_dir_buf, sizeof(home_dir_buf)); - - fill_pathname_join(g_defaults.system_dir, home_dir_buf, ".RetroArch", sizeof(g_defaults.system_dir)); - fill_pathname_join(g_defaults.database_dir, home_dir_buf, "rdb", sizeof(g_defaults.database_dir)); - fill_pathname_join(g_defaults.cursor_dir, home_dir_buf, "cursors", sizeof(g_defaults.cursor_dir)); - fill_pathname_join(g_defaults.core_dir, home_dir_buf, "modules", sizeof(g_defaults.core_dir)); - fill_pathname_join(g_defaults.core_info_dir, home_dir_buf, "info", sizeof(g_defaults.core_info_dir)); - fill_pathname_join(g_defaults.autoconfig_dir, home_dir_buf, "autoconfig/apple", sizeof(g_defaults.autoconfig_dir)); - fill_pathname_join(g_defaults.assets_dir, home_dir_buf, "assets", sizeof(g_defaults.assets_dir)); - fill_pathname_join(g_defaults.cheats_dir, home_dir_buf, "cht", sizeof(g_defaults.cheats_dir)); fill_pathname_join(g_defaults.shader_dir, home_dir_buf, "shaders_glsl", sizeof(g_defaults.shader_dir)); - fill_pathname_join(g_defaults.overlay_dir, home_dir_buf, "overlays", sizeof(g_defaults.overlay_dir)); - strlcpy(g_defaults.menu_config_dir, g_defaults.system_dir, sizeof(g_defaults.menu_config_dir)); - fill_pathname_join(g_defaults.config_path, g_defaults.menu_config_dir, "retroarch.cfg", sizeof(g_defaults.config_path)); - - strlcpy(g_defaults.sram_dir, g_defaults.system_dir, sizeof(g_defaults.sram_dir)); - strlcpy(g_defaults.savestate_dir, g_defaults.system_dir, sizeof(g_defaults.savestate_dir)); - +#elif defined(OSX) + fill_pathname_join(g_defaults.shader_dir, home_dir_buf, "shaders_cg", sizeof(g_defaults.shader_dir)); + fill_pathname_join(g_defaults.audio_filter_dir, home_dir_buf, "audio_filters", sizeof(g_defaults.audio_filter_dir)); + fill_pathname_join(g_defaults.video_filter_dir, home_dir_buf, "video_filters", sizeof(g_defaults.video_filter_dir)); +#endif + path_mkdir(bundle_path_buf); - + if (access(bundle_path_buf, 0755) != 0) RARCH_ERR("Failed to create or access base directory: %s\n", bundle_path_buf); - else - { - path_mkdir(g_defaults.system_dir); - - if (access(g_defaults.system_dir, 0755) != 0) - RARCH_ERR("Failed to create or access system directory: %s.\n", g_defaults.system_dir); - } -#elif defined(OSX) - CFSearchPathForDirectoriesInDomains(CFApplicationSupportDirectory, CFUserDomainMask, 1, support_path_buf, sizeof(support_path_buf)); - - fill_pathname_join(g_defaults.core_dir, "~/Library/Application Support/RetroArch", "cores", sizeof(g_defaults.core_dir)); - fill_pathname_join(g_defaults.core_info_dir, "~/Library/Application Support/RetroArch", "info", sizeof(g_defaults.core_info_dir)); - /* TODO/FIXME - we might need to update all these paths too and put them all in ~/Library/Application Support, but that would - * require copying all the resource files that are bundled in the app bundle over first to this new directory. - * - * Ideas: There's some overlap here with how the Android APK has to extract all its resource files over to the actual sandboxed - * app dir, maybe try to create something standardized for both platforms (OSX/Android) */ - fill_pathname_join(g_defaults.overlay_dir, bundle_path_buf, "Contents/Resources/overlays", sizeof(g_defaults.overlay_dir)); - fill_pathname_join(g_defaults.autoconfig_dir, bundle_path_buf, "Contents/Resources/autoconfig/apple", sizeof(g_defaults.autoconfig_dir)); - fill_pathname_join(g_defaults.assets_dir, bundle_path_buf, "Contents/Resources/assets", sizeof(g_defaults.assets_dir)); - fill_pathname_join(g_defaults.shader_dir, bundle_path_buf, "Contents/Resources/shaders", sizeof(g_defaults.shader_dir)); - fill_pathname_join(g_defaults.audio_filter_dir, bundle_path_buf, "Contents/Resources/audio_filters", sizeof(g_defaults.audio_filter_dir)); - fill_pathname_join(g_defaults.video_filter_dir, bundle_path_buf, "Contents/Resources/video_filters", sizeof(g_defaults.video_filter_dir)); - fill_pathname_join(g_defaults.menu_config_dir, support_path_buf, "RetroArch", sizeof(g_defaults.menu_config_dir)); - fill_pathname_join(g_defaults.config_path, g_defaults.menu_config_dir, "retroarch.cfg", sizeof(g_defaults.config_path)); -#endif + else + { + path_mkdir(g_defaults.system_dir); + + if (access(g_defaults.system_dir, 0755) != 0) + RARCH_ERR("Failed to create or access system directory: %s.\n", g_defaults.system_dir); + } CFRelease(bundle_path); CFRelease(bundle_url);