Mercurial > SDL_sound_CoreAudio
diff decoders/mikmod.c @ 397:077cdba5d5f6
FIXME cleanup.
author | Ryan C. Gordon <icculus@icculus.org> |
---|---|
date | Thu, 11 Jul 2002 05:02:14 +0000 |
parents | 6095d0a52a20 |
children | c09cf7c046cd |
line wrap: on
line diff
--- a/decoders/mikmod.c Thu Jul 11 04:56:36 2002 +0000 +++ b/decoders/mikmod.c Thu Jul 11 05:02:14 2002 +0000 @@ -166,6 +166,7 @@ MRWOPSREADER *reader = (MRWOPSREADER *) malloc(sizeof (MRWOPSREADER)); if (reader != NULL) { + int failed_seek = 1; int here; reader->core.Eof = _mm_RWopsReader_eof; reader->core.Read = _mm_RWopsReader_read; @@ -177,9 +178,22 @@ /* RWops does not explicitly support an eof check, so we shall find the end manually - this requires seek support for the RWop */ here = SDL_RWtell(internal->rw); - reader->end = SDL_RWseek(internal->rw, 0, SEEK_END); - SDL_RWseek(internal->rw, here, SEEK_SET); /* Move back */ - /* !!! FIXME: What happens if the seek fails? */ + if (here != -1) + { + reader->end = SDL_RWseek(internal->rw, 0, SEEK_END); + if (reader->end != -1) + { + /* Move back */ + if (SDL_RWseek(internal->rw, here, SEEK_SET) != -1) + failed_seek = 0; + } /* if */ + } /* if */ + + if (failed_seek) + { + free(reader); + reader = NULL; + } /* if */ } /* if */ return((MREADER *) reader);