From: Yann Dirson Date: Wed, 28 Sep 2011 21:25:24 +0000 (+0200) Subject: Fix ScorePosition() for MiniShogi. X-Git-Url: http://winboard.nl/cgi-bin?p=gnushogi.git;a=commitdiff_plain;h=8614cbca5eed4d6b23e5c4ad32ab6210ff8c69bd Fix ScorePosition() for MiniShogi. Gcc's stack-smashing protection combined with glibc's -D_FORTIFY_SOURCE detected with a segfault that we were using 9x9-board offsets on our 5x5 board. This patch abstracts the relevant hardcoded constants and provides correct values for MiniShogi. --- diff --git a/gnushogi/eval.c b/gnushogi/eval.c index 272db91..987b304 100644 --- a/gnushogi/eval.c +++ b/gnushogi/eval.c @@ -2241,6 +2241,21 @@ ScorePosition(short side) ScoreCaptures(); } +#ifndef MINISHOGI +# define BLACKHOME_START 0 +# define BLACKHOME_END 26 +# define MIDDLEROW_START 36 +# define MIDDLEROW_END 44 +# define WHITEHOME_START 54 +# define WHITEHOME_END 80 +#else +# define BLACKHOME_START 0 +# define BLACKHOME_END 4 +# define MIDDLEROW_START 10 +# define MIDDLEROW_END 14 +# define WHITEHOME_START 19 +# define WHITEHOME_END 24 +#endif for (c1 = black, c2 = white; c1 <= white; c1++, c2--) { short n; @@ -2248,7 +2263,7 @@ ScorePosition(short side) fv1 = fvalue[c1]; /* Score fifth rank */ - for (sq = 36, n = 0; sq <= 44; sq++) + for (sq = MIDDLEROW_START, n = 0; sq <= MIDDLEROW_END; sq++) { if ((color[sq] == c1) || (attack[c1][sq] != 0)) n++; @@ -2260,8 +2275,8 @@ ScorePosition(short side) } /* Score holes */ - for (sq = ((c1 == black) ? 0 : 54), n = 0; - sq <= ((c1 == black) ? 26 : 80); + for (sq = ((c1 == black) ? BLACKHOME_START : WHITEHOME_START), n = 0; + sq <= ((c1 == black) ? BLACKHOME_END : WHITEHOME_END); sq++) { if (board[sq] == no_piece && attack[c1][sq] == 0)