From 41d6c80b0710f5a977fb4ccffc5f6833819cebb7 Mon Sep 17 00:00:00 2001
From: Ivan Epifanov <[EMAIL REDACTED]>
Date: Mon, 2 Nov 2020 19:01:25 +0300
Subject: [PATCH] Filesystem module
---
Makefile.vita.dolce | 2 +-
include/SDL_config_vita.h | 4 +-
src/filesystem/vita/SDL_sysfilesystem.c | 95 +++++++++++++++++++++++++
3 files changed, 97 insertions(+), 4 deletions(-)
create mode 100644 src/filesystem/vita/SDL_sysfilesystem.c
diff --git a/Makefile.vita.dolce b/Makefile.vita.dolce
index c9ca1ca88..2b12b25d1 100644
--- a/Makefile.vita.dolce
+++ b/Makefile.vita.dolce
@@ -18,7 +18,7 @@ SOURCES = \
src/loadso/dummy/*.c \
src/power/*.c \
src/power/vita/*.c \
- src/filesystem/dummy/*.c \
+ src/filesystem/vita/*.c \
src/render/*.c \
src/render/software/*.c \
src/render/opengles2/SDL_render_gles2.c \
diff --git a/include/SDL_config_vita.h b/include/SDL_config_vita.h
index d03aae3e1..05cba8f73 100644
--- a/include/SDL_config_vita.h
+++ b/include/SDL_config_vita.h
@@ -136,15 +136,13 @@
#define SDL_TIMERS_VITA 1
#define SDL_POWER_VITA 1
#define SDL_VIDEO_DRIVER_VITA 1
+#define SDL_FILESYSTEM_VITA 1
#define SDL_VIDEO_RENDER_OGL_ES2 1
#define SDL_VIDEO_OPENGL_ES2 1
-/* !!! FIXME: what does VITA do for filesystem stuff? */
-#define SDL_FILESYSTEM_DUMMY 1
-
/* VITA doesn't have haptic device (src/haptic/dummy/\*.c) */
#define SDL_HAPTIC_DISABLED 1
diff --git a/src/filesystem/vita/SDL_sysfilesystem.c b/src/filesystem/vita/SDL_sysfilesystem.c
new file mode 100644
index 000000000..ba7732e57
--- /dev/null
+++ b/src/filesystem/vita/SDL_sysfilesystem.c
@@ -0,0 +1,95 @@
+/*
+ Simple DirectMedia Layer
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
+
+ This software is provided 'as-is', without any express or implied
+ warranty. In no event will the authors be held liable for any damages
+ arising from the use of this software.
+
+ Permission is granted to anyone to use this software for any purpose,
+ including commercial applications, and to alter it and redistribute it
+ freely, subject to the following restrictions:
+
+ 1. The origin of this software must not be misrepresented; you must not
+ claim that you wrote the original software. If you use this software
+ in a product, an acknowledgment in the product documentation would be
+ appreciated but is not required.
+ 2. Altered source versions must be plainly marked as such, and must not be
+ misrepresented as being the original software.
+ 3. This notice may not be removed or altered from any source distribution.
+*/
+#include "../../SDL_internal.h"
+
+#ifdef SDL_FILESYSTEM_VITA
+
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+/* System dependent filesystem routines */
+
+#include <errno.h>
+#include <stdio.h>
+#include <unistd.h>
+#include <stdlib.h>
+#include <psp2/kernel/iofilemgr.h>
+#include <sys/types.h>
+#include <limits.h>
+#include <fcntl.h>
+
+#include "SDL_error.h"
+#include "SDL_stdinc.h"
+#include "SDL_filesystem.h"
+#include "SDL_rwops.h"
+
+char *
+SDL_GetBasePath(void)
+{
+ const char *basepath = "app:/";
+ char *retval = SDL_strdup(basepath);
+ return retval;
+}
+
+char *
+SDL_GetPrefPath(const char *org, const char *app)
+{
+ const char *envr = "ux0:/data/";
+ char *retval = NULL;
+ char *ptr = NULL;
+ size_t len = 0;
+
+ if (!app) {
+ SDL_InvalidParamError("app");
+ return NULL;
+ }
+ if (!org) {
+ org = "";
+ }
+
+ len = SDL_strlen(envr);
+
+ len += SDL_strlen(org) + SDL_strlen(app) + 3;
+ retval = (char *) SDL_malloc(len);
+ if (!retval) {
+ SDL_OutOfMemory();
+ return NULL;
+ }
+
+ if (*org) {
+ SDL_snprintf(retval, len, "%s%s/%s/", envr, org, app);
+ } else {
+ SDL_snprintf(retval, len, "%s%s/", envr, app);
+ }
+
+ for (ptr = retval+1; *ptr; ptr++) {
+ if (*ptr == '/') {
+ *ptr = '\0';
+ sceIoMkdir(retval, 0777);
+ *ptr = '/';
+ }
+ }
+ sceIoMkdir(retval, 0777);
+
+ return retval;
+}
+
+#endif /* SDL_FILESYSTEM_VITA */
+
+/* vi: set ts=4 sw=4 expandtab: */