forked from Mirrorlandia_minetest/minetest
Fix endianness inconsistency with PcgRandom::bytes()
This commit is contained in:
parent
a423202756
commit
9fc2b93d9f
@ -123,35 +123,20 @@ s32 PcgRandom::range(s32 min, s32 max)
|
|||||||
|
|
||||||
void PcgRandom::bytes(void *out, size_t len)
|
void PcgRandom::bytes(void *out, size_t len)
|
||||||
{
|
{
|
||||||
u32 r;
|
|
||||||
u8 *outb = (u8 *)out;
|
u8 *outb = (u8 *)out;
|
||||||
|
int bytes_left = 0;
|
||||||
|
u32 r;
|
||||||
|
|
||||||
size_t len_alignment = (uintptr_t)out % sizeof(u32);
|
while (len--) {
|
||||||
if (len_alignment) {
|
if (bytes_left == 0) {
|
||||||
len -= len_alignment;
|
bytes_left = sizeof(u32);
|
||||||
r = next();
|
r = next();
|
||||||
while (len_alignment--) {
|
|
||||||
*outb = r & 0xFF;
|
|
||||||
outb++;
|
|
||||||
r >>= 8;
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
size_t len_dwords = len / sizeof(u32);
|
*outb = r & 0xFF;
|
||||||
while (len_dwords--) {
|
outb++;
|
||||||
r = next();
|
bytes_left--;
|
||||||
*(u32 *)outb = next();
|
r >>= 8;
|
||||||
outb += sizeof(u32);
|
|
||||||
}
|
|
||||||
|
|
||||||
size_t len_remaining = len % sizeof(u32);
|
|
||||||
if (len_remaining) {
|
|
||||||
r = next();
|
|
||||||
while (len_remaining--) {
|
|
||||||
*outb = r & 0xFF;
|
|
||||||
outb++;
|
|
||||||
r >>= 8;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user