N3DS: Use asprintf instead of snprintf.
parent
655275378d
commit
2b2693ae90
|
@ -20,6 +20,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "SDL_rwopsromfs.h"
|
#include "SDL_rwopsromfs.h"
|
||||||
|
#include "SDL_error.h"
|
||||||
|
|
||||||
/* Nintendo 3DS applications may embed resources in the executable. The
|
/* Nintendo 3DS applications may embed resources in the executable. The
|
||||||
resources are stored in a special read-only partition prefixed with
|
resources are stored in a special read-only partition prefixed with
|
||||||
|
@ -30,7 +31,7 @@ FILE *
|
||||||
N3DS_FileOpen(const char *file, const char *mode)
|
N3DS_FileOpen(const char *file, const char *mode)
|
||||||
{
|
{
|
||||||
FILE *fp = NULL;
|
FILE *fp = NULL;
|
||||||
char romfs_path[4096];
|
char *romfs_path;
|
||||||
|
|
||||||
/* romfs are read-only */
|
/* romfs are read-only */
|
||||||
if (SDL_strchr(mode, 'r') == NULL) {
|
if (SDL_strchr(mode, 'r') == NULL) {
|
||||||
|
@ -43,13 +44,17 @@ N3DS_FileOpen(const char *file, const char *mode)
|
||||||
return fopen(file, mode);
|
return fopen(file, mode);
|
||||||
}
|
}
|
||||||
|
|
||||||
SDL_snprintf(romfs_path, 4096, "romfs:/%s", file);
|
if (SDL_asprintf(&romfs_path, "romfs:/%s", file) < 0) {
|
||||||
|
SDL_OutOfMemory();
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
fp = fopen(romfs_path, mode);
|
fp = fopen(romfs_path, mode);
|
||||||
if (fp == NULL) {
|
if (fp == NULL) {
|
||||||
fp = fopen(file, mode);
|
fp = fopen(file, mode);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SDL_free(romfs_path);
|
||||||
return fp;
|
return fp;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -52,6 +52,10 @@ SDL_GetPrefPath(const char *org, const char *app)
|
||||||
}
|
}
|
||||||
|
|
||||||
pref_path = MakePrefPath(app);
|
pref_path = MakePrefPath(app);
|
||||||
|
if (pref_path == NULL) {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
if (CreatePrefPathDir(pref_path) < 0) {
|
if (CreatePrefPathDir(pref_path) < 0) {
|
||||||
SDL_free(pref_path);
|
SDL_free(pref_path);
|
||||||
return NULL;
|
return NULL;
|
||||||
|
@ -63,10 +67,11 @@ SDL_GetPrefPath(const char *org, const char *app)
|
||||||
SDL_FORCE_INLINE char *
|
SDL_FORCE_INLINE char *
|
||||||
MakePrefPath(const char *app)
|
MakePrefPath(const char *app)
|
||||||
{
|
{
|
||||||
static const char *FMT = "/3ds/%s/";
|
char *pref_path;
|
||||||
size_t length = SDL_snprintf(NULL, 0, FMT, app) + 1;
|
if (SDL_asprintf(&pref_path, "/3ds/%s/", app) < 0) {
|
||||||
char *pref_path = (char *) SDL_calloc(length, sizeof(char));
|
SDL_OutOfMemory();
|
||||||
SDL_snprintf(pref_path, length, FMT, app);
|
return NULL;
|
||||||
|
}
|
||||||
return pref_path;
|
return pref_path;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue