|
@@ -306,8 +306,11 @@ windows_file_close(SDL_RWops * context)
|
|
|
}
|
|
|
#endif /* defined(__WIN32__) || defined(__GDK__) */
|
|
|
|
|
|
+
|
|
|
#if defined(HAVE_STDIO_H) && !(defined(__WIN32__) || defined(__GDK__))
|
|
|
|
|
|
+/* Functions to read/write stdio file pointers. Not used for windows. */
|
|
|
+
|
|
|
#ifdef HAVE_FOPEN64
|
|
|
#define fopen fopen64
|
|
|
#endif
|
|
@@ -344,8 +347,6 @@ windows_file_close(SDL_RWops * context)
|
|
|
#define fseek_off_t long
|
|
|
#endif
|
|
|
|
|
|
-/* Functions to read/write stdio file pointers */
|
|
|
-
|
|
|
static Sint64 SDLCALL
|
|
|
stdio_size(SDL_RWops * context)
|
|
|
{
|
|
@@ -426,7 +427,6 @@ stdio_close(SDL_RWops * context)
|
|
|
int status = 0;
|
|
|
if (context) {
|
|
|
if (context->hidden.stdio.autoclose) {
|
|
|
- /* WARNING: Check the return value here! */
|
|
|
if (fclose((FILE *)context->hidden.stdio.fp) != 0) {
|
|
|
status = SDL_Error(SDL_EFWRITE);
|
|
|
}
|
|
@@ -435,7 +435,27 @@ stdio_close(SDL_RWops * context)
|
|
|
}
|
|
|
return status;
|
|
|
}
|
|
|
-#endif /* !HAVE_STDIO_H */
|
|
|
+
|
|
|
+static SDL_INLINE SDL_RWops *
|
|
|
+SDL_RWFromFP(void *fp, SDL_bool autoclose)
|
|
|
+{
|
|
|
+ SDL_RWops *rwops = NULL;
|
|
|
+
|
|
|
+ rwops = SDL_AllocRW();
|
|
|
+ if (rwops != NULL) {
|
|
|
+ rwops->size = stdio_size;
|
|
|
+ rwops->seek = stdio_seek;
|
|
|
+ rwops->read = stdio_read;
|
|
|
+ rwops->write = stdio_write;
|
|
|
+ rwops->close = stdio_close;
|
|
|
+ rwops->hidden.stdio.fp = fp;
|
|
|
+ rwops->hidden.stdio.autoclose = autoclose;
|
|
|
+ rwops->type = SDL_RWOPS_STDFILE;
|
|
|
+ }
|
|
|
+ return rwops;
|
|
|
+}
|
|
|
+#endif /* !HAVE_STDIO_H && !(__WIN32__ || __GDK__) */
|
|
|
+
|
|
|
|
|
|
/* Functions to read/write memory pointers */
|
|
|
|
|
@@ -525,28 +545,6 @@ mem_close(SDL_RWops * context)
|
|
|
|
|
|
/* Functions to create SDL_RWops structures from various data sources */
|
|
|
|
|
|
-#if defined(HAVE_STDIO_H) && !(defined(__WIN32__) || defined(__GDK__))
|
|
|
-/* this is used a helper for SDL_RWFromFile(), but not for windows. */
|
|
|
-static SDL_RWops *
|
|
|
-SDL_RWFromFP(void *fp, SDL_bool autoclose)
|
|
|
-{
|
|
|
- SDL_RWops *rwops = NULL;
|
|
|
-
|
|
|
- rwops = SDL_AllocRW();
|
|
|
- if (rwops != NULL) {
|
|
|
- rwops->size = stdio_size;
|
|
|
- rwops->seek = stdio_seek;
|
|
|
- rwops->read = stdio_read;
|
|
|
- rwops->write = stdio_write;
|
|
|
- rwops->close = stdio_close;
|
|
|
- rwops->hidden.stdio.fp = fp;
|
|
|
- rwops->hidden.stdio.autoclose = autoclose;
|
|
|
- rwops->type = SDL_RWOPS_STDFILE;
|
|
|
- }
|
|
|
- return rwops;
|
|
|
-}
|
|
|
-#endif /* HAVE_STDIO_H */
|
|
|
-
|
|
|
SDL_RWops *
|
|
|
SDL_RWFromFile(const char *file, const char *mode)
|
|
|
{
|
|
@@ -556,7 +554,7 @@ SDL_RWFromFile(const char *file, const char *mode)
|
|
|
return NULL;
|
|
|
}
|
|
|
#if defined(__ANDROID__)
|
|
|
-#ifdef HAVE_STDIO_H
|
|
|
+ #ifdef HAVE_STDIO_H
|
|
|
/* Try to open the file on the filesystem first */
|
|
|
if (*file == '/') {
|
|
|
FILE *fp = fopen(file, mode);
|
|
@@ -580,7 +578,7 @@ SDL_RWFromFile(const char *file, const char *mode)
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
-#endif /* HAVE_STDIO_H */
|
|
|
+ #endif /* HAVE_STDIO_H */
|
|
|
|
|
|
/* Try to open the file from the asset system */
|
|
|
rwops = SDL_AllocRW();
|