shithub: puzzles

Download patch

ref: e33a57b703f11de067a400505e2425de3a0b5f9e
parent: 8ac92e860769b822300115064d090cff0645c7dd
author: Simon Tatham <anakin@pobox.com>
date: Sun Jul 17 13:10:11 EDT 2005

Quite a few instances of the Cardinal Error of Ctype were turned up
by a grep I just did. Oops.

[originally from svn r6113]

--- a/cube.c
+++ b/cube.c
@@ -285,7 +285,7 @@
       default: break;
     }
     ret->d1 = ret->d2 = atoi(string);
-    while (*string && isdigit(*string)) string++;
+    while (*string && isdigit((unsigned char)*string)) string++;
     if (*string == 'x') {
         string++;
         ret->d2 = atoi(string);
--- a/fifteen.c
+++ b/fifteen.c
@@ -76,7 +76,7 @@
 static void decode_params(game_params *ret, char const *string)
 {
     ret->w = ret->h = atoi(string);
-    while (*string && isdigit(*string)) string++;
+    while (*string && isdigit((unsigned char)*string)) string++;
     if (*string == 'x') {
         string++;
         ret->h = atoi(string);
--- a/flip.c
+++ b/flip.c
@@ -116,11 +116,11 @@
 static void decode_params(game_params *ret, char const *string)
 {
     ret->w = ret->h = atoi(string);
-    while (*string && isdigit(*string)) string++;
+    while (*string && isdigit((unsigned char)*string)) string++;
     if (*string == 'x') {
         string++;
         ret->h = atoi(string);
-        while (*string && isdigit(*string)) string++;
+        while (*string && isdigit((unsigned char)*string)) string++;
     }
     if (*string == 'r') {
         string++;
--- a/netslide.c
+++ b/netslide.c
@@ -213,16 +213,16 @@
     ret->movetarget = 0;
 
     ret->width = atoi(p);
-    while (*p && isdigit(*p)) p++;
+    while (*p && isdigit((unsigned char)*p)) p++;
     if (*p == 'x') {
         p++;
         ret->height = atoi(p);
-        while (*p && isdigit(*p)) p++;
+        while (*p && isdigit((unsigned char)*p)) p++;
         if ( (ret->wrapping = (*p == 'w')) != 0 )
             p++;
         if (*p == 'b') {
             ret->barrier_probability = atof(++p);
-            while (*p && (isdigit(*p) || *p == '.')) p++;
+            while (*p && (isdigit((unsigned char)*p) || *p == '.')) p++;
         }
         if (*p == 'm') {
             ret->movetarget = atoi(++p);
--- a/pattern.c
+++ b/pattern.c
@@ -106,11 +106,11 @@
     char const *p = string;
 
     ret->w = atoi(p);
-    while (*p && isdigit(*p)) p++;
+    while (*p && isdigit((unsigned char)*p)) p++;
     if (*p == 'x') {
         p++;
         ret->h = atoi(p);
-        while (*p && isdigit(*p)) p++;
+        while (*p && isdigit((unsigned char)*p)) p++;
     } else {
         ret->h = ret->w;
     }
--- a/samegame.c
+++ b/samegame.c
@@ -291,9 +291,9 @@
 	char *q = p;
 	int n;
 
-	if (!isdigit(*p))
+	if (!isdigit((unsigned char)*p))
 	    return "Not enough numbers in string";
-	while (isdigit(*p)) p++;
+	while (isdigit((unsigned char)*p)) p++;
 
 	if (i < area-1 && *p != ',')
 	    return "Expected comma after number";
--- a/sixteen.c
+++ b/sixteen.c
@@ -100,7 +100,7 @@
 {
     ret->w = ret->h = atoi(string);
     ret->movetarget = 0;
-    while (*string && isdigit(*string)) string++;
+    while (*string && isdigit((unsigned char)*string)) string++;
     if (*string == 'x') {
         string++;
         ret->h = atoi(string);
--- a/twiddle.c
+++ b/twiddle.c
@@ -108,16 +108,16 @@
     ret->n = 2;
     ret->rowsonly = ret->orientable = FALSE;
     ret->movetarget = 0;
-    while (*string && isdigit(*string)) string++;
+    while (*string && isdigit((unsigned char)*string)) string++;
     if (*string == 'x') {
         string++;
         ret->h = atoi(string);
-	while (*string && isdigit(*string)) string++;
+	while (*string && isdigit((unsigned char)*string)) string++;
     }
     if (*string == 'n') {
         string++;
         ret->n = atoi(string);
-	while (*string && isdigit(*string)) string++;
+	while (*string && isdigit((unsigned char)*string)) string++;
     }
     while (*string) {
 	if (*string == 'r') {
@@ -127,7 +127,7 @@
 	} else if (*string == 'm') {
             string++;
 	    ret->movetarget = atoi(string);
-            while (string[1] && isdigit(string[1])) string++;
+            while (string[1] && isdigit((unsigned char)string[1])) string++;
 	}
 	string++;
     }
--- a/windows.c
+++ b/windows.c
@@ -1690,7 +1690,7 @@
 	RegisterClass(&wndclass);
     }
 
-    while (*cmdline && isspace(*cmdline))
+    while (*cmdline && isspace((unsigned char)*cmdline))
 	cmdline++;
 
     if (!new_window(inst, *cmdline ? cmdline : NULL, &error)) {