Merged r3201:3204 from branches/SDL-1.2: win32 rwops tweaks.
--HG-- extra : convert_revision : svn%3Ac70aab31-4412-0410-b14c-859654838e24/trunk%402472
This commit is contained in:
parent
ff88381b73
commit
8b6833c4e2
1 changed files with 16 additions and 11 deletions
|
@ -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)
|
||||||
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)
|
||||||
|
|
||||||
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)
|
||||||
#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
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue