[LTP] [PATCH 3/6] lib: Add new tst_device for shell

Cyril Hrubis chrubis@suse.cz
Wed Feb 8 12:02:52 CET 2017


The motivation is to have a single place where we handle device
creation/deletion.

Signed-off-by: Cyril Hrubis <chrubis@suse.cz>
---
 testcases/lib/.gitignore   |   1 +
 testcases/lib/Makefile     |   3 +-
 testcases/lib/tst_device.c | 106 +++++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 109 insertions(+), 1 deletion(-)
 create mode 100644 testcases/lib/tst_device.c

diff --git a/testcases/lib/.gitignore b/testcases/lib/.gitignore
index 77acb57..920817c 100644
--- a/testcases/lib/.gitignore
+++ b/testcases/lib/.gitignore
@@ -3,3 +3,4 @@ tst_random
 tst_checkpoint
 tst_rod
 tst_kvcmp
+tst_device
diff --git a/testcases/lib/Makefile b/testcases/lib/Makefile
index 0bb0bce..6282578 100644
--- a/testcases/lib/Makefile
+++ b/testcases/lib/Makefile
@@ -26,6 +26,7 @@ include $(top_srcdir)/include/mk/testcases.mk
 
 INSTALL_TARGETS		:= *.sh
 
-MAKE_TARGETS		:= tst_sleep tst_random tst_checkpoint tst_rod tst_kvcmp
+MAKE_TARGETS		:= tst_sleep tst_random tst_checkpoint tst_rod tst_kvcmp\
+			   tst_device
 
 include $(top_srcdir)/include/mk/generic_leaf_target.mk
diff --git a/testcases/lib/tst_device.c b/testcases/lib/tst_device.c
new file mode 100644
index 0000000..d33cac6
--- /dev/null
+++ b/testcases/lib/tst_device.c
@@ -0,0 +1,106 @@
+/*
+ * Copyright (c) 2017 Cyril Hrubis <chrubis@suse.cz>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it would be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write the Free Software Foundation,
+ * Inc.,  51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ */
+
+#include <errno.h>
+#include <limits.h>
+#include <stdio.h>
+#include <stdlib.h>
+#define TST_NO_DEFAULT_MAIN
+#include "tst_test.h"
+#include "old/old_device.h"
+
+extern struct tst_test *tst_test;
+
+static struct tst_test test = {
+	.tid = "tst_device"
+};
+
+static void print_help(void)
+{
+	printf("\nUsage: tst_device acquire [size]\n");
+	printf("   or: tst_device release /path/to/device\n\n");
+}
+
+static int acquire_device(int argc, char *argv[])
+{
+	unsigned int size = 0;
+	const char *device;
+
+	if (argc > 3)
+		return 1;
+
+	if (argc == 3) {
+		size = atoi(argv[2]);
+
+		if (!size) {
+			fprintf(stderr, "ERROR: Invalid device size '%s'",
+				argv[2]);
+			return 1;
+		}
+	}
+
+	device = tst_acquire_device__(size);
+
+	if (!device)
+		return 1;
+
+	printf("%s", device);
+
+	return 0;
+}
+
+static int release_device(int argc, char *argv[])
+{
+	if (argc != 3)
+		return 1;
+
+	return tst_release_device(argv[2]);
+}
+
+int main(int argc, char *argv[])
+{
+	/*
+	 * Force messages to be printed from the new library i.e. tst_test.c
+	 *
+	 * The new library prints messages into stderr while the old one prints
+	 * them into stdout. When messages are printed into stderr we can
+	 * safely do:
+	 *
+	 * DEV=$(tst_device acquire)
+	 */
+	tst_test = &test;
+
+	if (argc < 2)
+		goto help;
+
+	if (!strcmp(argv[1], "acquire")) {
+		if (acquire_device(argc, argv))
+			goto help;
+	} else if (!strcmp(argv[1], "release")) {
+		if (release_device(argc, argv))
+			goto help;
+	} else {
+		fprintf(stderr, "ERROR: Invalid COMMAND '%s'\n", argv[1]);
+		goto help;
+	}
+
+	return 0;
+help:
+	print_help();
+	return 1;
+}
-- 
2.10.2



More information about the ltp mailing list