obj->oextra->{omid,olong}

Change obj->oextra->omid from a usually-Null pointer field in
oextra to a simple 'unsigned' that doesn't need any allocation
beyond obj->oextra itself.  Value 0 means that it is not in use;
it is used to hold a monst.m_id and those are always non-zero.

Delete unused obj->oextra->olong.  'olong' used to be the last
field in struct obj, put there to force alignment of anything
which followed it back when obj structures were over-allocated to
append extra information.  It had a comment about being used for
temporary gold but whatever that was, temporary gold was gone long
before obj->oextra got introduced.

Bump EDITLEVEL since this invalidates existing 3.7 save files.

Remove a bunch of tabs from obj.h and save.c.
This commit is contained in:
PatR
2020-04-24 09:29:52 -07:00
parent 6b2fcd7d73
commit e63fed627c
9 changed files with 98 additions and 160 deletions

View File

@@ -2295,12 +2295,9 @@ struct obj *otmp;
sz += (int) strlen(ONAME(otmp)) + 1;
if (OMONST(otmp))
sz += size_monst(OMONST(otmp), FALSE);
if (OMID(otmp))
sz += (int) sizeof (unsigned);
if (OLONG(otmp))
sz += (int) sizeof (long);
if (OMAILCMD(otmp))
sz += (int) strlen(OMAILCMD(otmp)) + 1;
/* sz += (int) sizeof (unsigned); -- now part of oextra itself */
}
return sz;
}

View File

@@ -3718,6 +3718,11 @@ register struct obj *otmp, *obj;
if (obj->unpaid && !same_price(obj, otmp))
return FALSE;
/* some additional information is always incompatible */
if (has_omonst(obj) || has_omid(obj)
|| has_omonst(otmp) || has_omid(otmp))
return FALSE;
/* if they have names, make sure they're the same */
objnamelth = strlen(safe_oname(obj));
otmpnamelth = strlen(safe_oname(otmp));
@@ -3727,11 +3732,12 @@ register struct obj *otmp, *obj;
&& strncmp(ONAME(obj), ONAME(otmp), objnamelth)))
return FALSE;
/* for the moment, any additional information is incompatible */
if (has_omonst(obj) || has_omid(obj) || has_olong(obj) || has_omonst(otmp)
|| has_omid(otmp) || has_olong(otmp))
/* if one has an attached mail command, other must have same command */
if (!has_omailcmd(obj) ? has_omailcmd(otmp)
: (!has_omailcmd(otmp) || strcmp(OMAILCMD(obj), OMAILCMD(otmp)) != 0))
return FALSE;
/* should be moot since matching artifacts wouldn't be unique */
if (obj->oartifact != otmp->oartifact)
return FALSE;

View File

@@ -75,9 +75,8 @@ newoextra()
oextra = (struct oextra *) alloc(sizeof (struct oextra));
oextra->oname = 0;
oextra->omonst = 0;
oextra->omid = 0;
oextra->olong = 0;
oextra->omailcmd = 0;
oextra->omid = 0;
return oextra;
}
@@ -92,10 +91,6 @@ struct obj *o;
free((genericptr_t) x->oname);
if (x->omonst)
free_omonst(o); /* 'o' rather than 'x' */
if (x->omid)
free((genericptr_t) x->omid);
if (x->olong)
free((genericptr_t) x->olong);
if (x->omailcmd)
free((genericptr_t) x->omailcmd);
@@ -141,42 +136,14 @@ struct obj *otmp;
{
if (!otmp->oextra)
otmp->oextra = newoextra();
if (!OMID(otmp)) {
OMID(otmp) = (unsigned *) alloc(sizeof (unsigned));
(void) memset((genericptr_t) OMID(otmp), 0, sizeof (unsigned));
}
OMID(otmp) = 0;
}
void
free_omid(otmp)
struct obj *otmp;
{
if (otmp->oextra && OMID(otmp)) {
free((genericptr_t) OMID(otmp));
OMID(otmp) = (unsigned *) 0;
}
}
void
newolong(otmp)
struct obj *otmp;
{
if (!otmp->oextra)
otmp->oextra = newoextra();
if (!OLONG(otmp)) {
OLONG(otmp) = (long *) alloc(sizeof (long));
(void) memset((genericptr_t) OLONG(otmp), 0, sizeof (long));
}
}
void
free_olong(otmp)
struct obj *otmp;
{
if (otmp->oextra && OLONG(otmp)) {
free((genericptr_t) OLONG(otmp));
OLONG(otmp) = (long *) 0;
}
OMID(otmp) = 0;
}
void
@@ -406,20 +373,13 @@ struct obj *obj2, *obj1;
if (OMONST(obj1)->mextra)
copy_mextra(OMONST(obj2), OMONST(obj1));
}
if (has_omailcmd(obj1)) {
new_omailcmd(obj2, OMAILCMD(obj1));
}
if (has_omid(obj1)) {
if (!OMID(obj2))
newomid(obj2);
(void) memcpy((genericptr_t) OMID(obj2), (genericptr_t) OMID(obj1),
sizeof (unsigned));
}
if (has_olong(obj1)) {
if (!OLONG(obj2))
newolong(obj2);
(void) memcpy((genericptr_t) OLONG(obj2), (genericptr_t) OLONG(obj1),
sizeof (long));
}
if (has_omailcmd(obj1)) {
new_omailcmd(obj2, OMAILCMD(obj1));
OMID(obj2) = OMID(obj1);
}
}
@@ -1605,7 +1565,7 @@ unsigned mid;
if (!mid || !obj)
return (struct obj *) 0;
newomid(obj);
*OMID(obj) = mid;
OMID(obj) = mid;
return obj;
}

