From b9db5208886a12edc38c8363c9fd9bcf3c48a70b Mon Sep 17 00:00:00 2001 From: Sam Lantinga Date: Tue, 10 Jul 2007 16:01:46 +0000 Subject: [PATCH] Simplified Win32 file opening code --- src/file/SDL_rwops.c | 31 ++++++++++++------------------- 1 file changed, 12 insertions(+), 19 deletions(-) diff --git a/src/file/SDL_rwops.c b/src/file/SDL_rwops.c index c219b5570..ed596264f 100644 --- a/src/file/SDL_rwops.c +++ b/src/file/SDL_rwops.c @@ -56,12 +56,7 @@ static int SDLCALL win32_file_open(SDL_RWops *context, const char *filename, con int a_mode; if (!context) - return -1; - - context->hidden.win32io.h = INVALID_HANDLE_VALUE; /* mark this as unusable */ - context->hidden.win32io.buffer.data = NULL; - context->hidden.win32io.buffer.size = 0; - context->hidden.win32io.buffer.left = 0; + return -1; /* failed (invalid call) */ /* "r" = reading, file must exist */ /* "w" = writing, truncate existing, file may not exist */ @@ -77,13 +72,7 @@ static int SDLCALL win32_file_open(SDL_RWops *context, const char *filename, con w_right = ( a_mode || SDL_strchr(mode,'+') || truncate ) ? GENERIC_WRITE : 0; if (!r_right && !w_right) /* inconsistent mode */ - return -1; /* failed (invalid call)*/ - - context->hidden.win32io.buffer.data = (char *)SDL_malloc(READAHEAD_BUFFER_SIZE); - if (!context->hidden.win32io.buffer.data) { - SDL_OutOfMemory(); - return -1; - } + return -1; /* failed (invalid call) */ #ifdef _WIN32_WCE { @@ -93,8 +82,6 @@ static int SDLCALL win32_file_open(SDL_RWops *context, const char *filename, con if ( MultiByteToWideChar(CP_UTF8, 0, filename, -1, filenameW, size) == 0 ) { SDL_SetError("Unable to convert filename to Unicode"); SDL_stack_free(filenameW); - SDL_free(context->hidden.win32io.buffer.data); - context->hidden.win32io.buffer.data = NULL; return -1; } h = CreateFile(filenameW, (w_right|r_right), (w_right)? 0 : FILE_SHARE_READ, @@ -114,13 +101,20 @@ static int SDLCALL win32_file_open(SDL_RWops *context, const char *filename, con if (h==INVALID_HANDLE_VALUE) { SDL_SetError("Couldn't open %s",filename); - SDL_free(context->hidden.win32io.buffer.data); - context->hidden.win32io.buffer.data = NULL; return -2; /* failed (CreateFile) */ } context->hidden.win32io.h = h; context->hidden.win32io.append = a_mode; + context->hidden.win32io.buffer.data = (char *)SDL_malloc(READAHEAD_BUFFER_SIZE); + if (!context->hidden.win32io.buffer.data) { + SDL_OutOfMemory(); + CloseHandle(context->hidden.win32io.h); + return -1; + } + context->hidden.win32io.buffer.size = 0; + context->hidden.win32io.buffer.left = 0; + return 0; /* ok */ } static int SDLCALL win32_file_seek(SDL_RWops *context, int offset, int whence) @@ -435,8 +429,7 @@ SDL_RWops *SDL_RWFromFile(const char *file, const char *mode) rwops = SDL_AllocRW(); if (!rwops) return NULL; /* SDL_SetError already setup by SDL_AllocRW() */ - rwops->hidden.win32io.h = INVALID_HANDLE_VALUE; - if (win32_file_open(rwops,file,mode)) { + if (win32_file_open(rwops,file,mode) < 0) { SDL_FreeRW(rwops); return NULL; }