Project import
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..cb87df8
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,100 @@
+#
+#    Copyright (c) 2010-2014 Nest, Inc.
+#    All rights reserved.
+#
+#    This document is the property of Nest. It is considered
+#    confidential and proprietary information.
+#
+#    This document may not be reproduced or transmitted in any form,
+#    in whole or in part, without the express written permission of
+#    Nest.
+#
+#    Description:
+#      This file is the makefile for the MTD oops log collection utility.
+#
+
+
+include pre.mak
+
+PackageName			:= sp-oops-extract
+
+PackageExtension	:= tar.gz
+PackageSeparator	:= -
+
+PackagePatchArgs	:= -p1
+
+PackageArchive		:= $(PackageName).$(PackageExtension)
+PackageSourceDir	:= $(PackageName)$(PackageSeparator)$(PackageVersion)
+
+PackageBuildMakefile	= $(call GenerateBuildPaths,Makefile)
+
+CleanPaths		+= $(PackageLicenseFile)
+
+SOURCEDIRS                      = $(PackageSourceDir)
+$(PackageSourceDir)_RULE_TARGET = $(BuildDirectory)/configure
+
+all: $(PackageDefaultGoal)
+
+# Generate the package license contents.
+
+$(PackageSourceDir)/COPYING: $(BuildDirectory)/source
+
+$(PackageLicenseFile): $(PackageSourceDir)/COPYING
+	$(copy-result)
+
+# Extract the source from the archive and apply patches, if any.
+
+$(PackageSourceDir): $(PackageArchive) $(PackagePatchPaths)
+	$(expand-and-patch-package)
+
+# Prepare the sources.
+
+$(BuildDirectory)/source: | $(PackageSourceDir) $(BuildDirectory)
+	$(Verbose)touch $@
+
+# Patch the sources, if necessary.
+
+$(BuildDirectory)/patch: $(BuildDirectory)/source
+	$(Verbose)touch $@
+
+# Generate the package build makefile.
+
+$(PackageBuildMakefile): | $(PackageSourceDir) $(BuildDirectory)
+	$(call create-links,$(CURDIR)/$(PackageSourceDir),$(BuildDirectory))
+
+# Configure the source for building.
+
+$(BuildDirectory)/configure: $(BuildDirectory)/source $(PackageBuildMakefile)
+	$(Verbose)touch $@
+
+# Build the source.
+#
+# We have to unset MAKEFLAGS since they confuse the package build otherwise.
+
+$(BuildDirectory)/build: $(BuildDirectory)/configure | $(BuildDirectory)
+	$(Verbose)unset MAKEFLAGS && \
+	$(MAKE) $(JOBSFLAG) -C $(BuildDirectory) \
+	CC="$(CC) $(CPPOPTFLAGS) $(call ToolGenerateIncludeArgument,$(LinuxIncludePath))" \
+	all
+	$(Verbose)touch $@
+
+# Stage the build to a temporary installation area.
+#
+# We have to unset MAKEFLAGS since they confuse the package build otherwise.
+
+$(BuildDirectory)/stage: $(BuildDirectory)/build | $(ResultDirectory)
+	$(Verbose)unset MAKEFLAGS && \
+	$(MAKE) $(JOBSFLAG) -C $(BuildDirectory) \
+	DESTDIR=$(ResultDirectory) \
+	install
+	$(Verbose)touch $@
+
+.PHONY: stage
+stage: $(BuildDirectory)/stage
+
+clean:
+	$(Verbose)$(RM) $(RMFLAGS) -r $(PackageSourceDir)
+	$(Verbose)$(RM) $(RMFLAGS) -r $(BuildDirectory)
+	$(Verbose)$(RM) $(RMFLAGS) -r $(ResultDirectory)
+
+include post.mak
diff --git a/sp-oops-extract.patches/sp-oops-extract-50.description b/sp-oops-extract.patches/sp-oops-extract-50.description
new file mode 100644
index 0000000..7aa6f5d
--- /dev/null
+++ b/sp-oops-extract.patches/sp-oops-extract-50.description
@@ -0,0 +1,2 @@
+This patch creates the necessary output directory to install the compiled
+output.
diff --git a/sp-oops-extract.patches/sp-oops-extract-50.patch b/sp-oops-extract.patches/sp-oops-extract-50.patch
new file mode 100644
index 0000000..b72df34
--- /dev/null
+++ b/sp-oops-extract.patches/sp-oops-extract-50.patch
@@ -0,0 +1,9 @@
+diff --aruN a/Makefile b/Makefile
+--- a/Makefile
++++ b/Makefile
+@@ -12,4 +12,5 @@ distclean: clean
+	for i in $(SUBDIRS); do $(MAKE) -C $$i distclean; done
+
+ install:
++	mkdir -p $(BIN)
+	install src/sp-oops-extract $(BIN)
diff --git a/sp-oops-extract.patches/sp-oops-extract-51.description b/sp-oops-extract.patches/sp-oops-extract-51.description
new file mode 100644
index 0000000..154e5d5
--- /dev/null
+++ b/sp-oops-extract.patches/sp-oops-extract-51.description
@@ -0,0 +1 @@
+Use $(CC) to pick up the correct cross compiler for compilation.
diff --git a/sp-oops-extract.patches/sp-oops-extract-51.patch b/sp-oops-extract.patches/sp-oops-extract-51.patch
new file mode 100644
index 0000000..d8e301f
--- /dev/null
+++ b/sp-oops-extract.patches/sp-oops-extract-51.patch
@@ -0,0 +1,9 @@
+diff --aruN a/src/Makefile b/src/Makefile
+--- a/src/Makefile
++++ b/src/Makefile
+@@ -9,4 +9,4 @@
+	$(RM) $(TARGETS)
+
+ sp-oops-extract: oopslog.c
+-	gcc -Wall -s -o $@ $^
++	$(CC) -Wall -s -o $@ $^
diff --git a/sp-oops-extract.patches/sp-oops-extract-52.description b/sp-oops-extract.patches/sp-oops-extract-52.description
new file mode 100644
index 0000000..f1787fe
--- /dev/null
+++ b/sp-oops-extract.patches/sp-oops-extract-52.description
@@ -0,0 +1 @@
+Set the mtdoops record_size (a.k.a. "page size" from kernel module parameter or environment variable)
diff --git a/sp-oops-extract.patches/sp-oops-extract-52.patch b/sp-oops-extract.patches/sp-oops-extract-52.patch
new file mode 100644
index 0000000..689013d
--- /dev/null
+++ b/sp-oops-extract.patches/sp-oops-extract-52.patch
@@ -0,0 +1,107 @@
+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");

diff --git a/sp-oops-extract.tar.gz b/sp-oops-extract.tar.gz
new file mode 100644
index 0000000..aa655c1
--- /dev/null
+++ b/sp-oops-extract.tar.gz
Binary files differ
diff --git a/sp-oops-extract.url b/sp-oops-extract.url
new file mode 100644
index 0000000..19cee8f
--- /dev/null
+++ b/sp-oops-extract.url
@@ -0,0 +1 @@
+http://repository.maemo.org/pool/maemo5.0/free/s/sp-oops-extract/sp-oops-extract_0.0.7-1.tar.gz
diff --git a/sp-oops-extract.version b/sp-oops-extract.version
new file mode 100644
index 0000000..5a5831a
--- /dev/null
+++ b/sp-oops-extract.version
@@ -0,0 +1 @@
+0.0.7