From 9fc2b93d9ff7fdde1695e52aec877e98d5cc1e39 Mon Sep 17 00:00:00 2001
From: kwolekr <kwolekr@minetest.net>
Date: Mon, 23 Mar 2015 21:07:32 -0400
Subject: [PATCH] Fix endianness inconsistency with PcgRandom::bytes()

---
 src/noise.cpp | 35 ++++++++++-------------------------
 1 file changed, 10 insertions(+), 25 deletions(-)

diff --git a/src/noise.cpp b/src/noise.cpp
index c36b33db8..bb7c9969e 100644
--- a/src/noise.cpp
+++ b/src/noise.cpp
@@ -123,35 +123,20 @@ s32 PcgRandom::range(s32 min, s32 max)
 
 void PcgRandom::bytes(void *out, size_t len)
 {
-	u32 r;
 	u8 *outb = (u8 *)out;
+	int bytes_left = 0;
+	u32 r;
 
-	size_t len_alignment = (uintptr_t)out % sizeof(u32);
-	if (len_alignment) {
-		len -= len_alignment;
-		r = next();
-		while (len_alignment--) {
-			*outb = r & 0xFF;
-			outb++;
-			r >>= 8;
+	while (len--) {
+		if (bytes_left == 0) {
+			bytes_left = sizeof(u32);
+			r = next();
 		}
-	}
 
-	size_t len_dwords = len / sizeof(u32);
-	while (len_dwords--) {
-		r = next();
-		*(u32 *)outb = next();
-		outb += sizeof(u32);
-	}
-
-	size_t len_remaining = len % sizeof(u32);
-	if (len_remaining) {
-		r = next();
-		while (len_remaining--) {
-			*outb = r & 0xFF;
-			outb++;
-			r >>= 8;
-		}
+		*outb = r & 0xFF;
+		outb++;
+		bytes_left--;
+		r >>= 8;
 	}
 }
 
-- 
GitLab