Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/games/hack - document non-literal format strings



details:   https://anonhg.NetBSD.org/src/rev/69b2a90e6939
branches:  trunk
changeset: 768403:69b2a90e6939
user:      christos <christos%NetBSD.org@localhost>
date:      Tue Aug 16 09:26:22 2011 +0000

description:
- document non-literal format strings
- avoid strict aliasing violations, but adding an intermediate function.

diffstat:

 games/hack/Makefile     |   9 ++----
 games/hack/def.monst.h  |   4 ++-
 games/hack/hack.monst.c |  10 ++++++-
 games/hack/hack.vault.c |  60 ++++++++++++++++++++++++++----------------------
 4 files changed, 46 insertions(+), 37 deletions(-)

diffs (245 lines):

diff -r dbdde57c7cc4 -r 69b2a90e6939 games/hack/Makefile
--- a/games/hack/Makefile       Tue Aug 16 08:33:46 2011 +0000
+++ b/games/hack/Makefile       Tue Aug 16 09:26:22 2011 +0000
@@ -1,4 +1,4 @@
-#      $NetBSD: Makefile,v 1.43 2011/06/22 02:49:43 mrg Exp $
+#      $NetBSD: Makefile,v 1.44 2011/08/16 09:26:22 christos Exp $
 #      @(#)Makefile    8.2 (Berkeley) 4/27/95
 
 .include <bsd.own.mk>
@@ -41,6 +41,8 @@
 COPTS.hack.bones.c+=   -Wno-shadow
 COPTS.hack.do.c+=      -Wno-shadow
 .endif
+COPTS.hack.mon.c+=     -Wno-format-nonliteral
+COPTS.hack.rip.c+=     -Wno-format-nonliteral
 
 .if !exists(${DESTDIR}${FILESDIR}/perm)
 afterinstall: clobber
@@ -57,8 +59,3 @@
        rm -f ${DESTDIR}/var/games/hackdir/bones*
 
 .include <bsd.prog.mk>
-
-# XXX
-.if ${HAVE_GCC} == 45
-COPTS.hack.vault.c+=   -fno-strict-aliasing
-.endif
diff -r dbdde57c7cc4 -r 69b2a90e6939 games/hack/def.monst.h
--- a/games/hack/def.monst.h    Tue Aug 16 08:33:46 2011 +0000
+++ b/games/hack/def.monst.h    Tue Aug 16 09:26:22 2011 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: def.monst.h,v 1.8 2011/08/06 20:18:26 dholland Exp $   */
+/*     $NetBSD: def.monst.h,v 1.9 2011/08/16 09:26:22 christos Exp $   */
 
 /*
  * Copyright (c) 1985, Stichting Centrum voor Wiskunde en Informatica,
@@ -112,6 +112,8 @@
 extern struct monst *fmon;
 extern struct monst *fallen_down;
 
+extern void *monster_private(struct monst *);
+
 /* these are in mspeed */
 #define MSLOW 1 /* slow monster */
 #define MFAST 2 /* speeded monster */
diff -r dbdde57c7cc4 -r 69b2a90e6939 games/hack/hack.monst.c
--- a/games/hack/hack.monst.c   Tue Aug 16 08:33:46 2011 +0000
+++ b/games/hack/hack.monst.c   Tue Aug 16 09:26:22 2011 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: hack.monst.c,v 1.6 2003/04/02 18:36:38 jsm Exp $       */
+/*     $NetBSD: hack.monst.c,v 1.7 2011/08/16 09:26:22 christos Exp $  */
 
 /*
  * Copyright (c) 1985, Stichting Centrum voor Wiskunde en Informatica,
@@ -63,7 +63,7 @@
 
 #include <sys/cdefs.h>
 #ifndef lint
-__RCSID("$NetBSD: hack.monst.c,v 1.6 2003/04/02 18:36:38 jsm Exp $");
+__RCSID("$NetBSD: hack.monst.c,v 1.7 2011/08/16 09:26:22 christos Exp $");
 #endif                         /* not lint */
 
 #include "hack.h"
