From 7d9be9e2fc253288f0b8f7fcf6be50b70ffc189f Mon Sep 17 00:00:00 2001 From: GaryOderNichts <12049776+GaryOderNichts@users.noreply.github.com> Date: Wed, 20 Jan 2021 20:16:31 +0100 Subject: [PATCH] wiiu: buffer stdio RWops --- include/SDL_config.h.cmake | 6 ++++++ include/SDL_rwops.h | 3 +++ src/file/SDL_rwops.c | 11 +++++++++++ 3 files changed, 20 insertions(+) diff --git a/include/SDL_config.h.cmake b/include/SDL_config.h.cmake index bf364fbdf..a93a95d41 100644 --- a/include/SDL_config.h.cmake +++ b/include/SDL_config.h.cmake @@ -479,4 +479,10 @@ typedef unsigned int uintptr_t; # endif /* !_STDINT_H_ && !HAVE_STDINT_H */ #endif /* __WIN32__ */ +#if defined(__WIIU__) + /* buffer files using setvbuf */ + #define SDL_USE_FILE_BUFFER 1 + #define SDL_FILE_BUFFER_SIZE (128*1024) +#endif + #endif /* SDL_config_h_ */ diff --git a/include/SDL_rwops.h b/include/SDL_rwops.h index 0960699d4..ba9006431 100644 --- a/include/SDL_rwops.h +++ b/include/SDL_rwops.h @@ -125,6 +125,9 @@ typedef struct SDL_RWops { SDL_bool autoclose; FILE *fp; +#ifdef SDL_USE_FILE_BUFFER + char *buffer; +#endif } stdio; #endif struct diff --git a/src/file/SDL_rwops.c b/src/file/SDL_rwops.c index cf5d3aa0b..b0d368ae2 100644 --- a/src/file/SDL_rwops.c +++ b/src/file/SDL_rwops.c @@ -60,6 +60,10 @@ #include "nacl_io/nacl_io.h" #endif +#ifdef SDL_USE_FILE_BUFFER +#include +#endif + #ifdef __WIN32__ /* Functions to read/write Win32 API file pointers */ @@ -412,6 +416,9 @@ stdio_close(SDL_RWops * context) status = SDL_Error(SDL_EFWRITE); } } +#ifdef SDL_USE_FILE_BUFFER + free(context->hidden.stdio.buffer); +#endif SDL_FreeRW(context); } return status; @@ -608,6 +615,10 @@ SDL_RWFromFP(FILE * fp, SDL_bool autoclose) rwops->write = stdio_write; rwops->close = stdio_close; rwops->hidden.stdio.fp = fp; +#ifdef SDL_USE_FILE_BUFFER + rwops->hidden.stdio.buffer = (char *) memalign(0x40, SDL_FILE_BUFFER_SIZE); + setvbuf(fp, rwops->hidden.stdio.buffer, _IOFBF, SDL_FILE_BUFFER_SIZE); +#endif rwops->hidden.stdio.autoclose = autoclose; rwops->type = SDL_RWOPS_STDFILE; }