mirror of
https://github.com/libsdl-org/SDL.git
synced 2025-05-25 14:09:10 +00:00
SDL_IOFromFile: Apple targets no longer use the app bundle's resources dir.
Fixes #8403.
This commit is contained in:
parent
299d181984
commit
614a88ca3b
5 changed files with 3 additions and 119 deletions
|
@ -229,8 +229,6 @@
|
|||
A7D8B58723E2514300DCD162 /* SDL_joystick_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A7D023E2513E00DCD162 /* SDL_joystick_c.h */; };
|
||||
A7D8B5B723E2514300DCD162 /* controller_type.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A7D923E2513E00DCD162 /* controller_type.h */; };
|
||||
A7D8B5BD23E2514300DCD162 /* SDL_iostream.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7DB23E2513F00DCD162 /* SDL_iostream.c */; };
|
||||
A7D8B5C323E2514300DCD162 /* SDL_iostreambundlesupport.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A7DD23E2513F00DCD162 /* SDL_iostreambundlesupport.h */; };
|
||||
A7D8B5C923E2514300DCD162 /* SDL_iostreambundlesupport.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7DE23E2513F00DCD162 /* SDL_iostreambundlesupport.m */; };
|
||||
A7D8B5CF23E2514300DCD162 /* SDL_syspower.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7E123E2513F00DCD162 /* SDL_syspower.m */; };
|
||||
A7D8B5D523E2514300DCD162 /* SDL_syspower.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A7E223E2513F00DCD162 /* SDL_syspower.h */; };
|
||||
A7D8B5E723E2514300DCD162 /* SDL_power.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7E723E2513F00DCD162 /* SDL_power.c */; };
|
||||
|
@ -789,8 +787,6 @@
|
|||
A7D8A7D023E2513E00DCD162 /* SDL_joystick_c.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_joystick_c.h; sourceTree = "<group>"; };
|
||||
A7D8A7D923E2513E00DCD162 /* controller_type.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = controller_type.h; sourceTree = "<group>"; };
|
||||
A7D8A7DB23E2513F00DCD162 /* SDL_iostream.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_iostream.c; sourceTree = "<group>"; };
|
||||
A7D8A7DD23E2513F00DCD162 /* SDL_iostreambundlesupport.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_iostreambundlesupport.h; sourceTree = "<group>"; };
|
||||
A7D8A7DE23E2513F00DCD162 /* SDL_iostreambundlesupport.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDL_iostreambundlesupport.m; sourceTree = "<group>"; };
|
||||
A7D8A7E123E2513F00DCD162 /* SDL_syspower.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDL_syspower.m; sourceTree = "<group>"; };
|
||||
A7D8A7E223E2513F00DCD162 /* SDL_syspower.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_syspower.h; sourceTree = "<group>"; };
|
||||
A7D8A7E723E2513F00DCD162 /* SDL_power.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_power.c; sourceTree = "<group>"; };
|
||||
|
@ -1884,21 +1880,11 @@
|
|||
A7D8A7DA23E2513E00DCD162 /* file */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
A7D8A7DC23E2513F00DCD162 /* cocoa */,
|
||||
A7D8A7DB23E2513F00DCD162 /* SDL_iostream.c */,
|
||||
);
|
||||
path = file;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
A7D8A7DC23E2513F00DCD162 /* cocoa */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
A7D8A7DD23E2513F00DCD162 /* SDL_iostreambundlesupport.h */,
|
||||
A7D8A7DE23E2513F00DCD162 /* SDL_iostreambundlesupport.m */,
|
||||
);
|
||||
path = cocoa;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
A7D8A7DF23E2513F00DCD162 /* power */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
|
@ -2462,7 +2448,6 @@
|
|||
F3F7D9152933074E00816151 /* SDL_revision.h in Headers */,
|
||||
A7D8BA3123E2514400DCD162 /* SDL_rotate.h in Headers */,
|
||||
F3F7D9652933074E00816151 /* SDL_iostream.h in Headers */,
|
||||
A7D8B5C323E2514300DCD162 /* SDL_iostreambundlesupport.h in Headers */,
|
||||
F3F7D9492933074E00816151 /* SDL_scancode.h in Headers */,
|
||||
F3F7D94D2933074E00816151 /* SDL_sensor.h in Headers */,
|
||||
A7D8A98D23E2514000DCD162 /* SDL_sensor_c.h in Headers */,
|
||||
|
@ -2877,7 +2862,6 @@
|
|||
F3F528CD2C29E1C300E6CC26 /* s_isnan.c in Sources */,
|
||||
F3F07D5A269640160074468B /* SDL_hidapi_luna.c in Sources */,
|
||||
A7D8BBD523E2574800DCD162 /* SDL_uikitclipboard.m in Sources */,
|
||||
A7D8B5C923E2514300DCD162 /* SDL_iostreambundlesupport.m in Sources */,
|
||||
F386F6F92884663E001840AA /* SDL_utils.c in Sources */,
|
||||
E4F7981E2AD8D86A00669F54 /* SDL_render_unsupported.c in Sources */,
|
||||
A7D8AC0F23E2514100DCD162 /* SDL_video.c in Sources */,
|
||||
|
|
|
@ -1510,6 +1510,8 @@ SDL_IOStream *SDL_RWFromFP(FILE *fp, SDL_bool autoclose)
|
|||
|
||||
The internal `FILE *` is available through a standard SDL_IOStream property, for streams made through SDL_IOFromFile() that use stdio behind the scenes; apps use this pointer at their own risk and should make sure that SDL and the app are using the same C runtime.
|
||||
|
||||
On Apple platforms, SDL_RWFromFile (now called SDL_IOFromFile) no longer tries to read from inside the app bundle's resource directory, instead now using the specified path unchanged. One can use SDL_GetBasePath() to find the resource directory on these platforms.
|
||||
|
||||
|
||||
The functions SDL_ReadU8(), SDL_ReadU16LE(), SDL_ReadU16BE(), SDL_ReadU32LE(), SDL_ReadU32BE(), SDL_ReadU64LE(), and SDL_ReadU64BE() now return SDL_TRUE if the read succeeded and SDL_FALSE if it didn't, and store the data in a pointer passed in as a parameter.
|
||||
|
||||
|
|
|
@ -44,11 +44,6 @@ struct SDL_IOStream
|
|||
SDL_PropertiesID props;
|
||||
};
|
||||
|
||||
|
||||
#ifdef SDL_PLATFORM_APPLE
|
||||
#include "cocoa/SDL_iostreambundlesupport.h"
|
||||
#endif /* SDL_PLATFORM_APPLE */
|
||||
|
||||
#ifdef SDL_PLATFORM_3DS
|
||||
#include "n3ds/SDL_iostreamromfs.h"
|
||||
#endif /* SDL_PLATFORM_3DS */
|
||||
|
@ -650,9 +645,7 @@ SDL_IOStream *SDL_IOFromFile(const char *file, const char *mode)
|
|||
|
||||
#elif defined(HAVE_STDIO_H)
|
||||
{
|
||||
#if defined(SDL_PLATFORM_APPLE)
|
||||
FILE *fp = SDL_OpenFPFromBundleOrFallback(file, mode);
|
||||
#elif defined(SDL_PLATFORM_WINRT)
|
||||
#if defined(SDL_PLATFORM_WINRT)
|
||||
FILE *fp = NULL;
|
||||
fopen_s(&fp, file, mode);
|
||||
#elif defined(SDL_PLATFORM_3DS)
|
||||
|
|
|
@ -1,30 +0,0 @@
|
|||
/*
|
||||
Simple DirectMedia Layer
|
||||
Copyright (C) 1997-2024 Sam Lantinga <slouken@libsdl.org>
|
||||
|
||||
This software is provided 'as-is', without any express or implied
|
||||
warranty. In no event will the authors be held liable for any damages
|
||||
arising from the use of this software.
|
||||
|
||||
Permission is granted to anyone to use this software for any purpose,
|
||||
including commercial applications, and to alter it and redistribute it
|
||||
freely, subject to the following restrictions:
|
||||
|
||||
1. The origin of this software must not be misrepresented; you must not
|
||||
claim that you wrote the original software. If you use this software
|
||||
in a product, an acknowledgment in the product documentation would be
|
||||
appreciated but is not required.
|
||||
2. Altered source versions must be plainly marked as such, and must not be
|
||||
misrepresented as being the original software.
|
||||
3. This notice may not be removed or altered from any source distribution.
|
||||
*/
|
||||
|
||||
#ifdef SDL_PLATFORM_APPLE
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
#ifndef SDL_iostreambundlesupport_h
|
||||
#define SDL_iostreambundlesupport_h
|
||||
FILE *SDL_OpenFPFromBundleOrFallback(const char *file, const char *mode);
|
||||
#endif
|
||||
#endif
|
|
@ -1,65 +0,0 @@
|
|||
/*
|
||||
Simple DirectMedia Layer
|
||||
Copyright (C) 1997-2024 Sam Lantinga <slouken@libsdl.org>
|
||||
|
||||
This software is provided 'as-is', without any express or implied
|
||||
warranty. In no event will the authors be held liable for any damages
|
||||
arising from the use of this software.
|
||||
|
||||
Permission is granted to anyone to use this software for any purpose,
|
||||
including commercial applications, and to alter it and redistribute it
|
||||
freely, subject to the following restrictions:
|
||||
|
||||
1. The origin of this software must not be misrepresented; you must not
|
||||
claim that you wrote the original software. If you use this software
|
||||
in a product, an acknowledgment in the product documentation would be
|
||||
appreciated but is not required.
|
||||
2. Altered source versions must be plainly marked as such, and must not be
|
||||
misrepresented as being the original software.
|
||||
3. This notice may not be removed or altered from any source distribution.
|
||||
*/
|
||||
#include "SDL_internal.h"
|
||||
|
||||
#ifdef SDL_PLATFORM_APPLE
|
||||
#import <Foundation/Foundation.h>
|
||||
|
||||
#include "SDL_iostreambundlesupport.h"
|
||||
|
||||
/* For proper macOS applications, the resources are contained inside the application bundle.
|
||||
So the strategy is to first check the application bundle for the file, then fallback to the current working directory.
|
||||
Note: One additional corner-case is if the resource is in a framework's resource bundle instead of the app.
|
||||
We might want to use bundle identifiers, e.g. org.libsdl.sdl to get the bundle for the framework,
|
||||
but we would somehow need to know what the bundle identifiers we need to search are.
|
||||
Also, note the bundle layouts are different for iPhone and Mac.
|
||||
*/
|
||||
FILE *SDL_OpenFPFromBundleOrFallback(const char *file, const char *mode)
|
||||
{
|
||||
@autoreleasepool {
|
||||
FILE *fp = NULL;
|
||||
NSFileManager *file_manager;
|
||||
NSString *resource_path;
|
||||
NSString *ns_string_file_component;
|
||||
NSString *full_path_with_file_to_try;
|
||||
|
||||
/* If the file mode is writable, skip all the bundle stuff because generally the bundle is read-only. */
|
||||
if (SDL_strchr(mode, 'r') == NULL) {
|
||||
return fopen(file, mode);
|
||||
}
|
||||
|
||||
file_manager = [NSFileManager defaultManager];
|
||||
resource_path = [[NSBundle mainBundle] resourcePath];
|
||||
|
||||
ns_string_file_component = [file_manager stringWithFileSystemRepresentation:file length:strlen(file)];
|
||||
|
||||
full_path_with_file_to_try = [resource_path stringByAppendingPathComponent:ns_string_file_component];
|
||||
if ([file_manager fileExistsAtPath:full_path_with_file_to_try]) {
|
||||
fp = fopen([full_path_with_file_to_try fileSystemRepresentation], mode);
|
||||
} else {
|
||||
fp = fopen(file, mode);
|
||||
}
|
||||
|
||||
return fp;
|
||||
}
|
||||
}
|
||||
|
||||
#endif /* SDL_PLATFORM_APPLE */
|
Loading…
Add table
Add a link
Reference in a new issue