@@ -142,3 +142,9 @@
 const struct permonst pm_mail_daemon = {"mail daemon", '2', 100, 1, 10, 0, 0, 0};
 #endif /* MAIL */
 const struct permonst pm_eel = {"giant eel", ';', 15, 6, -3, 3, 6, 0};
+
+void *
+monster_private(struct monst *mon)
+{
+       return mon->mextra;
+}
diff -r dbdde57c7cc4 -r 69b2a90e6939 games/hack/hack.vault.c
--- a/games/hack/hack.vault.c   Tue Aug 16 08:33:46 2011 +0000
+++ b/games/hack/hack.vault.c   Tue Aug 16 09:26:22 2011 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: hack.vault.c,v 1.8 2009/06/07 18:30:39 dholland Exp $  */
+/*     $NetBSD: hack.vault.c,v 1.9 2011/08/16 09:26:22 christos Exp $  */
 
 /*
  * Copyright (c) 1985, Stichting Centrum voor Wiskunde en Informatica,
@@ -63,7 +63,7 @@
 
 #include <sys/cdefs.h>
 #ifndef lint
-__RCSID("$NetBSD: hack.vault.c,v 1.8 2009/06/07 18:30:39 dholland Exp $");
+__RCSID("$NetBSD: hack.vault.c,v 1.9 2011/08/16 09:26:22 christos Exp $");
 #endif                         /* not lint */
 
 #include "hack.h"
@@ -116,7 +116,6 @@
 
 static struct monst *guard;
 static int      gdlevel;
-#define        EGD     ((struct egd *)(&(guard->mextra[0])))
 
 static void restfakecorr(void);
 static int goldincorridor(void);
