N3DS: Use asprintf instead of snprintf.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
diff --git a/src/file/n3ds/SDL_rwopsromfs.c b/src/file/n3ds/SDL_rwopsromfs.c
index fe92c3d..c75323f 100644
--- a/src/file/n3ds/SDL_rwopsromfs.c
+++ b/src/file/n3ds/SDL_rwopsromfs.c
@@ -20,6 +20,7 @@
*/
#include "SDL_rwopsromfs.h"
+#include "SDL_error.h"
/* Nintendo 3DS applications may embed resources in the executable. The
resources are stored in a special read-only partition prefixed with
@@ -30,7 +31,7 @@ FILE *
N3DS_FileOpen(const char *file, const char *mode)
{
FILE *fp = NULL;
- char romfs_path[4096];
+ char *romfs_path;
/* romfs are read-only */
if (SDL_strchr(mode, 'r') == NULL) {
@@ -43,13 +44,17 @@ N3DS_FileOpen(const char *file, const char *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);
if (fp == NULL) {
fp = fopen(file, mode);
}
+ SDL_free(romfs_path);
return fp;
}
diff --git a/src/filesystem/n3ds/SDL_sysfilesystem.c b/src/filesystem/n3ds/SDL_sysfilesystem.c
index e402e03..06b4cd6 100644
--- a/src/filesystem/n3ds/SDL_sysfilesystem.c
+++ b/src/filesystem/n3ds/SDL_sysfilesystem.c
@@ -52,6 +52,10 @@ SDL_GetPrefPath(const char *org, const char *app)
}
pref_path = MakePrefPath(app);
+ if (pref_path == NULL) {
+ return NULL;
+ }
+
if (CreatePrefPathDir(pref_path) < 0) {
SDL_free(pref_path);
return NULL;
@@ -63,10 +67,11 @@ SDL_GetPrefPath(const char *org, const char *app)
SDL_FORCE_INLINE char *
MakePrefPath(const char *app)
{
- static const char *FMT = "/3ds/%s/";
- size_t length = SDL_snprintf(NULL, 0, FMT, app) + 1;
- char *pref_path = (char *) SDL_calloc(length, sizeof(char));
- SDL_snprintf(pref_path, length, FMT, app);
+ char *pref_path;
+ if (SDL_asprintf(&pref_path, "/3ds/%s/", app) < 0) {
+ SDL_OutOfMemory();
+ return NULL;
+ }
return pref_path;
}