Skip to content
Permalink
Browse files

Simplified Win32 file opening code

  • Loading branch information
slouken committed Jul 10, 2007
1 parent 851fe42 commit b9db5208886a12edc38c8363c9fd9bcf3c48a70b
Showing with 12 additions and 19 deletions.
  1. +12 −19 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;
}

0 comments on commit b9db520

Please sign in to comment.