From 2759b7c8dda77641fe271102a26ad7a02419ad62 Mon Sep 17 00:00:00 2001
From: Rosen Penev <rosenp@gmail.com>
Date: Sun, 16 Sep 2018 11:07:14 -0700
Subject: [PATCH] Add Musl support

The *48_r functions are glibc extensions that also happen to be supported
by uclibc as well. Adapted from the Android solution.

__USE_FILE_OFFSET64 is glibc specific so use LARGEFILE_SOURCE.

Signed-off-by: Rosen Penev <rosenp@gmail.com>
---
 os/os-linux.h         | 17 +++++++++++++++++
 oslib/libmtd_common.h |  2 +-
 2 files changed, 18 insertions(+), 1 deletion(-)

diff --git a/os/os-linux.h b/os/os-linux.h
index 6b63d123..e06aadae 100644
--- a/os/os-linux.h
+++ b/os/os-linux.h
@@ -60,7 +60,11 @@
 
 typedef cpu_set_t os_cpu_mask_t;
 
+#if defined(__GLIBC__) || defined(__UCLIBC__)
 typedef struct drand48_data os_random_state_t;
+#else
+typedef struct { unsigned short r[3]; } os_random_state_t;
+#endif
 
 #ifdef CONFIG_3ARG_AFFINITY
 #define fio_setaffinity(pid, cpumask)		\
@@ -172,14 +176,27 @@ static inline unsigned long long os_phys_mem(void)
 
 static inline void os_random_seed(unsigned long seed, os_random_state_t *rs)
 {
+#if defined(__GLIBC__) || defined (__UCLIBC__)
 	srand48_r(seed, rs);
+#else
+	rs->r[0] = seed & 0xffff;
+	seed >>= 16;
+	rs->r[1] = seed & 0xffff;
+	seed >>= 16;
+	rs->r[2] = seed & 0xffff;
+	seed48(rs->r);
+#endif
 }
 
 static inline long os_random_long(os_random_state_t *rs)
 {
 	long val;
 
+#if defined(__GLIBC__) || (__UCLIBC__)
 	lrand48_r(rs, &val);
+#else
+	val = nrand48(rs->r);
+#endif
 	return val;
 }
 
diff --git a/oslib/libmtd_common.h b/oslib/libmtd_common.h
index 4ed9f0ba..c5cfd217 100644
--- a/oslib/libmtd_common.h
+++ b/oslib/libmtd_common.h
@@ -69,7 +69,7 @@ extern "C" {
 #endif
 
 /* define a print format specifier for off_t */
-#ifdef __USE_FILE_OFFSET64
+#ifdef _LARGEFILE_SOURCE
 #define PRIxoff_t PRIx64
 #define PRIdoff_t PRId64
 #else
-- 
2.19.1