From 97901b9f971c6fc501301467173ed388b327f178 Mon Sep 17 00:00:00 2001 From: Sylvain Becker Date: Thu, 10 Oct 2019 17:21:46 +0200 Subject: [PATCH] Fixed bug 4820 - SDL assumes RW_SEEK_SET == SEEK_SET --- src/file/SDL_rwops.c | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/src/file/SDL_rwops.c b/src/file/SDL_rwops.c index ffa9df4ec7771..8e515b530b8a4 100644 --- a/src/file/SDL_rwops.c +++ b/src/file/SDL_rwops.c @@ -361,13 +361,29 @@ stdio_size(SDL_RWops * context) static Sint64 SDLCALL stdio_seek(SDL_RWops * context, Sint64 offset, int whence) { + int stdiowhence; + + switch (whence) { + case RW_SEEK_SET: + stdiowhence = SEEK_SET; + break; + case RW_SEEK_CUR: + stdiowhence = SEEK_CUR; + break; + case RW_SEEK_END: + stdiowhence = SEEK_END; + break; + default: + return SDL_SetError("Unknown value for 'whence'"); + } + #if defined(FSEEK_OFF_MIN) && defined(FSEEK_OFF_MAX) if (offset < (Sint64)(FSEEK_OFF_MIN) || offset > (Sint64)(FSEEK_OFF_MAX)) { return SDL_SetError("Seek offset out of range"); } #endif - if (fseek(context->hidden.stdio.fp, (fseek_off_t)offset, whence) == 0) { + if (fseek(context->hidden.stdio.fp, (fseek_off_t)offset, stdiowhence) == 0) { Sint64 pos = ftell(context->hidden.stdio.fp); if (pos < 0) { return SDL_SetError("Couldn't get stream offset");