Add filesystem override API.
This commit is contained in:
parent
cc816345bf
commit
91e3677762
|
|
@ -855,6 +855,14 @@ typedef enum {
|
||||||
// Callbacks to be implemented by users
|
// Callbacks to be implemented by users
|
||||||
typedef void (*TraceLogCallback)(int logType, const char *text, va_list args);
|
typedef void (*TraceLogCallback)(int logType, const char *text, va_list args);
|
||||||
|
|
||||||
|
// Filesystem override implemented by users.
|
||||||
|
typedef struct FilesystemOverride {
|
||||||
|
unsigned char *(*loadFileData)(const char *fileName, unsigned int *bytesRead);
|
||||||
|
void (*saveFileData)(const char *fileName, void *data, unsigned int bytesToWrite);
|
||||||
|
char *(*loadFileText)(const char *fileName);
|
||||||
|
void (*saveFileText)(const char *fileName, char *text);
|
||||||
|
} FilesystemOverride;
|
||||||
|
|
||||||
#if defined(__cplusplus)
|
#if defined(__cplusplus)
|
||||||
extern "C" { // Prevents name mangling of functions
|
extern "C" { // Prevents name mangling of functions
|
||||||
#endif
|
#endif
|
||||||
|
|
@ -953,6 +961,7 @@ RLAPI void TakeScreenshot(const char *fileName); // Takes a scr
|
||||||
RLAPI int GetRandomValue(int min, int max); // Returns a random value between min and max (both included)
|
RLAPI int GetRandomValue(int min, int max); // Returns a random value between min and max (both included)
|
||||||
|
|
||||||
// Files management functions
|
// Files management functions
|
||||||
|
RLAPI void SetFilesystemOverride(FilesystemOverride override); // Set filesystem functions override.
|
||||||
RLAPI unsigned char *LoadFileData(const char *fileName, unsigned int *bytesRead); // Load file data as byte array (read)
|
RLAPI unsigned char *LoadFileData(const char *fileName, unsigned int *bytesRead); // Load file data as byte array (read)
|
||||||
RLAPI void SaveFileData(const char *fileName, void *data, unsigned int bytesToWrite); // Save data to file from byte array (write)
|
RLAPI void SaveFileData(const char *fileName, void *data, unsigned int bytesToWrite); // Save data to file from byte array (write)
|
||||||
RLAPI char *LoadFileText(const char *fileName); // Load text data from file (read), returns a '\0' terminated string
|
RLAPI char *LoadFileText(const char *fileName); // Load text data from file (read), returns a '\0' terminated string
|
||||||
|
|
|
||||||
33
src/utils.c
33
src/utils.c
|
|
@ -63,6 +63,9 @@ static int logTypeLevel = LOG_INFO; // Minimum log type leve
|
||||||
static int logTypeExit = LOG_ERROR; // Log type that exits
|
static int logTypeExit = LOG_ERROR; // Log type that exits
|
||||||
static TraceLogCallback logCallback = NULL; // Log callback function pointer
|
static TraceLogCallback logCallback = NULL; // Log callback function pointer
|
||||||
|
|
||||||
|
// Filesystem function override.
|
||||||
|
static FilesystemOverride fsOverride = { NULL, NULL, NULL, NULL };
|
||||||
|
|
||||||
#if defined(PLATFORM_ANDROID)
|
#if defined(PLATFORM_ANDROID)
|
||||||
static AAssetManager *assetManager = NULL; // Android assets manager pointer
|
static AAssetManager *assetManager = NULL; // Android assets manager pointer
|
||||||
static const char *internalDataPath = NULL; // Android internal data path
|
static const char *internalDataPath = NULL; // Android internal data path
|
||||||
|
|
@ -164,6 +167,12 @@ void TraceLog(int logType, const char *text, ...)
|
||||||
#endif // SUPPORT_TRACELOG
|
#endif // SUPPORT_TRACELOG
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Set filesystem functions override.
|
||||||
|
void SetFilesystemOverride(FilesystemOverride override)
|
||||||
|
{
|
||||||
|
fsOverride = override;
|
||||||
|
}
|
||||||
|
|
||||||
// Load data from file into a buffer
|
// Load data from file into a buffer
|
||||||
unsigned char *LoadFileData(const char *fileName, unsigned int *bytesRead)
|
unsigned char *LoadFileData(const char *fileName, unsigned int *bytesRead)
|
||||||
{
|
{
|
||||||
|
|
@ -172,6 +181,13 @@ unsigned char *LoadFileData(const char *fileName, unsigned int *bytesRead)
|
||||||
|
|
||||||
if (fileName != NULL)
|
if (fileName != NULL)
|
||||||
{
|
{
|
||||||
|
if (fsOverride.loadFileData) {
|
||||||
|
data = fsOverride.loadFileData(fileName, bytesRead);
|
||||||
|
|
||||||
|
if (data)
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
|
||||||
FILE *file = fopen(fileName, "rb");
|
FILE *file = fopen(fileName, "rb");
|
||||||
|
|
||||||
if (file != NULL)
|
if (file != NULL)
|
||||||
|
|
@ -209,6 +225,11 @@ void SaveFileData(const char *fileName, void *data, unsigned int bytesToWrite)
|
||||||
{
|
{
|
||||||
if (fileName != NULL)
|
if (fileName != NULL)
|
||||||
{
|
{
|
||||||
|
if (fsOverride.saveFileData) {
|
||||||
|
fsOverride.saveFileData(fileName, data, bytesToWrite);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
FILE *file = fopen(fileName, "wb");
|
FILE *file = fopen(fileName, "wb");
|
||||||
|
|
||||||
if (file != NULL)
|
if (file != NULL)
|
||||||
|
|
@ -234,6 +255,13 @@ char *LoadFileText(const char *fileName)
|
||||||
|
|
||||||
if (fileName != NULL)
|
if (fileName != NULL)
|
||||||
{
|
{
|
||||||
|
if (fsOverride.loadFileText) {
|
||||||
|
text = fsOverride.loadFileText(fileName);
|
||||||
|
|
||||||
|
if (text)
|
||||||
|
return text;
|
||||||
|
}
|
||||||
|
|
||||||
FILE *textFile = fopen(fileName, "rt");
|
FILE *textFile = fopen(fileName, "rt");
|
||||||
|
|
||||||
if (textFile != NULL)
|
if (textFile != NULL)
|
||||||
|
|
@ -275,6 +303,11 @@ void SaveFileText(const char *fileName, char *text)
|
||||||
{
|
{
|
||||||
if (fileName != NULL)
|
if (fileName != NULL)
|
||||||
{
|
{
|
||||||
|
if (fsOverride.saveFileText) {
|
||||||
|
fsOverride.saveFileText(fileName, text);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
FILE *file = fopen(fileName, "wt");
|
FILE *file = fopen(fileName, "wt");
|
||||||
|
|
||||||
if (file != NULL)
|
if (file != NULL)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user