Add filesystem override API.

This commit is contained in:
TSnake41 2020-04-10 21:19:21 +02:00
parent cc816345bf
commit 91e3677762
2 changed files with 44 additions and 2 deletions

View File

@ -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

View File

@ -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)