From 34a395e6e82f43e6e4053edf9e501e43dae8fa35 Mon Sep 17 00:00:00 2001 From: peter1138 Date: Tue, 3 Oct 2006 14:04:43 +0000 Subject: (svn r6623) - Codechange: When adding a NewGRF string, check to see if it can replace an existing string. Also remove string length check on load which was a quickfix for some grfs. --- newgrf.c | 2 +- newgrf_text.c | 18 +++++++++++++++--- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/newgrf.c b/newgrf.c index 83b4a919b..99f70d37e 100644 --- a/newgrf.c +++ b/newgrf.c @@ -1960,7 +1960,7 @@ static void FeatureNewName(byte *buf, int len) for (; id < endid && len > 0; id++) { size_t ofs = strlen(name) + 1; - if (ofs > 1 && ofs < 128) { + if (ofs < 128) { DEBUG(grf, 8) ("FeatureNewName: %d <- %s", id, name); switch (feature) { diff --git a/newgrf_text.c b/newgrf_text.c index 621e40325..0c576f006 100644 --- a/newgrf_text.c +++ b/newgrf_text.c @@ -247,9 +247,21 @@ StringID AddGRFString(uint32 grfid, uint16 stringid, byte langid_to_add, bool ne _grf_text[id].def_string = def_string; _grf_text[id].textholder = newtext; } else { - GRFText *textptr = _grf_text[id].textholder; - while (textptr->next != NULL) textptr = textptr->next; - textptr->next = newtext; + GRFText **ptext, *text; + bool replaced = false; + + /* Loop through all languages and see if we can replace a string */ + for (ptext = &_grf_text[id].textholder; (text = *ptext) != NULL; ptext = &text->next) { + if (text->langid != GB(langid_to_add, 0, 6)) continue; + newtext->next = text->next; + *ptext = newtext; + free(text); + replaced = true; + break; + } + + /* If a string wasn't replaced, then we must append the new string */ + if (!replaced) *ptext = newtext; } DEBUG(grf, 2)("Added 0x%X: grfid 0x%X string 0x%X lang 0x%X string %s", id, grfid, stringid, newtext->langid, newtext->text); -- cgit v1.2.3-70-g09d2