diff --git a/include/mextra.h b/include/mextra.h index 50546787b..9d87a8181 100644 --- a/include/mextra.h +++ b/include/mextra.h @@ -19,8 +19,8 @@ * file. * 3. Add a referencing macro at bottom of this file after the mextra * struct (see MNAME, EGD, EPRI, ESHK, EMIN, or EDOG for examples). - * 4. Zero out the pointer to your struct in newmextra() in - * src/makemon.c. + * 4. If your new field isn't a pointer and requires a special value + * on initialization, add code to init_mextra() in src/makemon.c * 5. Create a newXX(mtmp) function and possibly a free_XX(mtmp) * function in an appropriate new or existing source file and add * a prototype for it to include/extern.h. diff --git a/include/obj.h b/include/obj.h index cbb5f7003..ad54580ad 100644 --- a/include/obj.h +++ b/include/obj.h @@ -389,8 +389,8 @@ struct obj { * 4. Add a testing macro after the set of referencing macros * (see has_oname(), has_omonst(), has_omailcmd(), and has_omin(), * for examples). - * 5. Zero out the pointer to your struct in newoextra() in - * src/mkobj.c. + * 5. If your new field isn't a pointer and requires a special value + * on initialization, add code to init_oextra() in src/mkobj.c. * 6. Create newXX(otmp) function and possibly free_XX(otmp) function * in an appropriate new or existing source file and add a prototype * for it to include/extern.h. The majority of these are currently diff --git a/src/makemon.c b/src/makemon.c index 09b082ed8..12f03431a 100644 --- a/src/makemon.c +++ b/src/makemon.c @@ -1038,19 +1038,23 @@ int mndx; } } +static const struct mextra zeromextra = { DUMMY }; + +static void +init_mextra(mex) +struct mextra *mex; +{ + *mex = zeromextra; + mex->mcorpsenm = NON_PM; +} + struct mextra * newmextra() { struct mextra *mextra; mextra = (struct mextra *) alloc(sizeof(struct mextra)); - mextra->mname = 0; - mextra->egd = 0; - mextra->epri = 0; - mextra->eshk = 0; - mextra->emin = 0; - mextra->edog = 0; - mextra->mcorpsenm = NON_PM; + init_mextra(mextra); return mextra; } diff --git a/src/mkobj.c b/src/mkobj.c index 13e86e034..4b3411a6a 100644 --- a/src/mkobj.c +++ b/src/mkobj.c @@ -67,16 +67,22 @@ static const struct icp hellprobs[] = { { 20, WEAPON_CLASS }, { 8, RING_CLASS }, { 4, AMULET_CLASS } }; +static const struct oextra zerooextra = { DUMMY }; + +static void +init_oextra(oex) +struct oextra *oex; +{ + *oex = zerooextra; +} + struct oextra * newoextra() { struct oextra *oextra; oextra = (struct oextra *) alloc(sizeof (struct oextra)); - oextra->oname = 0; - oextra->omonst = 0; - oextra->omailcmd = 0; - oextra->omid = 0; + init_oextra(oextra); return oextra; }