safe_oname (trunk only)

There were routines that were passed the
object name as an argument.  Before the oextra
patch, ONAME() always returned a valid pointer
to a location within the obj struct. The oextra
patch worked around those cases by
using a temporary variable that was either set
to ONAME (if the obj passed the has_oname() test),
or to ""  (pointer to an empty string) if no name was
present.

Since that might be a common thing to do, provide
the safe_oname() routine that you can use as a
function parameter without having to worry about
about whether ONAME(obj) is valid, and without
the need for the temporary variable.
This commit is contained in:
nethack.allison
2006-04-15 15:40:27 +00:00
parent c16a87d367
commit 78ef9ef991
4 changed files with 19 additions and 8 deletions

View File

@@ -68,16 +68,14 @@ boolean restore;
/* artifact bookeeping needs to be done during
restore; other fixups are done while saving */
if (otmp->oartifact) {
char *tmponame = "";
if (has_oname(otmp)) tmponame = ONAME(otmp);
if (exist_artifact(otmp->otyp, tmponame) ||
if (exist_artifact(otmp->otyp, safe_oname(otmp)) ||
is_quest_artifact(otmp)) {
/* prevent duplicate--revert to ordinary obj */
otmp->oartifact = 0;
if (has_oname(otmp))
free_oname(otmp);
} else {
artifact_exists(otmp, tmponame, TRUE);
artifact_exists(otmp, safe_oname(otmp), TRUE);
}
}
} else { /* saving */