mirror of https://github.com/OpenRCT2/OpenRCT2.git
Do not use RWops for saving track designs
This commit is contained in:
parent
fb7f0a21d2
commit
fbe0e2504a
|
@ -60,13 +60,39 @@ namespace File
|
|||
*length = (size_t)fsize;
|
||||
return result;
|
||||
}
|
||||
|
||||
void WriteAllBytes(const std::string &path, const void * buffer, size_t length)
|
||||
{
|
||||
auto fs = FileStream(path, FILE_MODE_WRITE);
|
||||
fs.Write(buffer, length);
|
||||
}
|
||||
}
|
||||
|
||||
extern "C"
|
||||
{
|
||||
bool readentirefile(const utf8 * path, void * * outBuffer, size_t * outLength)
|
||||
{
|
||||
*outBuffer = File::ReadAllBytes(String::ToStd(path), outLength);
|
||||
return (*outBuffer != nullptr);
|
||||
try
|
||||
{
|
||||
*outBuffer = File::ReadAllBytes(String::ToStd(path), outLength);
|
||||
return true;
|
||||
}
|
||||
catch (const Exception &)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
bool writeentirefile(const utf8 * path, const void * buffer, size_t length)
|
||||
{
|
||||
try
|
||||
{
|
||||
File::WriteAllBytes(String::ToStd(path), buffer, length);
|
||||
return true;
|
||||
}
|
||||
catch (const Exception &)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -25,4 +25,5 @@ namespace File
|
|||
bool Delete(const std::string &path);
|
||||
bool Move(const std::string &srcPath, const std::string &dstPath);
|
||||
void * ReadAllBytes(const std::string &path, size_t * length);
|
||||
void WriteAllBytes(const std::string &path, const void * buffer, size_t length);
|
||||
}
|
||||
|
|
|
@ -74,7 +74,7 @@ rct_track_td6 *track_design_open(const utf8 *path)
|
|||
|
||||
uint8 *buffer;
|
||||
size_t bufferLength;
|
||||
if (readentirefile(path, &buffer, &bufferLength)) {
|
||||
if (readentirefile(path, (void * *)&buffer, &bufferLength)) {
|
||||
if (!sawyercoding_validate_track_checksum(buffer, bufferLength)) {
|
||||
log_error("Track checksum failed. %s", path);
|
||||
free(buffer);
|
||||
|
|
|
@ -1275,14 +1275,9 @@ bool track_design_save_to_file(const utf8 *path)
|
|||
// Save encoded TD6 data to file
|
||||
bool result;
|
||||
log_verbose("saving track %s", path);
|
||||
SDL_RWops *file = SDL_RWFromFile(path, "wb");
|
||||
if (file != NULL) {
|
||||
SDL_RWwrite(file, encodedData, encodedDataLength, 1);
|
||||
SDL_RWclose(file);
|
||||
result = true;
|
||||
} else {
|
||||
result = writeentirefile(path, encodedData, encodedDataLength);
|
||||
if (!result) {
|
||||
log_error("Failed to save %s", path);
|
||||
result = false;
|
||||
}
|
||||
|
||||
free(encodedData);
|
||||
|
|
|
@ -34,6 +34,7 @@ void path_append_extension(utf8 *path, const utf8 *newExtension, size_t size);
|
|||
void path_remove_extension(utf8 *path);
|
||||
void path_end_with_separator(utf8 *path, size_t size);
|
||||
bool readentirefile(const utf8 *path, void **outBuffer, size_t *outLength);
|
||||
bool writeentirefile(const utf8 * path, const void * buffer, size_t length);
|
||||
|
||||
sint32 bitscanforward(sint32 source);
|
||||
void bitcount_init();
|
||||
|
|
Loading…
Reference in New Issue