mextra follow up bit 2

<Someone> noticed the leftover zeromextra, this removes it.

Using memset() on a possibly failed mextra allocation was inapprorpriate,
so replace the newmextra() macro with a function.

Prevent a crash in christen_monst() if mextra was not initialized.
This commit is contained in:
nethack.allison
2006-01-06 22:16:46 +00:00
parent 30c508a664
commit aea3c50163
4 changed files with 12 additions and 5 deletions

View File

@@ -233,6 +233,7 @@ const char *name;
return mtmp;
}
if (has_name(mtmp)) free((genericptr_t)MNAME(mtmp));
if (!mtmp->mextra) mtmp->mextra = newmextra();
MNAME(mtmp) = (char *)alloc(lth);
if (lth) Strcpy(MNAME(mtmp), name);

View File

@@ -9,7 +9,6 @@
#endif
STATIC_VAR NEARDATA struct monst zeromonst;
STATIC_VAR NEARDATA struct mextra zeromextra;
/* this assumes that a human quest leader or nemesis is an archetype
of the corresponding role; that isn't so for some roles (tourist
@@ -853,6 +852,16 @@ int mndx;
}
}
struct mextra *
newmextra()
{
struct mextra *mextra;
mextra = (struct mextra *)alloc(sizeof(struct mextra));
if (mextra)
(void) memset((genericptr_t)mextra, 0, sizeof(struct mextra));
return mextra;
}
/*
* called with [x,y] = coordinates;
* [0,0] means anyplace