Move init code to libfio

More merge from gfio.

Signed-off-by: Jens Axboe <axboe@kernel.dk>
diff --git a/fio.c b/fio.c
index 60261ff..72c7c87 100644
--- a/fio.c
+++ b/fio.c
@@ -28,75 +28,10 @@
 #include "fio.h"
 #include "smalloc.h"
 
-uintptr_t page_mask = 0;
-uintptr_t page_size = 0;
-
-static int endian_check(void)
-{
-	union {
-		uint8_t c[8];
-		uint64_t v;
-	} u;
-	int le = 0, be = 0;
-
-	u.v = 0x12;
-	if (u.c[7] == 0x12)
-		be = 1;
-	else if (u.c[0] == 0x12)
-		le = 1;
-
-#if defined(CONFIG_LITTLE_ENDIAN)
-	if (be)
-		return 1;
-#elif defined(CONFIG_BIG_ENDIAN)
-	if (le)
-		return 1;
-#else
-	return 1;
-#endif
-
-	if (!le && !be)
-		return 1;
-
-	return 0;
-}
-
 int main(int argc, char *argv[], char *envp[])
 {
-	long ps;
-
-	if (endian_check()) {
-		log_err("fio: endianness settings appear wrong.\n");
-		log_err("fio: please report this to fio@vger.kernel.org\n");
+	if (initialize_fio(envp))
 		return 1;
-	}
-
-#if !defined(CONFIG_GETTIMEOFDAY) && !defined(CONFIG_CLOCK_GETTIME)
-#error "No available clock source!"
-#endif
-
-	arch_init(envp);
-
-	sinit();
-
-	/*
-	 * We need locale for number printing, if it isn't set then just
-	 * go with the US format.
-	 */
-	if (!getenv("LC_NUMERIC"))
-		setlocale(LC_NUMERIC, "en_US");
-
-	ps = sysconf(_SC_PAGESIZE);
-	if (ps < 0) {
-		log_err("Failed to get page size\n");
-		return 1;
-	}
-
-	page_size = ps;
-	page_mask = ps - 1;
-
-	fio_keywords_init();
-
 	if (parse_options(argc, argv))
 		return 1;
 
diff --git a/fio.h b/fio.h
index 2c8d904..04a9a9a 100644
--- a/fio.h
+++ b/fio.h
@@ -445,6 +445,10 @@
 extern char *num2str(unsigned long, int, int, int, int);
 extern int ioengine_load(struct thread_data *);
 
+extern uintptr_t page_mask;
+extern uintptr_t page_size;
+extern int initialize_fio(char *envp[]);
+
 #define FIO_GETOPT_JOB		0x89000000
 #define FIO_GETOPT_IOENGINE	0x98000000
 #define FIO_NR_OPTIONS		(FIO_MAX_OPTS + 128)
diff --git a/libfio.c b/libfio.c
index 433fee4..f7f1326 100644
--- a/libfio.c
+++ b/libfio.c
@@ -25,7 +25,12 @@
 #include <string.h>
 #include <sys/types.h>
 #include <signal.h>
+#include <stdint.h>
+#include <locale.h>
+
 #include "fio.h"
+#include "smalloc.h"
+#include "os/os.h"
 
 /*
  * Just expose an empty list, if the OS does not support disk util stats
@@ -36,6 +41,9 @@
 
 unsigned long arch_flags = 0;
 
+uintptr_t page_mask = 0;
+uintptr_t page_size = 0;
+
 static const char *fio_os_strings[os_nr] = {
 	"Invalid",
 	"Linux",
@@ -195,4 +203,70 @@
 	}
 }
 
+static int endian_check(void)
+{
+	union {
+		uint8_t c[8];
+		uint64_t v;
+	} u;
+	int le = 0, be = 0;
 
+	u.v = 0x12;
+	if (u.c[7] == 0x12)
+		be = 1;
+	else if (u.c[0] == 0x12)
+		le = 1;
+
+#if defined(CONFIG_LITTLE_ENDIAN)
+	if (be)
+		return 1;
+#elif defined(CONFIG_BIG_ENDIAN)
+	if (le)
+		return 1;
+#else
+	return 1;
+#endif
+
+	if (!le && !be)
+		return 1;
+
+	return 0;
+}
+
+int initialize_fio(char *envp[])
+{
+	long ps;
+
+	if (endian_check()) {
+		log_err("fio: endianness settings appear wrong.\n");
+		log_err("fio: please report this to fio@vger.kernel.org\n");
+		return 1;
+	}
+
+#if !defined(CONFIG_GETTIMEOFDAY) && !defined(CONFIG_CLOCK_GETTIME)
+#error "No available clock source!"
+#endif
+
+	arch_init(envp);
+
+	sinit();
+
+	/*
+	 * We need locale for number printing, if it isn't set then just
+	 * go with the US format.
+	 */
+	if (!getenv("LC_NUMERIC"))
+		setlocale(LC_NUMERIC, "en_US");
+
+	ps = sysconf(_SC_PAGESIZE);
+	if (ps < 0) {
+		log_err("Failed to get page size\n");
+		return 1;
+	}
+
+	page_size = ps;
+	page_mask = ps - 1;
+
+	fio_keywords_init();
+	return 0;
+}