#if 0
E long *FDECL(alloc, (unsigned int));
#endif
-E char *FDECL(fmt_ptr, (const genericptr,char *));
+E char *FDECL(fmt_ptr, (const genericptr));
/* This next pre-processor directive covers almost the entire file,
* interrupted only occasionally to pick up specific functions as needed. */
-/* SCCS Id: @(#)tradstdc.h 3.5 2006/06/28 */
+/* SCCS Id: @(#)tradstdc.h 3.5 2006/07/07 */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/* NetHack may be freely redistributed. See license for details. */
#endif
#if defined(MICRO) || defined(WIN32)
-/* we actually want to know which systems have an ANSI run-time library
- * to know which support the new %p format for printing pointers.
- * due to the presence of things like gcc, NHSTDC is not a good test.
- * so we assume microcomputers have all converted to ANSI and bigger
+/* We actually want to know which systems have an ANSI run-time library
+ * to know which support the %p format for printing pointers.
+ * Due to the presence of things like gcc, NHSTDC is not a good test.
+ * So we assume microcomputers have all converted to ANSI and bigger
* computers which may have older libraries give reasonable results with
- * the cast.
+ * casting pointers to unsigned long int (fmt_ptr() in alloc.c).
*/
# define HAS_PTR_FMT
#endif
-#define FMT_PTR_BUFSIZ 20 /* buffer size for ptr address as text */
/*
* According to ANSI, prototypes for old-style declarations must widen the
-/* SCCS Id: @(#)alloc.c 3.5 1995/10/04 */
+/* SCCS Id: @(#)alloc.c 3.5 2006/07/07 */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/* NetHack may be freely redistributed. See license for details. */
#define EXTERN_H /* comment line for pre-compiled headers */
#include "config.h"
-#if defined(MONITOR_HEAP) || defined(WIZARD)
-char *FDECL(fmt_ptr, (const genericptr,char *));
-#endif
+char *FDECL(fmt_ptr, (const genericptr));
#ifdef MONITOR_HEAP
#undef alloc
# define PTR_TYP unsigned long
# endif
-/* format a pointer for display purposes; caller supplies the result buffer */
+/* A small pool of static formatting buffers.
+ * PTRBUFSIZ: We assume that pointers will be formatted as integers in
+ * hexadecimal, requring at least 16+1 characters for each buffer to handle
+ * 64-bit systems, but the standard doesn't mandate that encoding and an
+ * implementation could do something different for %p, so we make some
+ * extra room.
+ * PTRBUFCNT: Number of formatted values which can be in use at the same
+ * time. To have more, callers need to make copies of them as they go.
+ */
+#define PTRBUFCNT 4
+#define PTRBUFSIZ 32
+static char ptrbuf[PTRBUFCNT][PTRBUFSIZ];
+static int ptrbufidx = 0;
+
+/* format a pointer for display purposes; returns a static buffer */
char *
-fmt_ptr(ptr, buf)
+fmt_ptr(ptr)
const genericptr ptr;
-char *buf;
{
+ char *buf;
+
+ buf = ptrbuf[ptrbufidx];
+ if (++ptrbufidx >= PTRBUFCNT) ptrbufidx = 0;
+
Sprintf(buf, PTR_FMT, (PTR_TYP)ptr);
return buf;
}
int line;
{
long *ptr = alloc(lth);
- char ptr_address[FMT_PTR_BUFSIZ];
if (!tried_heaplog) heapmon_init();
if (heaplog)
(void) fprintf(heaplog, "+%5u %s %4d %s\n", lth,
- fmt_ptr((genericptr_t)ptr, ptr_address),
- line, file);
+ fmt_ptr((genericptr_t)ptr), line, file);
/* potential panic in alloc() was deferred til here */
if (!ptr) panic("Cannot get %u bytes, line %d of %s",
lth, line, file);
const char *file;
int line;
{
- char ptr_address[FMT_PTR_BUFSIZ];
-
if (!tried_heaplog) heapmon_init();
if (heaplog)
(void) fprintf(heaplog, "- %s %4d %s\n",
- fmt_ptr((genericptr_t)ptr, ptr_address),
- line, file);
+ fmt_ptr((genericptr_t)ptr), line, file);
free(ptr);
}
struct istat_s *bl1, *bl2;
{
int anytype, result = 0;
- char bl1_address[FMT_PTR_BUFSIZ], bl2_address[FMT_PTR_BUFSIZ];
if (!bl1 || !bl2) {
- char bl1_address[FMT_PTR_BUFSIZ], bl2_address[FMT_PTR_BUFSIZ];
panic("compare_blstat: bad istat pointer %s, %s",
- fmt_ptr((genericptr_t)bl1, bl1_address),
- fmt_ptr((genericptr_t)bl2, bl2_address));
+ fmt_ptr((genericptr_t)bl1),
+ fmt_ptr((genericptr_t)bl2));
}
anytype = bl1->anytype;
(anytype == ANY_IPTR || anytype == ANY_UPTR ||
anytype == ANY_LPTR || anytype == ANY_ULPTR)) {
panic("compare_blstat: invalid pointer %s, %s",
- fmt_ptr((genericptr_t)bl1->a.a_void, bl1_address),
- fmt_ptr((genericptr_t)bl2->a.a_void, bl2_address));
+ fmt_ptr((genericptr_t)bl1->a.a_void),
+ fmt_ptr((genericptr_t)bl2->a.a_void));
}
switch(anytype) {
{
int result = 0;
int anytype;
+
if (!bl || !maxbl) {
- char bl_address[FMT_PTR_BUFSIZ], maxbl_address[FMT_PTR_BUFSIZ];
impossible("percentage: bad istat pointer %s, %s",
- fmt_ptr((genericptr_t)bl, bl_address),
- fmt_ptr((genericptr_t)maxbl, maxbl_address));
+ fmt_ptr((genericptr_t)bl),
+ fmt_ptr((genericptr_t)maxbl));
return 0;
}
-/* SCCS Id: @(#)light.c 3.5 1997/04/10 */
+/* SCCS Id: @(#)light.c 3.5 2006/07/07 */
/* Copyright (c) Dean Luick, 1994 */
/* NetHack may be freely redistributed. See license for details. */
{
light_source *curr, *prev;
genericptr_t tmp_id;
- char id_address[FMT_PTR_BUFSIZ];
/* need to be prepared for dealing a with light source which
has only been partially restored during a level change
}
}
impossible("del_light_source: not found type=%d, id=%s",
- type, fmt_ptr((genericptr_t)id, id_address));
+ type, fmt_ptr((genericptr_t)id));
}
/* Mark locations that are temporarily lit via mobile light sources. */
wiz_light_sources()
{
winid win;
- char buf[BUFSZ], arg_address[FMT_PTR_BUFSIZ];
+ char buf[BUFSZ];
light_source *ls;
win = create_nhwindow(NHW_MENU); /* corner text window */
putstr(win, 0, "-------- ----- ------ ---- -------");
for (ls = light_base; ls; ls = ls->next) {
Sprintf(buf, " %2d,%2d %2d 0x%04x %s %s",
- ls->x, ls->y, ls->range, ls->flags,
- (ls->type == LS_OBJECT ? "obj" :
- ls->type == LS_MONSTER ?
- (mon_is_local((struct monst *)ls->id) ? "mon" :
- ((struct monst *)ls->id == &youmonst) ? "you" :
- "<m>") : /* migrating monster */
- "???"),
- fmt_ptr(ls->id, arg_address));
+ ls->x, ls->y, ls->range, ls->flags,
+ (ls->type == LS_OBJECT ? "obj" :
+ ls->type == LS_MONSTER ?
+ (mon_is_local((struct monst *)ls->id) ? "mon" :
+ ((struct monst *)ls->id == &youmonst) ? "you" :
+ "<m>") : /* migrating monster */
+ "???"),
+ fmt_ptr(ls->id));
putstr(win, 0, buf);
}
} else
-/* SCCS Id: @(#)mkobj.c 3.5 2006/06/17 */
+/* SCCS Id: @(#)mkobj.c 3.5 2006/07/07 */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/* NetHack may be freely redistributed. See license for details. */
struct obj *obj;
struct monst *mon;
const char *mesg;
- char obj_address[FMT_PTR_BUFSIZ],
- mon_address[FMT_PTR_BUFSIZ]; /* room for formatted pointers */
mesg = "fobj sanity";
for (obj = fobj; obj; obj = obj->nobj) {
if (obj->where != OBJ_FLOOR) {
pline("%s obj %s %s@(%d,%d): %s\n", mesg,
- fmt_ptr((genericptr_t)obj, obj_address),
- where_name(obj->where),
- obj->ox, obj->oy, doname(obj));
+ fmt_ptr((genericptr_t)obj),
+ where_name(obj->where),
+ obj->ox, obj->oy, doname(obj));
}
check_contained(obj, mesg);
}
for (obj = level.objects[x][y]; obj; obj = obj->nexthere)
if (obj->where != OBJ_FLOOR) {
pline("%s obj %s %s@(%d,%d): %s\n", mesg,
- fmt_ptr((genericptr_t)obj, obj_address),
- where_name(obj->where),
- obj->ox, obj->oy, doname(obj));
+ fmt_ptr((genericptr_t)obj),
+ where_name(obj->where),
+ obj->ox, obj->oy, doname(obj));
}
mesg = "invent sanity";
for (obj = invent; obj; obj = obj->nobj) {
if (obj->where != OBJ_INVENT) {
pline("%s obj %s %s: %s\n", mesg,
- fmt_ptr((genericptr_t)obj, obj_address),
- where_name(obj->where), doname(obj));
+ fmt_ptr((genericptr_t)obj),
+ where_name(obj->where), doname(obj));
}
check_contained(obj, mesg);
}
for (obj = migrating_objs; obj; obj = obj->nobj) {
if (obj->where != OBJ_MIGRATING) {
pline("%s obj %s %s: %s\n", mesg,
- fmt_ptr((genericptr_t)obj, obj_address),
- where_name(obj->where), doname(obj));
+ fmt_ptr((genericptr_t)obj),
+ where_name(obj->where), doname(obj));
}
check_contained(obj, mesg);
}
for (obj = level.buriedobjlist; obj; obj = obj->nobj) {
if (obj->where != OBJ_BURIED) {
pline("%s obj %s %s: %s\n", mesg,
- fmt_ptr((genericptr_t)obj, obj_address),
- where_name(obj->where), doname(obj));
+ fmt_ptr((genericptr_t)obj),
+ where_name(obj->where), doname(obj));
}
check_contained(obj, mesg);
}
for (obj = billobjs; obj; obj = obj->nobj) {
if (obj->where != OBJ_ONBILL) {
pline("%s obj %s %s: %s\n", mesg,
- fmt_ptr((genericptr_t)obj, obj_address),
- where_name(obj->where), doname(obj));
+ fmt_ptr((genericptr_t)obj),
+ where_name(obj->where), doname(obj));
}
/* shouldn't be a full container on the bill */
if (obj->cobj) {
pline("%s obj %s contains %s! %s\n", mesg,
- fmt_ptr((genericptr_t)obj, obj_address),
- something, doname(obj));
+ fmt_ptr((genericptr_t)obj),
+ something, doname(obj));
}
}
for (obj = mon->minvent; obj; obj = obj->nobj) {
if (obj->where != OBJ_MINVENT) {
pline("%s obj %s %s: %s\n", mesg,
- fmt_ptr((genericptr_t)obj, obj_address),
- where_name(obj->where), doname(obj));
+ fmt_ptr((genericptr_t)obj),
+ where_name(obj->where), doname(obj));
}
if (obj->ocarry != mon) {
pline("%s obj %s (%s) not held by mon %s (%s)\n", mesg,
- fmt_ptr((genericptr_t)obj, obj_address),
- doname(obj),
- fmt_ptr((genericptr_t)mon, mon_address),
- mon_nam(mon));
+ fmt_ptr((genericptr_t)obj), doname(obj),
+ fmt_ptr((genericptr_t)mon), mon_nam(mon));
}
check_contained(obj, mesg);
}
const char *mesg;
{
struct obj *obj;
- char obj1_address[FMT_PTR_BUFSIZ], obj2_address[FMT_PTR_BUFSIZ];
for (obj = container->cobj; obj; obj = obj->nobj) {
if (obj->where != OBJ_CONTAINED)
pline("contained %s obj %s: %s\n", mesg,
- fmt_ptr((genericptr_t)obj, obj1_address),
- where_name(obj->where));
+ fmt_ptr((genericptr_t)obj),
+ where_name(obj->where));
else if (obj->ocontainer != container)
pline("%s obj %s not in container %s\n", mesg,
- fmt_ptr((genericptr_t)obj, obj1_address),
- fmt_ptr((genericptr_t)container, obj2_address));
+ fmt_ptr((genericptr_t)obj),
+ fmt_ptr((genericptr_t)container));
}
}
#endif /* WIZARD */
-/* SCCS Id: @(#)mondata.c 3.5 2005/10/05 */
+/* SCCS Id: @(#)mondata.c 3.5 2006/07/07 */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/* NetHack may be freely redistributed. See license for details. */
i = (int)(ptr - &mons[0]);
if (i < LOW_PM || i >= NUMMONS) {
- char ptr_address[FMT_PTR_BUFSIZ];
panic("monsndx - could not index monster (%s)",
- fmt_ptr((genericptr_t)ptr, ptr_address));
+ fmt_ptr((genericptr_t)ptr));
return NON_PM; /* will not get here */
}
-/* SCCS Id: @(#)timeout.c 3.5 2006/04/14 */
+/* SCCS Id: @(#)timeout.c 3.5 2006/07/07 */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/* NetHack may be freely redistributed. See license for details. */
timer_element *base;
{
timer_element *curr;
- char buf[BUFSZ], arg_address[FMT_PTR_BUFSIZ];
+ char buf[BUFSZ];
if (!base) {
putstr(win, 0, "<empty>");
for (curr = base; curr; curr = curr->next) {
#ifdef VERBOSE_TIMER
Sprintf(buf, " %4ld %4ld %-6s %s(%s)",
- curr->timeout, curr->tid, kind_name(curr->kind),
- timeout_funcs[curr->func_index].name,
- fmt_ptr((genericptr_t)curr->arg, arg_address));
+ curr->timeout, curr->tid, kind_name(curr->kind),
+ timeout_funcs[curr->func_index].name,
+ fmt_ptr((genericptr_t)curr->arg));
#else
Sprintf(buf, " %4ld %4ld %-6s #%d(%s)",
- curr->timeout, curr->tid, kind_name(curr->kind),
- curr->func_index,
- fmt_ptr((genericptr_t)curr->arg, arg_address));
+ curr->timeout, curr->tid, kind_name(curr->kind),
+ curr->func_index,
+ fmt_ptr((genericptr_t)curr->arg));
#endif
putstr(win, 0, buf);
}
timer_sanity_check()
{
timer_element *curr;
- char obj_address[FMT_PTR_BUFSIZ];
/* this should be much more complete */
for (curr = timer_base; curr; curr = curr->next)
struct obj *obj = (struct obj *) curr->arg;
if (obj->timed == 0) {
pline("timer sanity: untimed obj %s, timer %ld",
- fmt_ptr((genericptr_t)obj, obj_address), curr->tid);
+ fmt_ptr((genericptr_t)obj), curr->tid);
}
}
}