From 89b04c5b54accb3849dadb4372a646fce98ebeef Mon Sep 17 00:00:00 2001
From: Alessandro Rubini <rubini@gnudd.com>
Date: Mon, 15 Dec 2014 16:52:53 +0100
Subject: [PATCH] userspace/tools: added wrs_checkcfg

Signed-off-by: Alessandro Rubini <rubini@gnudd.com>
---
 userspace/tools/.gitignore     |  1 +
 userspace/tools/Makefile       |  1 +
 userspace/tools/wrs_checkcfg.c | 58 ++++++++++++++++++++++++++++++++++
 3 files changed, 60 insertions(+)
 create mode 100644 userspace/tools/wrs_checkcfg.c

diff --git a/userspace/tools/.gitignore b/userspace/tools/.gitignore
index 8c81189e7..c599a3079 100644
--- a/userspace/tools/.gitignore
+++ b/userspace/tools/.gitignore
@@ -19,3 +19,4 @@ wrs_dump_shmem
 sdb-read
 nbtee
 wrs_auxclk
+wrs_checkcfg
diff --git a/userspace/tools/Makefile b/userspace/tools/Makefile
index 14e052074..702989458 100644
--- a/userspace/tools/Makefile
+++ b/userspace/tools/Makefile
@@ -5,6 +5,7 @@ TOOLS += wrs_vlans wrs_dump_shmem
 TOOLS += sdb-read
 TOOLS += nbtee
 TOOLS += wrs_auxclk
+TOOLS += wrs_checkcfg
 
 WR_INSTALL_ROOT ?= /usr/lib/white-rabbit
 
diff --git a/userspace/tools/wrs_checkcfg.c b/userspace/tools/wrs_checkcfg.c
new file mode 100644
index 000000000..26e1e1ad8
--- /dev/null
+++ b/userspace/tools/wrs_checkcfg.c
@@ -0,0 +1,58 @@
+/* Alessandro Rubini for CERN, 2014 */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <string.h>
+#include <errno.h>
+#include <libwr/config.h>
+
+int main(int argc, char **argv)
+{
+	int err, verbose = 0;
+
+me_lazy:
+	if (argc < 2 || !strcmp(argv[1], "-h") || !strcmp(argv[1], "--help")) {
+		fprintf(stderr, "%s: Use: \"%s [-v] <dotcfg> [<Kconfig>]\"\n",
+			argv[0], argv[0]);
+		exit(1);
+	}
+
+	if (!strcmp(argv[1], "-v")) {
+		verbose++;
+		argv++;
+		argc--;
+		goto me_lazy;
+	}
+
+	if (access(argv[1], R_OK) < 0) {
+		fprintf(stderr, "%s: %s: %s\n", argv[0], argv[1],
+			strerror(errno));
+		exit(1);
+	}
+	if (argc == 2) {
+		err = libwr_cfg_read_file(argv[1]);
+		if (err) {
+			fprintf(stderr, "%s: Error in %s:%i: %s\n", argv[0],
+				argv[1], -err, strerror(errno));
+			exit(1);
+		}
+		if (verbose)
+			libwr_cfg_dump(stdout);
+		exit(0);
+	}
+
+	if (access(argv[2], R_OK) < 0) {
+		fprintf(stderr, "%s: %s: %s\n", argv[0], argv[2],
+			strerror(errno));
+		exit(1);
+	}
+	err = libwr_cfg_read_verify_file(argv[1], argv[2]);
+	if (verbose)
+		libwr_cfg_dump(stdout);
+	if (err)
+		exit(1); /* messages already printed */
+	exit(0);
+
+	return 0;
+}
-- 
GitLab