Source-Changes-HG archive

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

[src/trunk]: src/games/adventure Make this not crash on machines that are (a)...



details:   https://anonhg.NetBSD.org/src/rev/ef8bda6402be
branches:  trunk
changeset: 772534:ef8bda6402be
user:      dholland <dholland%NetBSD.org@localhost>
date:      Sat Jan 07 18:08:35 2012 +0000

description:
Make this not crash on machines that are (a) 64 bit, or (b) have signed
chars by default (i.e., almost all machines). Makes it possible to save
the game. This has been broken since 4.4 and probably ever since the
FORTRAN -> C translation.

Crash reported by Petri Laakso in private mail.

diffstat:

 games/adventure/crc.c |  13 ++++---------
 1 files changed, 4 insertions(+), 9 deletions(-)

diffs (34 lines):

diff -r 01bed026911a -r ef8bda6402be games/adventure/crc.c
--- a/games/adventure/crc.c     Sat Jan 07 18:07:57 2012 +0000
+++ b/games/adventure/crc.c     Sat Jan 07 18:08:35 2012 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: crc.c,v 1.11 2009/08/25 06:04:17 dholland Exp $        */
+/*     $NetBSD: crc.c,v 1.12 2012/01/07 18:08:35 dholland Exp $        */
 
 /*-
  * Copyright (c) 1993
@@ -38,7 +38,7 @@
 static char sccsid[] = "@(#)crc.c      8.1 (Berkeley) 5/31/93";
 static char ORIGINAL_sccsid[] = "@(#)crc.c     5.2 (Berkeley) 4/4/91";
 #else
-__RCSID("$NetBSD: crc.c,v 1.11 2009/08/25 06:04:17 dholland Exp $");
+__RCSID("$NetBSD: crc.c,v 1.12 2012/01/07 18:08:35 dholland Exp $");
 #endif
 #endif /* not lint */
 
@@ -124,13 +124,8 @@
 
        while (nr > 0)
                for (p = ptr; nr--; ++p) {
-                       /*
-                        * The following is not portable to machines
-                        * where char is unsigned, because of sign
-                        * extension. But it can't be changed without
-                        * breaking save files. Sigh.
-                        */
-                       if (!(i = crcval >> 24 ^ *p)) {
+                       i = (crcval >> 24 ^ (unsigned char)*p) & 0xff;
+                       if (i == 0) {
                                i = step++;
                                if (step >= sizeof(crctab) / sizeof(crctab[0]))
                                        step = 0;



Home | Main Index | Thread Index | Old Index