Added missing "standalone" functions to raudio.c & fixed return bug (#3760)

* Added GetFileNameWithoutExt, GetFileName & strprbrk to raudio.c

* Gave return values to SaveFileData & SaveFileText in raudio.c
This commit is contained in:
Alessandro Nikolaev 2024-01-28 12:46:27 +00:00 committed by GitHub
parent f4add5f10d
commit cf10cdd6b3
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
1 changed files with 70 additions and 4 deletions

View File

@ -416,6 +416,8 @@ static void MixAudioFrames(float *framesOut, const float *framesIn, ma_uint32 fr
#if defined(RAUDIO_STANDALONE)
static bool IsFileExtension(const char *fileName, const char *ext); // Check file extension
static const char *GetFileExtension(const char *fileName); // Get pointer to extension for a filename string (includes the dot: .png)
static const char *GetFileName(const char *filePath); // Get pointer to filename for a path string
static const char *GetFileNameWithoutExt(const char *filePath); // Get filename string without extension (uses static string)
static unsigned char *LoadFileData(const char *fileName, int *dataSize); // Load file data as byte array (read)
static bool SaveFileData(const char *fileName, void *data, int dataSize); // Save data to file from byte array (write)
@ -2642,6 +2644,50 @@ static const char *GetFileExtension(const char *fileName)
return dot;
}
// String pointer reverse break: returns right-most occurrence of charset in s
static const char *strprbrk(const char *s, const char *charset)
{
const char *latestMatch = NULL;
for (; s = strpbrk(s, charset), s != NULL; latestMatch = s++) { }
return latestMatch;
}
// Get pointer to filename for a path string
static const char *GetFileName(const char *filePath)
{
const char *fileName = NULL;
if (filePath != NULL) fileName = strprbrk(filePath, "\\/");
if (!fileName) return filePath;
return fileName + 1;
}
// Get filename string without extension (uses static string)
static const char *GetFileNameWithoutExt(const char *filePath)
{
#define MAX_FILENAMEWITHOUTEXT_LENGTH 256
static char fileName[MAX_FILENAMEWITHOUTEXT_LENGTH] = { 0 };
memset(fileName, 0, MAX_FILENAMEWITHOUTEXT_LENGTH);
if (filePath != NULL) strcpy(fileName, GetFileName(filePath)); // Get filename with extension
int size = (int)strlen(fileName); // Get size in bytes
for (int i = 0; (i < size) && (i < MAX_FILENAMEWITHOUTEXT_LENGTH); i++)
{
if (fileName[i] == '.')
{
// NOTE: We break on first '.' found
fileName[i] = '\0';
break;
}
}
return fileName;
}
// Load data from file into a buffer
static unsigned char *LoadFileData(const char *fileName, int *dataSize)
{
@ -2699,9 +2745,19 @@ static bool SaveFileData(const char *fileName, void *data, int dataSize)
fclose(file);
}
else TRACELOG(LOG_WARNING, "FILEIO: [%s] Failed to open file", fileName);
else
{
TRACELOG(LOG_WARNING, "FILEIO: [%s] Failed to open file", fileName);
return false;
}
}
else TRACELOG(LOG_WARNING, "FILEIO: File name provided is not valid");
else
{
TRACELOG(LOG_WARNING, "FILEIO: File name provided is not valid");
return false;
}
return true;
}
// Save text data to file (write), string must be '\0' terminated
@ -2720,9 +2776,19 @@ static bool SaveFileText(const char *fileName, char *text)
fclose(file);
}
else TRACELOG(LOG_WARNING, "FILEIO: [%s] Failed to open text file", fileName);
else
{
TRACELOG(LOG_WARNING, "FILEIO: [%s] Failed to open text file", fileName);
return false;
}
}
else TRACELOG(LOG_WARNING, "FILEIO: File name provided is not valid");
else
{
TRACELOG(LOG_WARNING, "FILEIO: File name provided is not valid");
return false;
}
return true;
}
#endif