diff --git a/apple/common/CFExtensions.h b/apple/common/CFExtensions.h index 987e8e0022..e75e3e9f8b 100644 --- a/apple/common/CFExtensions.h +++ b/apple/common/CFExtensions.h @@ -63,4 +63,6 @@ typedef enum 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/apple/common/CFExtensions.m b/apple/common/CFExtensions.m index 55576b075c..69f507a788 100644 --- a/apple/common/CFExtensions.m +++ b/apple/common/CFExtensions.m @@ -41,6 +41,15 @@ NS_INLINE CF_RETURNS_RETAINED CFTypeRef CFBridgingRetainCompat(id X) #endif } +NS_INLINE CF_RETURNS_RETAINED CFStringRef CFBridgingRetainStringRefCompat(id X) +{ +#if __has_feature(objc_arc) + return (__bridge_retained CFStringRef)X; +#else + return X; +#endif +} + static NSSearchPathDirectory NSConvertFlagsCF(unsigned flags) { switch (flags) @@ -63,6 +72,14 @@ static NSSearchPathDomainMask NSConvertDomainFlagsCF(unsigned flags) return 0; } +void CFTemporaryDirectory(char *buf, size_t sizeof_buf) +{ + CFStringRef path = (CFStringRef)(CFBridgingRetainStringRefCompat(NSTemporaryDirectory())); + + CFStringGetCString(path, buf, sizeof_buf, kCFStringEncodingUTF8); + CFRelease(path); +} + void CFSearchPathForDirectoriesInDomains(unsigned flags, unsigned domain_mask, unsigned expand_tilde, char *buf, size_t sizeof_buf) diff --git a/frontend/drivers/platform_apple.c b/frontend/drivers/platform_apple.c index ae3e3fb794..932903842c 100644 --- a/frontend/drivers/platform_apple.c +++ b/frontend/drivers/platform_apple.c @@ -30,6 +30,7 @@ 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]; CFURLRef bundle_url; @@ -37,6 +38,7 @@ static void frontend_apple_get_environment_settings(int *argc, char *argv[], CFBundleRef bundle = CFBundleGetMainBundle(); (void)support_path_buf; + (void)temp_dir; if (!bundle) return; @@ -48,7 +50,10 @@ static void frontend_apple_get_environment_settings(int *argc, char *argv[], (void)home_dir_buf; #ifdef IOS - CFSearchPathForDirectoriesInDomains(CFDocumentDirectory, CFUserDomainMask, 1, home_dir_buf, sizeof(home_dir_buf)); + CFSearchPathForDirectoriesInDomains(CFDocumentDirectory, CFUserDomainMask, 1, home_dir_buf, sizeof(home_dir_buf)); + + CFTemporaryDirectory(temp_dir, sizeof(temp_dir)); + strlcpy(g_defaults.extraction_dir, temp_dir, sizeof(g_defaults.extraction_dir)); 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));