riscos: Implement SDL_GetPrefPath()
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 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 9a06793..cfd5712 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -2114,6 +2114,13 @@ elseif(RISCOS)
set(SOURCE_FILES ${SOURCE_FILES} ${MISC_SOURCES})
set(HAVE_SDL_MISC TRUE)
+ if(SDL_FILESYSTEM)
+ set(SDL_FILESYSTEM_RISCOS 1)
+ file(GLOB FILESYSTEM_SOURCES ${SDL2_SOURCE_DIR}/src/filesystem/riscos/*.c)
+ set(SOURCE_FILES ${SOURCE_FILES} ${FILESYSTEM_SOURCES})
+ set(HAVE_SDL_FILESYSTEM TRUE)
+ endif()
+
if(SDL_TIMERS)
set(SDL_TIMER_UNIX 1)
file(GLOB TIMER_SOURCES ${SDL2_SOURCE_DIR}/src/timer/unix/*.c)
diff --git a/configure b/configure
index f626718..060845a 100755
--- a/configure
+++ b/configure
@@ -25794,6 +25794,14 @@ $as_echo "#define SDL_TIMER_UNIX 1" >>confdefs.h
SOURCES="$SOURCES $srcdir/src/misc/riscos/*.c"
have_misc=yes
+ # Set up files for the filesystem library
+ if test x$enable_filesystem = xyes; then
+
+$as_echo "#define SDL_FILESYSTEM_RISCOS 1" >>confdefs.h
+
+ SOURCES="$SOURCES $srcdir/src/filesystem/riscos/*.c"
+ have_filesystem=yes
+ fi
# Set up files for the timer library
if test x$enable_timers = xyes; then
diff --git a/configure.ac b/configure.ac
index a5f659b..3a71a16 100644
--- a/configure.ac
+++ b/configure.ac
@@ -4277,6 +4277,12 @@ case "$host" in
SOURCES="$SOURCES $srcdir/src/misc/riscos/*.c"
have_misc=yes
+ # Set up files for the filesystem library
+ if test x$enable_filesystem = xyes; then
+ AC_DEFINE(SDL_FILESYSTEM_RISCOS, 1, [ ])
+ SOURCES="$SOURCES $srcdir/src/filesystem/riscos/*.c"
+ have_filesystem=yes
+ fi
# Set up files for the timer library
if test x$enable_timers = xyes; then
AC_DEFINE(SDL_TIMER_UNIX, 1, [ ])
diff --git a/include/SDL_config.h.cmake b/include/SDL_config.h.cmake
index 4c23f26..02b0764 100644
--- a/include/SDL_config.h.cmake
+++ b/include/SDL_config.h.cmake
@@ -469,6 +469,7 @@
#cmakedefine SDL_FILESYSTEM_HAIKU @SDL_FILESYSTEM_HAIKU@
#cmakedefine SDL_FILESYSTEM_COCOA @SDL_FILESYSTEM_COCOA@
#cmakedefine SDL_FILESYSTEM_DUMMY @SDL_FILESYSTEM_DUMMY@
+#cmakedefine SDL_FILESYSTEM_RISCOS @SDL_FILESYSTEM_RISCOS@
#cmakedefine SDL_FILESYSTEM_UNIX @SDL_FILESYSTEM_UNIX@
#cmakedefine SDL_FILESYSTEM_WINDOWS @SDL_FILESYSTEM_WINDOWS@
#cmakedefine SDL_FILESYSTEM_EMSCRIPTEN @SDL_FILESYSTEM_EMSCRIPTEN@
diff --git a/include/SDL_config.h.in b/include/SDL_config.h.in
index 09fb4e6..35f5bd0 100644
--- a/include/SDL_config.h.in
+++ b/include/SDL_config.h.in
@@ -447,6 +447,7 @@
#undef SDL_FILESYSTEM_ANDROID
#undef SDL_FILESYSTEM_EMSCRIPTEN
#undef SDL_FILESYSTEM_OS2
+#undef SDL_FILESYSTEM_RISCOS
/* Enable assembly routines */
#undef SDL_ASSEMBLY_ROUTINES
diff --git a/src/filesystem/riscos/SDL_sysfilesystem.c b/src/filesystem/riscos/SDL_sysfilesystem.c
new file mode 100644
index 0000000..a16efff
--- /dev/null
+++ b/src/filesystem/riscos/SDL_sysfilesystem.c
@@ -0,0 +1,92 @@
+/*
+ Simple DirectMedia Layer
+ Copyright (C) 1997-2019 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_RISCOS
+
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+/* System dependent filesystem routines */
+
+#include <errno.h>
+#include <sys/stat.h>
+
+#include "SDL_error.h"
+#include "SDL_stdinc.h"
+#include "SDL_filesystem.h"
+#include "SDL_rwops.h"
+
+char *
+SDL_GetBasePath(void)
+{
+ SDL_Unsupported();
+ return NULL;
+}
+
+char *
+SDL_GetPrefPath(const char *org, const char *app)
+{
+ const char *prefix = "/<Choices$Write>/";
+ char *retval = NULL;
+ char *ptr = NULL;
+ size_t len = 0;
+
+ if (!app) {
+ SDL_InvalidParamError("app");
+ return NULL;
+ }
+ if (!org) {
+ org = "";
+ }
+
+ len = SDL_strlen(prefix) + 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/", prefix, org, app);
+ } else {
+ SDL_snprintf(retval, len, "%s%s/", prefix, app);
+ }
+
+ for (ptr = retval+1; *ptr; ptr++) {
+ if (*ptr == '/') {
+ *ptr = '\0';
+ if (mkdir(retval, 0700) != 0 && errno != EEXIST)
+ goto error;
+ *ptr = '/';
+ }
+ }
+ if (mkdir(retval, 0700) != 0 && errno != EEXIST) {
+error:
+ SDL_SetError("Couldn't create directory '%s': '%s'", retval, strerror(errno));
+ SDL_free(retval);
+ return NULL;
+ }
+
+ return retval;
+}
+
+#endif /* SDL_FILESYSTEM_RISCOS */
+
+/* vi: set ts=4 sw=4 expandtab: */