[Change] A little cleanup and optimization.

This commit is contained in:
Allanis 2014-05-17 11:32:19 +01:00
parent 1abb2c117d
commit dc0ecd40ae

View File

@ -696,16 +696,14 @@ static int planets_load(void) {
* @return 0 on success. * @return 0 on success.
*/ */
static int planet_parse(Planet* planet, const xmlNodePtr parent) { static int planet_parse(Planet* planet, const xmlNodePtr parent) {
int i; int i, mem;
char str[PATH_MAX]; char str[PATH_MAX];
xmlNodePtr node, cur, ccur; xmlNodePtr node, cur, ccur;
int len;
unsigned int flags; unsigned int flags;
/* Clear up memory for sane defaults. */ /* Clear up memory for sane defaults. */
memset(planet, 0, sizeof(Planet)); memset(planet, 0, sizeof(Planet));
planet->faction = -1; planet->faction = -1;
str[0] = '\0';
flags = 0; flags = 0;
/* Get the name. */ /* Get the name. */
@ -721,9 +719,8 @@ static int planet_parse(Planet* planet, const xmlNodePtr parent) {
PLANET_GFX_SPACE"%s", 1, 1, 0); PLANET_GFX_SPACE"%s", 1, 1, 0);
} }
else if(xml_isNode(cur, "exterior")) { /* Load land gfx. */ else if(xml_isNode(cur, "exterior")) { /* Load land gfx. */
len = strlen(xml_raw(cur)) + sizeof(PLANET_GFX_EXTERIOR); snprintf(str, PATH_MAX, PLANET_GFX_EXTERIOR"%s", xml_get(cur));
planet->gfx_exterior = malloc(len); planet->gfx_exterior = strdup(str);
snprintf(planet->gfx_exterior, len, PLANET_GFX_EXTERIOR"%s", xml_get(cur));
} }
} while(xml_nextNode(cur)); } while(xml_nextNode(cur));
} }
@ -779,15 +776,23 @@ static int planet_parse(Planet* planet, const xmlNodePtr parent) {
} }
else if(xml_isNode(cur, "commodities")) { else if(xml_isNode(cur, "commodities")) {
ccur = cur->children; ccur = cur->children;
mem = 0;
do { do {
if(xml_isNode(ccur, "commodity")) { if(xml_isNode(ccur, "commodity")) {
planet->commodities = realloc(planet->commodities,
(planet->ncommodities+1) * sizeof(Commodity*));
planet->commodities[planet->ncommodities] =
commodity_get(xml_get(ccur));
planet->ncommodities++; planet->ncommodities++;
/* Memory must grow. */
if(planet->ncommodities > mem) {
mem += CHUNK_SIZE_SMALL;
planet->commodities = realloc(planet->commodities,
mem * sizeof(Commodity*));
}
planet->commodities[planet->ncommodities - 1] =
commodity_get(xml_get(ccur));
} }
} while(xml_nextNode(ccur)); } while(xml_nextNode(ccur));
/* Shrink to minimum size. */
planet->commodities = realloc(planet->commodities,
planet->ncommodities * sizeof(Commodity*));
} }
} while(xml_nextNode(cur)); } while(xml_nextNode(cur));
} }