Don't leak the readahead buffer if win32 rwops file open fails.
--HG-- branch : SDL-1.2 extra : convert_revision : svn%3Ac70aab31-4412-0410-b14c-859654838e24/branches/SDL-1.2%402464
This commit is contained in:
parent
9c48629d64
commit
9a699f8d15
3 changed files with 17 additions and 8 deletions
|
@ -59,12 +59,7 @@ static int SDLCALL win32_file_open(SDL_RWops *context, const char *filename, con
|
|||
return -1;
|
||||
|
||||
context->hidden.win32io.h = INVALID_HANDLE_VALUE; /* mark this as unusable */
|
||||
|
||||
context->hidden.win32io.buffer.data = (char *)SDL_malloc(READAHEAD_BUFFER_SIZE);
|
||||
if (!context->hidden.win32io.buffer.data) {
|
||||
SDL_OutOfMemory();
|
||||
return -1;
|
||||
}
|
||||
context->hidden.win32io.buffer.data = NULL;
|
||||
context->hidden.win32io.buffer.size = 0;
|
||||
context->hidden.win32io.buffer.left = 0;
|
||||
|
||||
|
@ -84,6 +79,12 @@ static int SDLCALL win32_file_open(SDL_RWops *context, const char *filename, con
|
|||
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;
|
||||
}
|
||||
|
||||
#ifdef _WIN32_WCE
|
||||
{
|
||||
size_t size = SDL_strlen(filename)+1;
|
||||
|
@ -92,6 +93,8 @@ 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,
|
||||
|
@ -111,11 +114,13 @@ 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;
|
||||
|
||||
|
||||
return 0; /* ok */
|
||||
}
|
||||
static int SDLCALL win32_file_seek(SDL_RWops *context, int offset, int whence)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue