Commit 8b6833c4 authored by Ryan C. Gordon's avatar Ryan C. Gordon

Merged r3201:3204 from branches/SDL-1.2: win32 rwops tweaks.

--HG--
extra : convert_revision : svn%3Ac70aab31-4412-0410-b14c-859654838e24/trunk%402472
parent ff88381b
...@@ -59,6 +59,11 @@ win32_file_open(SDL_RWops * context, const char *filename, const char *mode) ...@@ -59,6 +59,11 @@ win32_file_open(SDL_RWops * context, const char *filename, const char *mode)
if (!context) if (!context)
return -1; /* failed (invalid call) */ return -1; /* failed (invalid call) */
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;
/* "r" = reading, file must exist */ /* "r" = reading, file must exist */
/* "w" = writing, truncate existing, file may not exist */ /* "w" = writing, truncate existing, file may not exist */
/* "r+"= reading or writing, file must exist */ /* "r+"= reading or writing, file must exist */
...@@ -77,6 +82,12 @@ win32_file_open(SDL_RWops * context, const char *filename, const char *mode) ...@@ -77,6 +82,12 @@ win32_file_open(SDL_RWops * context, const char *filename, const char *mode)
if (!r_right && !w_right) /* inconsistent mode */ if (!r_right && !w_right) /* inconsistent mode */
return -1; /* failed (invalid call) */ 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;
}
#ifdef _WIN32_WCE #ifdef _WIN32_WCE
{ {
size_t size = SDL_strlen(filename) + 1; size_t size = SDL_strlen(filename) + 1;
...@@ -84,8 +95,10 @@ win32_file_open(SDL_RWops * context, const char *filename, const char *mode) ...@@ -84,8 +95,10 @@ win32_file_open(SDL_RWops * context, const char *filename, const char *mode)
if (MultiByteToWideChar(CP_UTF8, 0, filename, -1, filenameW, size) == if (MultiByteToWideChar(CP_UTF8, 0, filename, -1, filenameW, size) ==
0) { 0) {
SDL_SetError("Unable to convert filename to Unicode");
SDL_stack_free(filenameW); SDL_stack_free(filenameW);
SDL_free(context->hidden.win32io.buffer.data);
context->hidden.win32io.buffer.data = NULL;
SDL_SetError("Unable to convert filename to Unicode");
return -1; return -1;
} }
h = CreateFile(filenameW, (w_right | r_right), h = CreateFile(filenameW, (w_right | r_right),
...@@ -109,22 +122,14 @@ win32_file_open(SDL_RWops * context, const char *filename, const char *mode) ...@@ -109,22 +122,14 @@ win32_file_open(SDL_RWops * context, const char *filename, const char *mode)
#endif /* _WIN32_WCE */ #endif /* _WIN32_WCE */
if (h == INVALID_HANDLE_VALUE) { if (h == INVALID_HANDLE_VALUE) {
SDL_free(context->hidden.win32io.buffer.data);
context->hidden.win32io.buffer.data = NULL;
SDL_SetError("Couldn't open %s", filename); SDL_SetError("Couldn't open %s", filename);
return -2; /* failed (CreateFile) */ return -2; /* failed (CreateFile) */
} }
context->hidden.win32io.h = h; context->hidden.win32io.h = h;
context->hidden.win32io.append = a_mode ? SDL_TRUE : SDL_FALSE; context->hidden.win32io.append = a_mode ? SDL_TRUE : SDL_FALSE;
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 */ return 0; /* ok */
} }
static long SDLCALL static long SDLCALL
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment