Browse Source

Close translation-file handler

pull/3185/head
Anders Jenbo 4 years ago
parent
commit
f77d0b3665
  1. 29
      Source/utils/language.cpp

29
Source/utils/language.cpp

@ -279,42 +279,57 @@ void LanguageInitialize()
// FIXME: Endianness.
MoHead head;
if (SDL_RWread(rw, &head, sizeof(MoHead), 1) != 1) {
SDL_RWclose(rw);
return;
}
if (head.magic != MO_MAGIC) {
SDL_RWclose(rw);
return; // not a MO file
}
if (head.revision.major > 1 || head.revision.minor > 1) {
SDL_RWclose(rw);
return; // unsupported revision
}
// Read entries of source strings
std::unique_ptr<MoEntry[]> src { new MoEntry[head.nbMappings] };
if (SDL_RWseek(rw, head.srcOffset, RW_SEEK_SET) == -1)
if (SDL_RWseek(rw, head.srcOffset, RW_SEEK_SET) == -1) {
SDL_RWclose(rw);
return;
}
// FIXME: Endianness.
if (SDL_RWread(rw, src.get(), sizeof(MoEntry), head.nbMappings) != head.nbMappings)
if (SDL_RWread(rw, src.get(), sizeof(MoEntry), head.nbMappings) != head.nbMappings) {
SDL_RWclose(rw);
return;
}
// Read entries of target strings
std::unique_ptr<MoEntry[]> dst { new MoEntry[head.nbMappings] };
if (SDL_RWseek(rw, head.dstOffset, RW_SEEK_SET) == -1)
if (SDL_RWseek(rw, head.dstOffset, RW_SEEK_SET) == -1) {
SDL_RWclose(rw);
return;
}
// FIXME: Endianness.
if (SDL_RWread(rw, dst.get(), sizeof(MoEntry), head.nbMappings) != head.nbMappings)
if (SDL_RWread(rw, dst.get(), sizeof(MoEntry), head.nbMappings) != head.nbMappings) {
SDL_RWclose(rw);
return;
}
std::vector<char> key;
std::vector<char> value;
// MO header
if (!ReadEntry(rw, &src[0], key) || !ReadEntry(rw, &dst[0], value))
if (!ReadEntry(rw, &src[0], key) || !ReadEntry(rw, &dst[0], value)) {
SDL_RWclose(rw);
return;
}
if (key[0] != '\0')
if (key[0] != '\0') {
SDL_RWclose(rw);
return;
}
ParseMetadata(value.data());
@ -337,4 +352,6 @@ void LanguageInitialize()
}
}
}
SDL_RWclose(rw);
}

Loading…
Cancel
Save