Branch: Tag:

2016-03-24

2016-03-24 15:28:05 by Henrik Grubbström (Grubba) <grubba@grubba.org>

Builtin.RandomInterface: Byte-order independence.

Random.Deterministic()->random() should now return the same sequence
of numbers on big-endian architectures as on little-endian.

Fixes multiple testsuite failures on big-endian architectures.

2099:    if( TYPEOF(Pike_sp[-1]) != T_STRING ||    Pike_sp[-1].u.string->len != 8 )    Pike_error("Illegal return value from random_string.\n"); + #if PIKE_BYTEORDER == 1234 +  /* Little endian. */    THIS->int_buffer = ((INT64 *)Pike_sp[-1].u.string->str)[0]; -  + #else +  /* Big endian. */ +  for (int i = 0; i < 8; i++) { +  ((p_wchar0 *)&THIS->int_buffer)[i] = STR0(Pike_sp[-1].u.string)[7-i]; +  } + #endif    THIS->buffer_bits = 64;    pop_stack();    }