diff '--exclude=*~' -Nurp sp-oops-extract-0.0.7.orig/src/oopslog.c sp-oops-extract-0.0.7/src/oopslog.c
Index: sp-oops-extract-0.0.7/src/oopslog.c
===================================================================
--- sp-oops-extract-0.0.7.orig/src/oopslog.c	2017-04-05 16:31:18.973231119 -0700
+++ sp-oops-extract-0.0.7/src/oopslog.c	2017-04-05 16:31:18.965231155 -0700
@@ -37,11 +37,18 @@
 #include <linux/fs.h>
 #include <err.h>
 #include <stdint.h>
+#include <stdlib.h>
+#include <limits.h>
 
-#define OOPS_PAGE_SIZE 4096
+#define DEFAULT_OOPS_PAGE_SIZE 4096
+#define OOPS_PAGE_SIZE_ENV "OOPS_PAGE_SIZE"
+#define OOPS_RECORD_SIZE_PATH "/sys/module/mtdoops/parameters/record_size"
+#define INVALID_OOPS_PAGE_SIZE ULONG_MAX
 
 #define MEMGETINFO                _IOR('M', 1, struct mtd_info_user)
 
+unsigned long OOPS_PAGE_SIZE = DEFAULT_OOPS_PAGE_SIZE;
+
 struct mtd_info_user {
 	uint8_t type;
 	uint32_t flags;
@@ -55,6 +62,72 @@
 	uint32_t eccsize;
 };
 
+static unsigned long init_oops_page_size_from_env(void)
+{
+	char *from_env = getenv(OOPS_PAGE_SIZE_ENV);
+	char *endptr = NULL;
+	unsigned long val = INVALID_OOPS_PAGE_SIZE;
+
+	if (!from_env) {
+		return val;
+	}
+
+	errno = 0;
+	val = strtoul(from_env, &endptr, 0);
+	if (from_env == endptr) {
+		// invalid value. Ignore it.
+		val = INVALID_OOPS_PAGE_SIZE;
+	} else if (val == ULONG_MAX && errno == ERANGE) {
+		// invalid value. Ignore it.
+		val = INVALID_OOPS_PAGE_SIZE;
+	} else {
+		// good read, using value.
+	}
+
+	return val;
+}
+
+static unsigned long init_oops_page_size_from_module(void)
+{
+	FILE *fp = fopen(OOPS_RECORD_SIZE_PATH, "r");
+	unsigned long val = INVALID_OOPS_PAGE_SIZE;
+	int items;
+
+	if (!fp) {
+		return INVALID_OOPS_PAGE_SIZE;
+	}
+
+	items = fscanf(fp, "%lu", &val);
+	fclose(fp);
+	if (items != 1) {
+		val = INVALID_OOPS_PAGE_SIZE;
+	}
+
+	return val;
+}
+
+// Set OOPS_PAGE_SIZE value from either environment (OOPS_PAGE_SIZE)
+// or from the kernel module parameter.
+static void init_oops_page_size(void)
+{
+	unsigned long val;
+
+	val = init_oops_page_size_from_env();
+
+	if (val == INVALID_OOPS_PAGE_SIZE) {
+		val = init_oops_page_size_from_module();
+	}
+
+	if (val != INVALID_OOPS_PAGE_SIZE) {
+		OOPS_PAGE_SIZE = val;
+	}
+
+	fprintf(stderr, "Using OOPS_PAGE_SIZE=%lu\n", val);
+	if ((OOPS_PAGE_SIZE % 4096) != 0) {
+		fprintf(stderr, "Warning: OOPS_PAGE_SIZE is supposed to be a multiple of 4096\n");
+	}
+}
+
 static int try_to_check_for_bad_blocks(void) {
 	/* FIXME
 	 * Checking for bad blocks should be implemented here.
@@ -83,6 +156,8 @@
 
 	device = argv[1];
 
+	init_oops_page_size();
+
 	buf = malloc(OOPS_PAGE_SIZE);
 	if (!buf) {
 		err(-1, "Unable to allocate memory");
