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.
This commit is contained in:
+5
-3
@@ -30,6 +30,8 @@
|
|||||||
* means the defined()s would be ok again...
|
* means the defined()s would be ok again...
|
||||||
* - change fprintf(stderr, "x(%d)y\n", z) to impossible("x(%d)y", z)
|
* - change fprintf(stderr, "x(%d)y\n", z) to impossible("x(%d)y", z)
|
||||||
* - remove useless variable `j' from srandom()
|
* - 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"
|
#include "hack.h"
|
||||||
@@ -250,7 +252,7 @@ initstate( seed, arg_state, n )
|
|||||||
register char *ostate = (char *)( &state[ -1 ] );
|
register char *ostate = (char *)( &state[ -1 ] );
|
||||||
|
|
||||||
if( rand_type == TYPE_0 ) state[ -1 ] = rand_type;
|
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_1 ) {
|
||||||
if( n < BREAK_0 ) {
|
if( n < BREAK_0 ) {
|
||||||
impossible(
|
impossible(
|
||||||
@@ -291,7 +293,7 @@ initstate( seed, arg_state, n )
|
|||||||
end_ptr = &state[ rand_deg ]; /* must set end_ptr before srandom */
|
end_ptr = &state[ rand_deg ]; /* must set end_ptr before srandom */
|
||||||
srandom( seed );
|
srandom( seed );
|
||||||
if( rand_type == TYPE_0 ) state[ -1 ] = rand_type;
|
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 );
|
return( ostate );
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -320,7 +322,7 @@ setstate( arg_state )
|
|||||||
char *ostate = (char *)( &state[ -1 ] );
|
char *ostate = (char *)( &state[ -1 ] );
|
||||||
|
|
||||||
if( rand_type == TYPE_0 ) state[ -1 ] = rand_type;
|
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 ) {
|
switch( type ) {
|
||||||
case TYPE_0:
|
case TYPE_0:
|
||||||
case TYPE_1:
|
case TYPE_1:
|
||||||
|
|||||||
Reference in New Issue
Block a user