@@ -126,19 +125,20 @@
 {
        int             fcx, fcy, fcbeg;
        struct rm      *crm;
+       struct egd      *egd = monster_private(guard);
 
-       while ((fcbeg = EGD->fcbeg) < EGD->fcend) {
-               fcx = EGD->fakecorr[fcbeg].fx;
-               fcy = EGD->fakecorr[fcbeg].fy;
+       while ((fcbeg = egd->fcbeg) < egd->fcend) {
+               fcx = egd->fakecorr[fcbeg].fx;
+               fcy = egd->fakecorr[fcbeg].fy;
                if ((u.ux == fcx && u.uy == fcy) || cansee(fcx, fcy) ||
                    m_at(fcx, fcy))
                        return;
                crm = &levl[fcx][fcy];
-               crm->typ = EGD->fakecorr[fcbeg].ftyp;
+               crm->typ = egd->fakecorr[fcbeg].ftyp;
                if (!crm->typ)
                        crm->seen = 0;
                newsym(fcx, fcy);
-               EGD->fcbeg++;
+               egd->fcbeg++;
        }
        /* it seems he left the corridor - let the guard disappear */
        mondead(guard);
@@ -149,9 +149,10 @@
 goldincorridor(void)
 {
        int             fci;
+       struct egd      *egd = monster_private(guard);
 
-       for (fci = EGD->fcbeg; fci < EGD->fcend; fci++)
-               if (g_at(EGD->fakecorr[fci].fx, EGD->fakecorr[fci].fy))
+       for (fci = egd->fcbeg; fci < egd->fcend; fci++)
+               if (g_at(egd->fakecorr[fci].fx, egd->fakecorr[fci].fy))
                        return (1);
        return (0);
 }
@@ -173,6 +174,7 @@
 invault(void)
 {
        int tmp = inroom(u.ux, u.uy);
+       struct egd      *egd;
        if (tmp < 0 || rooms[tmp].rtype != VAULT) {
                u.uinvault = 0;
                return;
@@ -221,7 +223,8 @@
                if (!(guard = makemon(&pm_guard, x, y)))
                        return;
                guard->isgd = guard->mpeaceful = 1;
-               EGD->gddone = 0;
+               egd = monster_private(guard);
+               egd->gddone = 0;
                gdlevel = dlevel;
                if (!cansee(guard->mx, guard->my)) {
                        mondead(guard);
@@ -249,14 +252,14 @@
                        pline("\"Most likely all that gold was stolen from this vault.\"");
                        pline("\"Please drop your gold (say d$ ) and follow me.\"");
                }
-               EGD->gdx = gx;
-               EGD->gdy = gy;
-               EGD->fcbeg = 0;
-               EGD->fakecorr[0].fx = x;
-               EGD->fakecorr[0].fy = y;
-               EGD->fakecorr[0].ftyp = levl[x][y].typ;
+               egd->gdx = gx;
+               egd->gdy = gy;
+               egd->fcbeg = 0;
+               egd->fakecorr[0].fx = x;
+               egd->fakecorr[0].fy = y;
+               egd->fakecorr[0].ftyp = levl[x][y].typ;
                levl[x][y].typ = DOOR;
-               EGD->fcend = 1;
+               egd->fcend = 1;
        }
 }
 
@@ -266,13 +269,14 @@
        int             x, y, dx, dy, gx, gy, nx, ny, typ;
        struct fakecorridor *fcp;
        struct rm      *crm;
+       struct egd      *egd = monster_private(guard);
        if (!guard || gdlevel != dlevel) {
                impossible("Where is the guard?");
                return (2);     /* died */
        }
        if (u.ugold || goldincorridor())
                return (0);     /* didnt move */
-       if (dist(guard->mx, guard->my) > 1 || EGD->gddone) {
+       if (dist(guard->mx, guard->my) > 1 || egd->gddone) {
                restfakecorr();
                return (0);     /* didnt move */
        }
@@ -286,9 +290,9 @@
                                        if (isok(nx, ny))
                                                if (!IS_WALL(typ = (crm = &levl[nx][ny])->typ) && typ != POOL) {
                                                        int             i;
-                                                       for (i = EGD->fcbeg; i < EGD->fcend; i++)
-                                                               if (EGD->fakecorr[i].fx == nx &&
-                                                                   EGD->fakecorr[i].fy == ny)
+                                                       for (i = egd->fcbeg; i < egd->fcend; i++)
+                                                               if (egd->fakecorr[i].fx == nx &&
+                                                                   egd->fakecorr[i].fy == ny)
                                                                        goto nextnxy;
                                                        if ((i = inroom(nx, ny)) >= 0 && rooms[i].rtype == VAULT)
                                                                goto nextnxy;
@@ -297,7 +301,7 @@
                                                         * good place to
                                                         * leave him alone
                                                         */
-                                                       EGD->gddone = 1;
+                                                       egd->gddone = 1;
                                                        if (ACCESSIBLE(typ))
                                                                goto newpos;
                                                        crm->typ = (typ == SCORR) ? CORR : DOOR;
@@ -307,8 +311,8 @@
                }
        nx = x;
        ny = y;
-       gx = EGD->gdx;
-       gy = EGD->gdy;
+       gx = egd->gdx;
+       gy = egd->gdy;
        dx = (gx > x) ? 1 : (gx < x) ? -1 : 0;
        dy = (gy > y) ? 1 : (gy < y) ? -1 : 0;
        if (abs(gx - x) >= abs(gy - y))
@@ -348,14 +352,14 @@
                mnewsym(nx, ny);
                prl(nx, ny);
        }
-       fcp = &(EGD->fakecorr[EGD->fcend]);
-       if (EGD->fcend++ == FCSIZ)
+       fcp = &(egd->fakecorr[egd->fcend]);
+       if (egd->fcend++ == FCSIZ)
                panic("fakecorr overflow");
        fcp->fx = nx;
        fcp->fy = ny;
        fcp->ftyp = typ;
 newpos:
-       if (EGD->gddone)
+       if (egd->gddone)
                nx = ny = 0;
        guard->mx = nx;
        guard->my = ny;



Home | Main Index | Thread Index | Old Index