summaryrefslogtreecommitdiff
path: root/src/game/game_text.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/game/game_text.cpp')
-rw-r--r--src/game/game_text.cpp25
1 files changed, 14 insertions, 11 deletions
diff --git a/src/game/game_text.cpp b/src/game/game_text.cpp
index 27e379077..53c6795e9 100644
--- a/src/game/game_text.cpp
+++ b/src/game/game_text.cpp
@@ -60,18 +60,11 @@ void NORETURN CDECL strgen_fatal(const char *s, ...)
/**
* Create a new container for language strings.
* @param language The language name.
+ * @param end If not NULL, terminate \a language at this position.
*/
-LanguageStrings::LanguageStrings(const char *language)
+LanguageStrings::LanguageStrings(const char *language, const char *end)
{
- const char *p = strrchr(language, PATHSEPCHAR);
- if (p == NULL) {
- p = language;
- } else {
- p++;
- }
-
- const char *e = strchr(p, '.');
- this->language = e == NULL ? strdup(p) : strndup(p, e - p);
+ this->language = end == NULL ? strdup(language) : strndup(language, end - language);
}
/** Free everything. */
@@ -95,7 +88,17 @@ LanguageStrings *ReadRawLanguageStrings(const char *file)
return NULL;
}
- ret = new LanguageStrings(file);
+ const char *langname = strrchr(file, PATHSEPCHAR);
+ if (langname == NULL) {
+ langname = file;
+ } else {
+ langname++;
+ }
+
+ /* Check for invalid empty filename */
+ if (*langname == '.' || *langname == 0) return NULL;
+
+ ret = new LanguageStrings(langname, strchr(langname, '.'));
char buffer[2048];
while (to_read != 0 && fgets(buffer, sizeof(buffer), fh) != NULL) {