View File

@@ -229,25 +229,6 @@ struct obj *otmp;
restmon(nhfp, OMONST(otmp));
}
/* omid - monster id number, connecting corpse to ghost */
if (nhfp->structlevel)
mread(nhfp->fd, (genericptr_t) &buflen, sizeof(buflen));
if (buflen > 0) {
newomid(otmp);
if (nhfp->structlevel)
mread(nhfp->fd, (genericptr_t) OMID(otmp), buflen);
}
/* olong - temporary gold */
if (nhfp->structlevel)
mread(nhfp->fd, (genericptr_t) &buflen, sizeof(buflen));
if (buflen > 0) {
newolong(otmp);
if (nhfp->structlevel)
mread(nhfp->fd, (genericptr_t) OLONG(otmp), buflen);
}
/* omailcmd - feedback mechanism for scroll of mail */
if (nhfp->structlevel)
mread(nhfp->fd, (genericptr_t) &buflen, sizeof(buflen));
@@ -259,6 +240,11 @@ struct obj *otmp;
new_omailcmd(otmp, omailcmd);
free((genericptr_t) omailcmd);
}
/* omid - monster id number, connecting corpse to ghost */
newomid(otmp); /* superfluous; we're already allocated otmp->oextra */
if (nhfp->structlevel)
mread(nhfp->fd, (genericptr_t) &OMID(otmp), sizeof OMID(otmp));
}
}
@@ -1393,6 +1379,7 @@ boolean ghostly;
{
struct obj *otmp;
unsigned oldid, nid;
for (otmp = fobj; otmp; otmp = otmp->nobj) {
if (ghostly && has_omonst(otmp)) {
struct monst *mtmp = OMONST(otmp);
@@ -1401,11 +1388,9 @@ boolean ghostly;
mtmp->mpeaceful = mtmp->mtame = 0; /* pet's owner died! */
}
if (ghostly && has_omid(otmp)) {
(void) memcpy((genericptr_t) &oldid, (genericptr_t) OMID(otmp),
sizeof(oldid));
oldid = OMID(otmp);
if (lookup_id_mapping(oldid, &nid))
(void) memcpy((genericptr_t) OMID(otmp), (genericptr_t) &nid,
sizeof(nid));
OMID(otmp) = nid;
else
free_omid(otmp);
}

View File

@@ -633,9 +633,9 @@ boolean rlecomp;
/* run has been broken, write out run-length encoding */
writeout:
if (nhfp->structlevel) {
bwrite(nhfp->fd, (genericptr_t) &match, sizeof (uchar));
bwrite(nhfp->fd, (genericptr_t) rgrm, sizeof (struct rm));
}
bwrite(nhfp->fd, (genericptr_t) &match, sizeof match);
bwrite(nhfp->fd, (genericptr_t) rgrm, sizeof *rgrm);
}
/* start encoding again. we have at least 1 rm
in the next run, viz. this one. */
match = 1;
@@ -679,7 +679,7 @@ struct cemetery **cemeteryaddr;
if (perform_bwrite(nhfp)) {
if (nhfp->structlevel)
bwrite(nhfp->fd, (genericptr_t) thisbones, sizeof *thisbones);
}
}
if (release_data(nhfp))
free((genericptr_t) thisbones);
}
@@ -705,7 +705,7 @@ NHFILE *nhfp;
if (perform_bwrite(nhfp)) {
if (nhfp->structlevel)
bwrite(nhfp->fd, (genericptr_t) damageptr, sizeof *damageptr);
}
}
tmp_dam = damageptr;
damageptr = damageptr->next;
if (release_data(nhfp))
@@ -742,23 +742,8 @@ struct obj *otmp;
} else {
if (nhfp->structlevel)
bwrite(nhfp->fd, (genericptr_t) &zerobuf, sizeof zerobuf);
}
buflen = OMID(otmp) ? (int) sizeof (unsigned) : 0;
if (nhfp->structlevel)
bwrite(nhfp->fd, (genericptr_t) &buflen, sizeof buflen);
if (buflen > 0) {
if (nhfp->structlevel)
bwrite(nhfp->fd, (genericptr_t) OMID(otmp), buflen);
}
/* TODO: post 3.6.x, get rid of this */
buflen = OLONG(otmp) ? (int) sizeof (long) : 0;
if (nhfp->structlevel)
bwrite(nhfp->fd, (genericptr_t) &buflen, sizeof buflen);
if (buflen > 0) {
if (nhfp->structlevel)
bwrite(nhfp->fd, (genericptr_t) OLONG(otmp), buflen);
}
}
/* extra info about scroll of mail */
buflen = OMAILCMD(otmp) ? (int) strlen(OMAILCMD(otmp)) + 1 : 0;
if (nhfp->structlevel)
bwrite(nhfp->fd, (genericptr_t) &buflen, sizeof buflen);
@@ -766,6 +751,11 @@ struct obj *otmp;
if (nhfp->structlevel)
bwrite(nhfp->fd, (genericptr_t) OMAILCMD(otmp), buflen);
}
/* omid used to be indirect via a pointer in oextra but has
become part of oextra itself; 0 means not applicable and
gets saved/restored whenever any other oxtra components do */
if (nhfp->structlevel)
bwrite(nhfp->fd, (genericptr_t) &OMID(otmp), sizeof OMID(otmp));
}
}
@@ -874,11 +864,12 @@ struct monst *mtmp;
if (buflen > 0) {
if (nhfp->structlevel)
bwrite(nhfp->fd, (genericptr_t) EDOG(mtmp), buflen);
}
}
/* mcorpsenm is inline int rather than pointer to something,
so doesn't need to be preceded by a length field */
if (nhfp->structlevel)
bwrite(nhfp->fd, (genericptr_t) &MCORPSENM(mtmp), sizeof MCORPSENM(mtmp));
bwrite(nhfp->fd, (genericptr_t) &MCORPSENM(mtmp),
sizeof MCORPSENM(mtmp));
}
}
@@ -930,7 +921,7 @@ register struct trap *trap;
if (perform_bwrite(nhfp)) {
if (nhfp->structlevel)
bwrite(nhfp->fd, (genericptr_t) trap, sizeof *trap);
}
}
if (release_data(nhfp))
dealloc_trap(trap);
trap = trap2;
@@ -959,7 +950,7 @@ NHFILE *nhfp;
if (f1->fid >= 0 && perform_bwrite(nhfp)) {
if (nhfp->structlevel)
bwrite(nhfp->fd, (genericptr_t) f1, sizeof *f1);
}
}
if (release_data(nhfp))
dealloc_fruit(f1);
f1 = f2;
@@ -992,7 +983,7 @@ NHFILE *nhfp;
if (perform_bwrite(nhfp)) {
if (nhfp->structlevel)
bwrite(nhfp->fd, (genericptr_t) tmplev, sizeof *tmplev);
}
}
if (release_data(nhfp))
free((genericptr_t) tmplev);
}

View File

@@ -873,8 +873,7 @@ boolean by_hero;
struct monst *ghost;
struct obj *otmp;
(void) memcpy((genericptr_t) &m_id, (genericptr_t) OMID(corpse),
sizeof m_id);
m_id = OMID(corpse);
ghost = find_mid(m_id, FM_FMON);
if (ghost && ghost->data == &mons[PM_GHOST]) {
if (canseemon(ghost))