From 9c3f6f78b9379084efa4bffad57f9cbc6214680a Mon Sep 17 00:00:00 2001 From: "nethack.rankin" Date: Sun, 23 Dec 2007 00:59:25 +0000 Subject: [PATCH] win32 vs random.c From a bug report. Pointer subtraction yields a result of type ptrdiff_t which can be bigger than type long, potentially resulting in warnings about value truncation--in these cases, when assigning to a long. --- sys/share/random.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/sys/share/random.c b/sys/share/random.c index 02b50c5d4..6905f48aa 100644 --- a/sys/share/random.c +++ b/sys/share/random.c @@ -30,6 +30,8 @@ * means the defined()s would be ok again... * - change fprintf(stderr, "x(%d)y\n", z) to impossible("x(%d)y", z) * - remove useless variable `j' from srandom() + * - cast result of pointer subtraction to long since ptrdiff_t could + * be bigger than that and trigger warnings when assigning to long */ #include "hack.h" @@ -250,7 +252,7 @@ initstate( seed, arg_state, n ) register char *ostate = (char *)( &state[ -1 ] ); if( rand_type == TYPE_0 ) state[ -1 ] = rand_type; - else state[ -1 ] = MAX_TYPES*(rptr - state) + rand_type; + else state[ -1 ] = (long)(MAX_TYPES*(rptr - state) + rand_type); if( n < BREAK_1 ) { if( n < BREAK_0 ) { impossible( @@ -291,7 +293,7 @@ initstate( seed, arg_state, n ) end_ptr = &state[ rand_deg ]; /* must set end_ptr before srandom */ srandom( seed ); if( rand_type == TYPE_0 ) state[ -1 ] = rand_type; - else state[ -1 ] = MAX_TYPES*(rptr - state) + rand_type; + else state[ -1 ] = (long)(MAX_TYPES*(rptr - state) + rand_type); return( ostate ); } @@ -320,7 +322,7 @@ setstate( arg_state ) char *ostate = (char *)( &state[ -1 ] ); if( rand_type == TYPE_0 ) state[ -1 ] = rand_type; - else state[ -1 ] = MAX_TYPES*(rptr - state) + rand_type; + else state[ -1 ] = (long)(MAX_TYPES*(rptr - state) + rand_type); switch( type ) { case TYPE_0: case TYPE_1: -- 2.40.0