From 878476a397548eefef7f2805d3bee260ff1dbdce Mon Sep 17 00:00:00 2001 From: q66 Date: Wed, 27 Apr 2016 01:17:26 +0100 Subject: [PATCH] use int for sdl1 mode and report size --- ostd/ext/sdl_rwops.hh | 24 +++++++++++++++++------- 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/ostd/ext/sdl_rwops.hh b/ostd/ext/sdl_rwops.hh index d8815ce..49f5ca0 100644 --- a/ostd/ext/sdl_rwops.hh +++ b/ostd/ext/sdl_rwops.hh @@ -18,29 +18,39 @@ namespace ostd { namespace sdl { +#ifdef OSTD_EXT_SDL_USE_SDL1 +using SDLRWopsOffset = int; +#else +using SDLRWopsOffset = Int64; +#endif + inline SDL_RWops *stream_to_rwops(Stream &s) { SDL_RWops *rwr = SDL_AllocRW(); if (!rwr) { return nullptr; } rwr->hidden.unknown.data1 = &s; - rwr->seek = [](SDL_RWops *rw, Int64 pos, int whence) -> Int64 { + rwr->size = [](SDL_RWops *rw) -> SDLRWopsOffset { + Stream *is = (Stream *)rw->hidden.unknown.data1; + return (SDLRWopsOffset)is->size(); + }; + rwr->seek = [](SDL_RWops *rw, SDLRWopsOffset pos, int whence) -> SDLRWopsOffset { Stream *is = (Stream *)rw->hidden.unknown.data1; if (!pos && whence == SEEK_CUR) - return (Int64)is->tell(); + return (SDLRWopsOffset)is->tell(); if (is->seek(((StreamOffset)pos, (StreamSeek)whence)) - return (Int64)is->tell(); + return (SDLRWopsOffset)is->tell(); return -1; - } + }; rwr->read = [](SDL_RWops *rw, void *buf, Size size, Size nb) -> Size { Stream *is = (Stream *)rw->hidden.unknown.data1; return is->read_bytes(buf, size * nb) / size; - } + }; rwr->write = [](SDL_RWops *rw, const void *buf, Size size, Size nb) -> Size { Stream *is = (Stream *)rw->hidden.unknown.data1; return is->write_bytes(buf, size * nb) / size; - } - rwr->close = [](SDL_RWops *) -> int { return 0; } + }; + rwr->close = [](SDL_RWops *) -> int { return 0; }; return rwr; }