E void FDECL(free_mname, (struct monst *));
E void FDECL(new_oname, (struct obj *,int));
E void FDECL(free_oname, (struct obj *));
+E const char *FDECL(safe_oname, (struct obj *));
E struct monst *FDECL(christen_monst, (struct monst *,const char *));
E int NDECL(do_mname);
E struct obj *FDECL(oname, (struct obj *,const char *));
/* 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 */
}
}
+/* safe_oname() always returns a valid pointer to
+ * a string, either the pointer to an object's name
+ * if it has one, or a pointer to an empty string
+ * if it doesn't.
+ */
+const char *
+safe_oname(obj)
+struct obj *obj;
+{
+ if (has_oname(obj))
+ return ONAME(obj);
+ else
+ return "";
+}
+
/* historical note: this returns a monster pointer because it used to
allocate a new bigger block of memory to hold the monster and its name */
struct monst *
&& !wizard
#endif
) {
- char *tnam = "";
- if (has_oname(otmp))
- tnam = ONAME(otmp);
- artifact_exists(otmp, tnam, FALSE);
+ artifact_exists(otmp, safe_oname(otmp), FALSE);
obfree(otmp, (struct obj *) 0);
otmp = &zeroobj;
pline("For a moment, you feel %s in your %s, but it disappears!",