summaryrefslogtreecommitdiff
path: root/games/adventure
diff options
context:
space:
mode:
authordholland <dholland@NetBSD.org>2012-01-07 18:08:35 +0000
committerdholland <dholland@NetBSD.org>2012-01-07 18:08:35 +0000
commitdb363170c8d2fcea57dffbf76ed64c7771af0969 (patch)
tree6776bec6b0c84704d2619c0aa3d0f33cdc13d1f9 /games/adventure
parenta252b857860a85fce44ac134bd226f709b74f6a2 (diff)
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 (limited to 'games/adventure')
-rw-r--r--games/adventure/crc.c13
1 files changed, 4 insertions, 9 deletions
diff --git a/games/adventure/crc.c b/games/adventure/crc.c
index d429e91298d..8626f3486d5 100644
--- a/games/adventure/crc.c
+++ b/games/adventure/crc.c
@@ -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 @@ crc(const char *ptr, int nr)
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;