Noticed recently that bitcount16() isn't 16-bit clean due to signed
authorsimon <simon@cda61777-01e9-0310-a592-d414129be87e>
Sat, 22 Oct 2005 16:38:15 +0000 (16:38 +0000)
committersimon <simon@cda61777-01e9-0310-a592-d414129be87e>
Sat, 22 Oct 2005 16:38:15 +0000 (16:38 +0000)
shift right. It doesn't actually matter in the current code since
the input word only ever uses the bottom 9 bits, but if I ever
extended Mines to work in a triangular grid then all 16 bits might
be required. Fix this now, while I'm cleaning things up, so that it
won't bite me unexpectedly in future.

git-svn-id: svn://svn.tartarus.org/sgt/puzzles@6415 cda61777-01e9-0310-a592-d414129be87e

mines.c

diff --git a/mines.c b/mines.c
index 4210b56..b9bb7c9 100644 (file)
--- a/mines.c
+++ b/mines.c
@@ -275,14 +275,16 @@ static char *validate_params(game_params *params, int full)
 /*
  * Count the bits in a word. Only needs to cope with 16 bits.
  */
-static int bitcount16(int word)
+static int bitcount16(int inword)
 {
+    unsigned int word = inword;
+
     word = ((word & 0xAAAA) >> 1) + (word & 0x5555);
     word = ((word & 0xCCCC) >> 2) + (word & 0x3333);
     word = ((word & 0xF0F0) >> 4) + (word & 0x0F0F);
     word = ((word & 0xFF00) >> 8) + (word & 0x00FF);
 
-    return word;
+    return (int)word;
 }
 
 /*