diff --git a/src/kernel/race.h b/src/kernel/race.h index a106249f8..775ac55a5 100644 --- a/src/kernel/race.h +++ b/src/kernel/race.h @@ -119,6 +119,8 @@ extern "C" { extern int num_races; + typedef const char *(*race_name_func)(const struct unit *); + typedef struct race { char *_name; float magres; diff --git a/src/kernel/unit.c b/src/kernel/unit.c index 47e4a63b4..98d635d87 100644 --- a/src/kernel/unit.c +++ b/src/kernel/unit.c @@ -1416,7 +1416,8 @@ void name_unit(unit * u) if (u_race(u)->generate_name) { const char *gen_name = u_race(u)->generate_name(u); if (gen_name) { - unit_setname(u, gen_name); + free(u->_name); + u->_name = _strdup(gen_name); } else { unit_setname(u, racename(u->faction->locale, u, u_race(u))); diff --git a/src/kernel/xmlreader.c b/src/kernel/xmlreader.c index da8014d67..e944471f8 100644 --- a/src/kernel/xmlreader.c +++ b/src/kernel/xmlreader.c @@ -1797,7 +1797,7 @@ static int parse_races(xmlDocPtr doc) } assert(propValue != NULL); if (strcmp((const char *)propValue, "name") == 0) { - rc->generate_name = (const char *(*)(const struct unit *))fun; + rc->generate_name = (race_name_func)fun; } else if (strcmp((const char *)propValue, "describe") == 0) { rc->describe = diff --git a/src/names.h b/src/names.h index 76e7c9497..63e9c8628 100644 --- a/src/names.h +++ b/src/names.h @@ -23,7 +23,6 @@ extern "C" { #endif struct unit; - typedef const char *(*name_func)(const struct unit *); void register_names(void); const char *abkz(const char *s, char *buf, size_t size, size_t maxchars); diff --git a/src/names.test.c b/src/names.test.c index 99c1663ed..7c3c24506 100644 --- a/src/names.test.c +++ b/src/names.test.c @@ -2,6 +2,7 @@ #include "names.h" +#include #include #include @@ -10,14 +11,14 @@ static void test_names(CuTest * tc) { - name_func foo; + race_name_func foo; test_cleanup(); register_names(); default_locale = test_create_locale(); locale_setstring(default_locale, "undead_prefix_0", "Kleine"); locale_setstring(default_locale, "undead_name_0", "Graue"); locale_setstring(default_locale, "undead_postfix_0", "Kobolde"); - CuAssertPtrNotNull(tc, foo = (name_func)get_function("nameundead")); + CuAssertPtrNotNull(tc, foo = (race_name_func)get_function("nameundead")); CuAssertStrEquals(tc, "Kleine Graue Kobolde", foo(NULL)); CuAssertPtrNotNull(tc, get_function("nameskeleton")); CuAssertPtrNotNull(tc, get_function("namezombie"));