Replace SDL with normal fopen in cmdline_sprite.c

This commit is contained in:
Ted John 2017-04-01 19:57:30 +01:00 committed by Gymnasiast
parent 08ae74293d
commit d45a50274c
1 changed files with 35 additions and 21 deletions

View File

@ -20,8 +20,8 @@
#include "cmdline_sprite.h"
#include "drawing/drawing.h"
#include "Imaging.h"
#include "localisation/localisation.h"
#include "OpenRCT2.h"
#include "platform/platform.h"
#include "util/util.h"
#define MODE_DEFAULT 0
@ -61,6 +61,22 @@ rct_sprite_file_header spriteFileHeader;
rct_g1_element *spriteFileEntries;
uint8 *spriteFileData;
#ifdef _WIN32
static FILE * fopen_utf8(const char * path, const char * mode)
{
wchar_t * pathW = utf8_to_widechar(path);
wchar_t * modeW = utf8_to_widechar(mode);
FILE * file = _wfopen(pathW, modeW);
free(pathW);
free(modeW);
return file;
}
#define fopen fopen_utf8
#endif
static void sprite_file_load_palette(sint32 spriteIndex)
{
rct_g1_element *g1 = &spriteFileEntries[spriteIndex];
@ -90,14 +106,12 @@ static void sprite_entries_make_relative()
static bool sprite_file_open(const utf8 *path)
{
SDL_RWops *file;
file = SDL_RWFromFile(path, "rb");
FILE * file = fopen(path, "rb");
if (file == NULL)
return false;
if (SDL_RWread(file, &spriteFileHeader, sizeof(rct_sprite_file_header), 1) != 1) {
SDL_RWclose(file);
if (fread(&spriteFileHeader, sizeof(rct_sprite_file_header), 1, file) != 1) {
fclose(file);
return false;
}
@ -105,21 +119,21 @@ static bool sprite_file_open(const utf8 *path)
sint32 openEntryTableSize = spriteFileHeader.num_entries * sizeof(rct_g1_element_32bit);
rct_g1_element_32bit * openElements = (rct_g1_element_32bit *)malloc(openEntryTableSize);
if (openElements == NULL) {
SDL_RWclose(file);
fclose(file);
return false;
}
if (SDL_RWread(file, openElements, openEntryTableSize, 1) != 1) {
if (fread(openElements, openEntryTableSize, 1, file) != 1) {
free(openElements);
SDL_RWclose(file);
fclose(file);
return false;
}
spriteFileData = malloc(spriteFileHeader.total_size);
if (SDL_RWread(file, spriteFileData, spriteFileHeader.total_size, 1) != 1) {
if (fread(spriteFileData, spriteFileHeader.total_size, 1, file) != 1) {
free(spriteFileData);
free(openElements);
SDL_RWclose(file);
fclose(file);
return false;
}
@ -141,18 +155,18 @@ static bool sprite_file_open(const utf8 *path)
free(openElements);
}
SDL_RWclose(file);
fclose(file);
return true;
}
static bool sprite_file_save(const char *path)
{
SDL_RWops *file = SDL_RWFromFile(path, "wb");
FILE * file = fopen(path, "wb");
if (file == NULL)
return false;
if (SDL_RWwrite(file, &spriteFileHeader, sizeof(rct_sprite_file_header), 1) != 1) {
SDL_RWclose(file);
if (fwrite(&spriteFileHeader, sizeof(rct_sprite_file_header), 1, file) != 1) {
fclose(file);
return false;
}
@ -160,7 +174,7 @@ static bool sprite_file_save(const char *path)
sint32 saveEntryTableSize = spriteFileHeader.num_entries * sizeof(rct_g1_element_32bit);
rct_g1_element_32bit * saveElements = (rct_g1_element_32bit *)malloc(saveEntryTableSize);
if (saveElements == NULL) {
SDL_RWclose(file);
fclose(file);
return false;
}
@ -177,20 +191,20 @@ static bool sprite_file_save(const char *path)
outElement->zoomed_offset = inElement->zoomed_offset;
}
if (SDL_RWwrite(file, saveElements, saveEntryTableSize, 1) != 1) {
if (fwrite(saveElements, saveEntryTableSize, 1, file) != 1) {
free(saveElements);
SDL_RWclose(file);
fclose(file);
return false;
}
free(saveElements);
if (SDL_RWwrite(file, spriteFileData, spriteFileHeader.total_size, 1) != 1) {
SDL_RWclose(file);
if (fwrite(spriteFileData, spriteFileHeader.total_size, 1, file) != 1) {
fclose(file);
return false;
}
}
SDL_RWclose(file);
fclose(file);
return true;
}