allow readobjnam arg to be nonnull

Have it key on &do_random_str instead of NULL,
and modify makewish() in zap.c for the new protocol.
This commit is contained in:
nhmall
2023-12-16 19:30:34 -05:00
parent 3e83d23b19
commit 10f29a9760
5 changed files with 8 additions and 8 deletions

View File

@@ -1069,8 +1069,10 @@ decl_globals_init(void)
gu.urace = urace_init_data;
}
/* fields in 'hands_obj' don't matter, just its distinct address */
/* fields in 'hands_obj' and contents of 'do_random_str' don't matter,
* just their distinct addresses */
struct obj hands_obj = DUMMY;
char do_random_str = '\0';
/* gcc 12.2's static analyzer thinks that some fields of gc.context.victual
are uninitialized when compiling 'bite(eat.c)' but that's impossible;

View File

@@ -4576,7 +4576,7 @@ readobjnam_postparse3(struct _readobjnam_data *d)
/*
* Return something wished for. Specifying a null pointer for
* Return something wished for. Specifying &do_random_str for
* the user request string results in a random object. Otherwise,
* if asking explicitly for "nothing" (or "nil") return no_wish;
* if not an object return &hands_obj; if an error (no matching object),
@@ -4588,7 +4588,7 @@ readobjnam(char *bp, struct obj *no_wish)
struct _readobjnam_data d;
readobjnam_init(bp, &d);
if (!bp)
if (bp == &do_random_str)
goto any;
/* first, remove extra whitespace they may have typed */

View File

@@ -6024,7 +6024,7 @@ makewish(void)
if (++tries < MAXWISHTRY)
goto retry;
pline1(thats_enough_tries);
otmp = readobjnam((char *) 0, (struct obj *) 0);
otmp = readobjnam(&do_random_str, (struct obj *) 0);
if (!otmp)
return; /* for safety; should never happen */
} else if (otmp == &nothing) {