[LTP] [COMMITTED] [PATCH 16/23] syscalls/ipc/msgctl*: Cleanups

Cyril Hrubis chrubis@suse.cz
Tue Feb 28 12:11:38 CET 2017


* Get rid of useless comments

* Get rid of UCLINUX ifdefs

* Unify options, make use of tst_parse_opts()

Signed-off-by: Cyril Hrubis <chrubis@suse.cz>
---
 testcases/kernel/syscalls/ipc/msgctl/msgctl06.c |  49 ++------
 testcases/kernel/syscalls/ipc/msgctl/msgctl07.c |  22 +---
 testcases/kernel/syscalls/ipc/msgctl/msgctl08.c | 113 +++++-------------
 testcases/kernel/syscalls/ipc/msgctl/msgctl09.c | 152 +++++++-----------------
 testcases/kernel/syscalls/ipc/msgctl/msgctl10.c | 115 ++++++------------
 testcases/kernel/syscalls/ipc/msgctl/msgctl11.c | 145 +++++++---------------
 6 files changed, 164 insertions(+), 432 deletions(-)

diff --git a/testcases/kernel/syscalls/ipc/msgctl/msgctl06.c b/testcases/kernel/syscalls/ipc/msgctl/msgctl06.c
index 2710980..297b593 100644
--- a/testcases/kernel/syscalls/ipc/msgctl/msgctl06.c
+++ b/testcases/kernel/syscalls/ipc/msgctl/msgctl06.c
@@ -35,10 +35,10 @@
  *
  */
 
-#include <sys/types.h>		/* needed for test              */
-#include <sys/ipc.h>		/* needed for test              */
-#include <sys/msg.h>		/* needed for test              */
-#include <stdio.h>		/* needed by testhead.h         */
+#include <sys/types.h>
+#include <sys/ipc.h>
+#include <sys/msg.h>
+#include <stdio.h>
 #include "test.h"
 #include "ipcmsg.h"
 
@@ -61,11 +61,12 @@ extern int local_flag;
 int msqid, status;
 struct msqid_ds buf;
 
-/*--------------------------------------------------------------*/
-
-int main(void)
+int main(int argc, char *argv[])
 {
 	key_t key;
+
+	tst_parse_opts(argc, argv, NULL, NULL);
+
 	setup();
 
 	key = getipckey();
@@ -110,55 +111,26 @@ int main(void)
 	}
 
 	tst_resm(TPASS, "msgctl06 ran successfully!");
-    /***************************************************************
-     * cleanup and exit
-     ***************************************************************/
-	cleanup();
 
+	cleanup();
 	tst_exit();
 }
 
-/***************************************************************
- *  * setup() - performs all ONE TIME setup for this test.
- *   ****************************************************************/
 void setup(void)
 {
 	tst_require_root();
 
-	/* You will want to enable some signal handling so you can capture
-	 * unexpected signals like SIGSEGV.
-	 */
 	tst_sig(NOFORK, DEF_HANDLER, cleanup);
 
-	/* One cavet that hasn't been fixed yet.  TEST_PAUSE contains the code to
-	 * fork the test with the -c option.  You want to make sure you do this
-	 * before you create your temporary directory.
-	 */
 	TEST_PAUSE;
 
-	/*
-	 * Create a temporary directory and cd into it.
-	 * This helps to ensure that a unique msgkey is created.
-	 * See ../lib/libipc.c for more information.
-	 */
 	tst_tmpdir();
 }
 
-/***************************************************************
- *  *  * cleanup() - performs all ONE TIME cleanup for this test at
- *   *   *              completion or premature exit.
- *    *    ***************************************************************/
 void cleanup(void)
 {
 	int status;
 
-	/*
-	 * Remove the message queue from the system
-	 */
-#ifdef DEBUG
-	tst_resm(TINFO, "Remove the message queue");
-#endif
-	fflush(stdout);
 	(void)msgctl(msqid, IPC_RMID, NULL);
 	if ((status = msgctl(msqid, IPC_STAT, &buf)) != -1) {
 		(void)msgctl(msqid, IPC_RMID, NULL);
@@ -166,8 +138,5 @@ void cleanup(void)
 
 	}
 
-	fflush(stdout);
-
 	tst_rmdir();
-
 }
diff --git a/testcases/kernel/syscalls/ipc/msgctl/msgctl07.c b/testcases/kernel/syscalls/ipc/msgctl/msgctl07.c
index 9be3cd4..b978692 100644
--- a/testcases/kernel/syscalls/ipc/msgctl/msgctl07.c
+++ b/testcases/kernel/syscalls/ipc/msgctl/msgctl07.c
@@ -68,22 +68,15 @@ struct my_msgbuf {
 	char text[BYTES];
 } p1_msgp, p2_msgp, p3_msgp, c1_msgp, c2_msgp, c3_msgp;
 
-int main(void)
+int main(int argc, char *argv[])
 {
 	key_t key;
 	int pid, status;
 	int i, j, k;
 	sighandler_t alrm();
 
-#ifdef UCLINUX
-
 	tst_parse_opts(argc, argv, NULL, NULL);
 
-	maybe_run_child(&do_child_1, "ndd", 1, &msqid, &c1_msgp.type);
-	maybe_run_child(&do_child_2, "ndddd", 2, &msqid, &c1_msgp.type,
-			&c2_msgp.type, &c3_msgp.type);
-#endif
-
 	setup();
 
 	key = getipckey();
@@ -98,13 +91,7 @@ int main(void)
 		tst_brkm(TFAIL, NULL,
 			 "\tFork failed (may be OK if under stress)");
 	} else if (pid == 0) {
-#ifdef UCLINUX
-		if (self_exec(argv[0], "ndd", 1, msqid, c1_msgp.type) < 0) {
-			tst_brkm(TFAIL, NULL, "\tself_exec failed");
-		}
-#else
 		do_child_1();
-#endif
 	} else {
 		struct sigaction act;
 
@@ -144,14 +131,7 @@ int main(void)
 		tst_brkm(TFAIL, NULL,
 			 "\tFork failed (may be OK if under stress)");
 	} else if (pid == 0) {
-#ifdef UCLINUX
-		if (self_exec(argv[0], "ndddd", 1, msqid, c1_msgp.type,
-			      c2_msgp.type, c3_msgp.type) < 0) {
-			tst_brkm(TFAIL, NULL, "\tself_exec failed");
-		}
-#else
 		do_child_2();
-#endif
 	} else {
 		struct sigaction act;
 
diff --git a/testcases/kernel/syscalls/ipc/msgctl/msgctl08.c b/testcases/kernel/syscalls/ipc/msgctl/msgctl08.c
index eca50c5..7bcec50 100644
--- a/testcases/kernel/syscalls/ipc/msgctl/msgctl08.c
+++ b/testcases/kernel/syscalls/ipc/msgctl/msgctl08.c
@@ -64,16 +64,20 @@ void cleanup(void);
 static int dotest(key_t key, int child_process);
 static void sig_handler();
 
-#ifdef UCLINUX
-static char *argv0;
-static key_t key_uclinux;
-static int i_uclinux;
-static int id_uclinux;
-static int child_process_uclinux;
-
-static void do_child_1_uclinux(void);
-static void do_child_2_uclinux(void);
-#endif
+static char *opt_nprocs;
+static char *opt_nreps;
+
+static option_t options[] = {
+	{"n:", NULL, &opt_nprocs},
+	{"l:", NULL, &opt_nreps},
+	{NULL, NULL, NULL},
+};
+
+static void usage(void)
+{
+	printf("  -n      Number of processes\n");
+	printf("  -l      Number of iterations\n");
+}
 
 int main(int argc, char **argv)
 {
@@ -81,46 +85,31 @@ int main(int argc, char **argv)
 	int count, status;
 	struct sigaction act;
 
-#ifdef UCLINUX
-
-	argv0 = argv[0];
-
-	tst_parse_opts(argc, argv, NULL, NULL);
-
-	maybe_run_child(&do_child_1_uclinux, "ndd", 1, &key_uclinux,
-			&i_uclinux);
-	maybe_run_child(&do_child_2_uclinux, "nddd", 2, &id_uclinux,
-			&key_uclinux, &child_process_uclinux);
-#endif
+	tst_parse_opts(argc, argv, options, usage);
 
 	setup();
 
-	if (argc == 1) {
-		/* Set default parameters */
-		nreps = MAXNREPS;
-		nprocs = MSGMNI;
-	} else if (argc == 3) {
-		if (atoi(argv[1]) > MAXNREPS) {
-			tst_resm(TCONF,
-				 "Requested number of iterations too large, setting to Max. of %d",
-				 MAXNREPS);
+	nreps = MAXNREPS;
+	nprocs = MSGMNI;
+
+	if (opt_nreps) {
+		nreps = atoi(opt_nreps);
+		if (nreps > MAXNREPS) {
+			tst_resm(TINFO,
+				 "Requested number of iterations too large, "
+				 "setting to Max. of %d", MAXNREPS);
 			nreps = MAXNREPS;
-		} else {
-			nreps = atoi(argv[1]);
 		}
-		if (atoi(argv[2]) > MSGMNI) {
-			tst_resm(TCONF,
-				 "Requested number of processes too large, setting to Max. of %d",
-				 MSGMNI);
+	}
+
+	if (opt_nprocs) {
+		nprocs = atoi(opt_nprocs);
+		if (nprocs > MSGMNI) {
+			tst_resm(TINFO,
+				 "Requested number of processes too large, "
+				 "setting to Max. of %d", MSGMNI);
 			nprocs = MSGMNI;
-		} else {
-			nprocs = atoi(argv[2]);
 		}
-	} else {
-		tst_brkm(TCONF,
-			 NULL,
-			 " Usage: %s [ number of iterations  number of processes ]",
-			 argv[0]);
 	}
 
 	srand(getpid());
@@ -172,14 +161,8 @@ int main(int argc, char **argv)
 		}
 		/* Child does this */
 		if (pid == 0) {
-#ifdef UCLINUX
-			if (self_exec(argv[0], "ndd", 1, keyarray[i], i) < 0) {
-				tst_brkm(TFAIL, NULL, "\tself_exec failed");
-			}
-#else
 			procstat = 1;
 			exit(dotest(keyarray[i], i));
-#endif
 		}
 		pidarray[i] = pid;
 	}
@@ -216,20 +199,6 @@ int main(int argc, char **argv)
 	tst_exit();
 }
 
-#ifdef UCLINUX
-static void do_child_1_uclinux(void)
-{
-	procstat = 1;
-	exit(dotest(key_uclinux, i_uclinux));
-}
-
-static void do_child_2_uclinux(void)
-{
-	exit(doreader(key_uclinux, id_uclinux, 1,
-			child_process_uclinux, nreps));
-}
-#endif
-
 static int dotest(key_t key, int child_process)
 {
 	int id, pid;
@@ -257,21 +226,8 @@ static int dotest(key_t key, int child_process)
 		return FAIL;
 	}
 	/* Child does this */
-	if (pid == 0) {
-#ifdef UCLINUX
-		if (self_exec(argv0, "nddd", 2, id, key, child_process) < 0) {
-			printf("self_exec failed\n");
-			TEST(msgctl(tid, IPC_RMID, 0));
-			if (TEST_RETURN < 0) {
-				printf("msgctl() error in cleanup: %s\n",
-					strerror(errno));
-			}
-			return FAIL;
-		}
-#else
+	if (pid == 0)
 		exit(doreader(key, id, 1, child_process, nreps));
-#endif
-	}
 	/* Parent does this */
 	mykid = pid;
 	procstat = 2;
@@ -334,7 +290,6 @@ void cleanup(void)
 #ifdef DEBUG
 	tst_resm(TINFO, "Removing the message queue");
 #endif
-	fflush(stdout);
 	(void)msgctl(tid, IPC_RMID, NULL);
 	if ((status = msgctl(tid, IPC_STAT, NULL)) != -1) {
 		(void)msgctl(tid, IPC_RMID, NULL);
@@ -342,7 +297,5 @@ void cleanup(void)
 
 	}
 
-	fflush(stdout);
-
 	tst_rmdir();
 }
diff --git a/testcases/kernel/syscalls/ipc/msgctl/msgctl09.c b/testcases/kernel/syscalls/ipc/msgctl/msgctl09.c
index 0291132..3d6a6e1 100644
--- a/testcases/kernel/syscalls/ipc/msgctl/msgctl09.c
+++ b/testcases/kernel/syscalls/ipc/msgctl/msgctl09.c
@@ -65,76 +65,65 @@ static void term(int);
 static int dotest(key_t, int);
 static void cleanup_msgqueue(int i, int tid);
 
-#ifdef UCLINUX
-static char *argv0;
-static key_t key_uclinux;
-static int i_uclinux;
-static int pid_uclinux;
-static int child_process_uclinux;
-static int rkid_uclinux;
-
-
-static void do_child_1_uclinux(void);
-static void do_child_2_uclinux(void);
-static void do_child_3_uclinux(void);
-#endif
+static char *opt_nprocs;
+static char *opt_nkids;
+static char *opt_nreps;
+
+static option_t options[] = {
+	{"n:", NULL, &opt_nprocs},
+	{"c:", NULL, &opt_nkids},
+	{"l:", NULL, &opt_nreps},
+	{NULL, NULL, NULL},
+};
+
+static void usage(void)
+{
+	printf("  -n      Number of processes\n");
+	printf("  -c      Number of read/write child pairs\n");
+	printf("  -l      Number of iterations\n");
+}
 
 int main(int argc, char **argv)
 {
 	int i, j, ok, pid;
 	int count, status;
 
-#ifdef UCLINUX
-
-	argv0 = argv[0];
-
-	tst_parse_opts(argc, argv, NULL, NULL);
-
-	maybe_run_child(&do_child_1_uclinux, "ndd", 1, &key_uclinux,
-			&i_uclinux);
-	maybe_run_child(&do_child_2_uclinux, "nddd", 2, &key_uclinux,
-			&pid_uclinux, &child_process_uclinux);
-	maybe_run_child(&do_child_3_uclinux, "nddd", 3, &key_uclinux,
-			&rkid_uclinux, &child_process_uclinux);
-#endif
+	tst_parse_opts(argc, argv, options, usage);
 
 	setup();
 
-	if (argc == 1) {
-		/* Set default parameters */
-		nreps = MAXNREPS;
-		nprocs = MSGMNI;
-		nkids = MAXNKIDS;
-	} else if (argc == 4) {
-		if (atoi(argv[1]) > MAXNREPS) {
-			tst_resm(TCONF,
-				 "Requested number of iterations too large, setting to Max. of %d",
-				 MAXNREPS);
+	nreps = MAXNREPS;
+	nprocs = MSGMNI;
+	nkids = MAXNKIDS;
+
+	if (opt_nreps) {
+		nreps = atoi(opt_nreps);
+		if (nreps > MAXNREPS) {
+			tst_resm(TINFO,
+				 "Requested number of iterations too large, "
+				 "setting to Max. of %d", MAXNREPS);
 			nreps = MAXNREPS;
-		} else {
-			nreps = atoi(argv[1]);
 		}
-		if (atoi(argv[2]) > MSGMNI) {
-			tst_resm(TCONF,
-				 "Requested number of processes too large, setting to Max. of %d",
-				 MSGMNI);
+	}
+
+	if (opt_nprocs) {
+		nprocs = atoi(opt_nprocs);
+		if (nprocs > MSGMNI) {
+			tst_resm(TINFO,
+				 "Requested number of processes too large, "
+				 "setting to Max. of %d", MSGMNI);
 			nprocs = MSGMNI;
-		} else {
-			nprocs = atoi(argv[2]);
 		}
-		if (atoi(argv[3]) > MAXNKIDS) {
-			tst_resm(TCONF,
-				 "Requested number of read/write pairs too large; setting to Max. of %d",
-				 MAXNKIDS);
+	}
+
+	if (opt_nkids) {
+		nkids = atoi(opt_nkids);
+		if (nkids > MAXNKIDS) {
+			tst_resm(TINFO,
+				 "Requested number of read/write pairs too "
+				 "large, setting to Max. of %d", MAXNKIDS);
 			nkids = MAXNKIDS;
-		} else {
-			nkids = atoi(argv[3]);
 		}
-	} else {
-		tst_brkm(TCONF,
-			 NULL,
-			 " Usage: %s [ number of iterations  number of processes number of read/write pairs ]",
-			 argv[0]);
 	}
 
 	procstat = 0;
@@ -182,14 +171,8 @@ int main(int argc, char **argv)
 		}
 		/* Child does this */
 		if (pid == 0) {
-#ifdef UCLINUX
-			if (self_exec(argv[0], "ndd", 1, keyarray[i], i) < 0) {
-				tst_brkm(TFAIL, NULL, "\tself_exec failed");
-			}
-#else
 			procstat = 1;
 			exit(dotest(keyarray[i], i));
-#endif
 		}
 		pidarray[i] = pid;
 	}
@@ -226,28 +209,6 @@ int main(int argc, char **argv)
 	tst_exit();
 }
 
-#ifdef UCLINUX
-static void do_child_1_uclinux(void)
-{
-	procstat = 1;
-	exit(dotest(key_uclinux, i_uclinux));
-}
-
-static void do_child_2_uclinux(void)
-{
-	procstat = 2;
-	exit(doreader(key_uclinux, tid, pid_uclinux,
-			child_process_uclinux, nreps));
-}
-
-static void do_child_3_uclinux(void)
-{
-	procstat = 2;
-	exit(dowriter(key_uclinux, tid, rkid_uclinux,
-			child_process_uclinux, nreps));
-}
-#endif
-
 static void cleanup_msgqueue(int i, int tid)
 {
 	/*
@@ -296,18 +257,9 @@ static int dotest(key_t key, int child_process)
 		}
 		/* First child does this */
 		if (pid == 0) {
-#ifdef UCLINUX
-			if (self_exec(argv0, "nddd", 2, key, getpid(),
-				      child_process) < 0) {
-				printf("self_exec failed\n");
-				cleanup_msgqueue(i, tid);
-				return FAIL;
-			}
-#else
 			procstat = 2;
 			exit(doreader(key, tid, getpid(),
 					child_process, nreps));
-#endif
 		}
 		rkidarray[i] = pid;
 		fflush(stdout);
@@ -324,24 +276,9 @@ static int dotest(key_t key, int child_process)
 		}
 		/* Second child does this */
 		if (pid == 0) {
-#ifdef UCLINUX
-			if (self_exec(argv0, "nddd", 3, key, rkidarray[i],
-				      child_process) < 0) {
-				printf("\tFork failure in the first child of child group %d\n",
-					child_process);
-				/*
-				 * Kill the reader child process
-				 */
-				(void)kill(rkidarray[i], SIGKILL);
-
-				cleanup_msgqueue(i, tid);
-				return FAIL;
-			}
-#else
 			procstat = 2;
 			exit(dowriter(key, tid, rkidarray[i],
 					child_process, nreps));
-#endif
 		}
 		wkidarray[i] = pid;
 	}
@@ -386,7 +323,6 @@ static int dotest(key_t key, int child_process)
 	return exit_status;
 }
 
-/* ARGSUSED */
 static void term(int sig LTP_ATTRIBUTE_UNUSED)
 {
 	int i;
diff --git a/testcases/kernel/syscalls/ipc/msgctl/msgctl10.c b/testcases/kernel/syscalls/ipc/msgctl/msgctl10.c
index 5cf695a..f0f873f 100644
--- a/testcases/kernel/syscalls/ipc/msgctl/msgctl10.c
+++ b/testcases/kernel/syscalls/ipc/msgctl/msgctl10.c
@@ -61,16 +61,20 @@ void cleanup(void);
 static int dotest(key_t key, int child_process);
 static void sig_handler(int signo);
 
-#ifdef UCLINUX
-static char *argv0;
-static key_t key_uclinux;
-static int i_uclinux;
-static int id_uclinux;
-static int child_process_uclinux;
-
-static void do_child_1_uclinux(void);
-static void do_child_2_uclinux(void);
-#endif
+static char *opt_nprocs;
+static char *opt_nreps;
+
+static option_t options[] = {
+	{"n:", NULL, &opt_nprocs},
+	{"l:", NULL, &opt_nreps},
+	{NULL, NULL, NULL},
+};
+
+static void usage(void)
+{
+	printf("  -n      Number of processes\n");
+	printf("  -l      Number of iterations\n");
+}
 
 int main(int argc, char **argv)
 {
@@ -78,46 +82,31 @@ int main(int argc, char **argv)
 	int count, status;
 	struct sigaction act;
 
-#ifdef UCLINUX
-
-	argv0 = argv[0];
-
-	tst_parse_opts(argc, argv, NULL, NULL);
-
-	maybe_run_child(&do_child_1_uclinux, "ndd", 1, &key_uclinux,
-			&i_uclinux);
-	maybe_run_child(&do_child_2_uclinux, "nddd", 2, &id_uclinux,
-			&key_uclinux, &child_process_uclinux);
-#endif
+	tst_parse_opts(argc, argv, options, usage);
 
 	setup();
 
-	if (argc == 1) {
-		/* Set default parameters */
-		nreps = MAXNREPS;
-		nprocs = MSGMNI;
-	} else if (argc == 3) {
-		if (atoi(argv[1]) > MAXNREPS) {
-			tst_resm(TCONF,
-				 "Requested number of iterations too large, setting to Max. of %d",
-				 MAXNREPS);
+	nreps = MAXNREPS;
+	nprocs = MSGMNI;
+
+	if (opt_nreps) {
+		nreps = atoi(opt_nreps);
+		if (nreps > MAXNREPS) {
+			tst_resm(TINFO,
+				 "Requested number of iterations too large, "
+				 "setting to Max. of %d", MAXNREPS);
 			nreps = MAXNREPS;
-		} else {
-			nreps = atoi(argv[1]);
 		}
-		if (atoi(argv[2]) > MSGMNI) {
-			tst_resm(TCONF,
-				 "Requested number of processes too large, setting to Max. of %d",
-				 MSGMNI);
+	}
+
+	if (opt_nprocs) {
+		nprocs = atoi(opt_nprocs);
+		if (nprocs > MSGMNI) {
+			tst_resm(TINFO,
+				 "Requested number of processes too large, "
+				 "setting to Max. of %d", MSGMNI);
 			nprocs = MSGMNI;
-		} else {
-			nprocs = atoi(argv[2]);
 		}
-	} else {
-		tst_brkm(TCONF,
-			 NULL,
-			 " Usage: %s [ number of iterations  number of processes ]",
-			 argv[0]);
 	}
 
 	srand(getpid());
@@ -169,13 +158,8 @@ int main(int argc, char **argv)
 		}
 		/* Child does this */
 		if (pid == 0) {
-#ifdef UCLINUX
-			if (self_exec(argv[0], "ndd", 1, keyarray[i], i) < 0)
-				tst_brkm(TFAIL, NULL, "\tself_exec failed");
-#else
 			procstat = 1;
 			exit(dotest(keyarray[i], i));
-#endif
 		}
 		pidarray[i] = pid;
 	}
@@ -212,20 +196,6 @@ int main(int argc, char **argv)
 	tst_exit();
 }
 
-#ifdef UCLINUX
-static void do_child_1_uclinux(void)
-{
-	procstat = 1;
-	exit(dotest(key_uclinux, i_uclinux));
-}
-
-static void do_child_2_uclinux(void)
-{
-	exit(doreader(key_uclinux, id_uclinux, 1,
-			child_process_uclinux, nreps));
-}
-#endif
-
 static int dotest(key_t key, int child_process)
 {
 	int id, pid;
@@ -251,23 +221,9 @@ static int dotest(key_t key, int child_process)
 		}
 		return FAIL;
 	}
-	/* Child does this */
-	if (pid == 0) {
-#ifdef UCLINUX
-		if (self_exec(argv0, "nddd", 2, id, key, child_process) < 0) {
-			printf("self_exec failed\n");
-			TEST(msgctl(tid, IPC_RMID, 0));
-			if (TEST_RETURN < 0) {
-				printf("msgctl() error in cleanup: %s\n",
-					strerror(TEST_ERRNO));
-			}
-			return FAIL;
-		}
-#else
+	if (pid == 0)
 		exit(doreader(key, id, 1, child_process, nreps));
-#endif
-	}
-	/* Parent does this */
+
 	mykid = pid;
 	procstat = 2;
 	ret = dowriter(key, id, 1, child_process, nreps);
@@ -323,7 +279,6 @@ void cleanup(void)
 #ifdef DEBUG
 	tst_resm(TINFO, "Removing the message queue");
 #endif
-	fflush(stdout);
 	(void)msgctl(tid, IPC_RMID, NULL);
 	if ((status = msgctl(tid, IPC_STAT, NULL)) != -1) {
 		(void)msgctl(tid, IPC_RMID, NULL);
@@ -331,7 +286,5 @@ void cleanup(void)
 
 	}
 
-	fflush(stdout);
-
 	tst_rmdir();
 }
diff --git a/testcases/kernel/syscalls/ipc/msgctl/msgctl11.c b/testcases/kernel/syscalls/ipc/msgctl/msgctl11.c
index aa59c00..89099a7 100644
--- a/testcases/kernel/syscalls/ipc/msgctl/msgctl11.c
+++ b/testcases/kernel/syscalls/ipc/msgctl/msgctl11.c
@@ -70,71 +70,65 @@ static int dotest(key_t, int);
 static void dotest_iteration(int off);
 static void cleanup_msgqueue(int i, int tid);
 
-#ifdef UCLINUX
-static char *argv0;
-static key_t key_uclinux;
-static int i_uclinux;
-static int pid_uclinux;
-static int child_process_uclinux;
-static int rkid_uclinux;
-
-static void do_child_1_uclinux(void);
-static void do_child_2_uclinux(void);
-static void do_child_3_uclinux(void);
-#endif
+static char *opt_maxnprocs;
+static char *opt_nkids;
+static char *opt_nreps;
+
+static option_t options[] = {
+	{"n:", NULL, &opt_maxnprocs},
+	{"c:", NULL, &opt_nkids},
+	{"l:", NULL, &opt_nreps},
+	{NULL, NULL, NULL},
+};
+
+static void usage(void)
+{
+	printf("  -n      Number of processes\n");
+	printf("  -c      Number of read/write child pairs\n");
+	printf("  -l      Number of iterations\n");
+}
+
 
 int main(int argc, char **argv)
 {
 	int i, j, ok;
 
-#ifdef UCLINUX
-
-	argv0 = argv[0];
-
-	tst_parse_opts(argc, argv, NULL, NULL);
-
-	maybe_run_child(&do_child_1_uclinux, "ndd", 1, &key_uclinux,
-			&i_uclinux);
-	maybe_run_child(&do_child_2_uclinux, "nddd", 2, &key_uclinux,
-			&pid_uclinux, &child_process_uclinux);
-	maybe_run_child(&do_child_3_uclinux, "nddd", 3, &key_uclinux,
-			&rkid_uclinux, &child_process_uclinux);
-#endif
+	tst_parse_opts(argc, argv, options, usage);
 
 	setup();
 
-	if (argc == 1) {
-		/* Set default parameters */
-		nreps = MAXNREPS;
-		nkids = DEFNKIDS;
-	} else if (argc == 4) {
-		if (atoi(argv[1]) > MAXNREPS) {
+	nreps = MAXNREPS;
+	nkids = MAXNKIDS;
+
+	if (opt_nreps) {
+		nreps = atoi(opt_nreps);
+		if (nreps > MAXNREPS) {
 			tst_resm(TINFO,
-				 "Requested number of iterations too large, setting to Max. of %d",
-				 MAXNREPS);
+				 "Requested number of iterations too large, "
+				 "setting to Max. of %d", MAXNREPS);
 			nreps = MAXNREPS;
-		} else {
-			nreps = atoi(argv[1]);
 		}
-		if (atoi(argv[2]) > maxnprocs) {
+	}
+
+	if (opt_nkids) {
+		nkids = atoi(opt_nkids);
+		if (nkids > MAXNKIDS) {
 			tst_resm(TINFO,
-				 "Requested number of processes too large, setting to Max. of %d",
-				 maxnprocs);
-		} else {
-			maxnprocs = atoi(argv[2]);
+				 "Requested number of read/write pairs too "
+				 "large, setting to Max. of %d", MAXNKIDS);
+			nkids = MAXNKIDS;
 		}
-		if (atoi(argv[3]) > maxnkids) {
+	}
+
+
+	if (opt_maxnprocs) {
+		if (atoi(opt_maxnprocs) > maxnprocs) {
 			tst_resm(TINFO,
-				 "Requested number of read/write pairs too large; setting to Max. of %d",
-				 maxnkids);
-			nkids = maxnkids;
+				 "Requested number of processes too large, "
+				 "setting to Max. of %d", MSGMNI);
 		} else {
-			nkids = atoi(argv[3]);
+			maxnprocs = atoi(opt_maxnprocs);
 		}
-	} else {
-		tst_brkm(TCONF, cleanup,
-			 " Usage: %s [ number of iterations  number of processes number of read/write pairs ]",
-			 argv[0]);
 	}
 
 	procstat = 0;
@@ -212,15 +206,8 @@ static void dotest_iteration(int off)
 
 		/* Child does this */
 		if (pid == 0) {
-#ifdef UCLINUX
-			if (self_exec(argv0, "ndd", 1, key, i) < 0) {
-				printf("\tself_exec failed\n");
-				exit(FAIL);
-			}
-#else
 			procstat = 1;
 			exit(dotest(key, i));
-#endif
 		}
 		pidarray[i] = pid;
 	}
@@ -248,28 +235,6 @@ static void dotest_iteration(int off)
 			 count, nprocs);
 }
 
-#ifdef UCLINUX
-static void do_child_1_uclinux(void)
-{
-	procstat = 1;
-	exit(dotest(key_uclinux, i_uclinux));
-}
-
-static void do_child_2_uclinux(void)
-{
-	procstat = 2;
-	exit(doreader(key_uclinux, tid, pid_uclinux,
-			child_process_uclinux, nreps));
-}
-
-static void do_child_3_uclinux(void)
-{
-	procstat = 2;
-	exit(dowriter(key_uclinux, tid, rkid_uclinux,
-			child_process_uclinux, nreps));
-}
-#endif
-
 static void cleanup_msgqueue(int i, int tid)
 {
 	/*
@@ -318,18 +283,9 @@ static int dotest(key_t key, int child_process)
 		}
 		/* First child does this */
 		if (pid == 0) {
-#ifdef UCLINUX
-			if (self_exec(argv0, "nddd", 2, key, getpid(),
-				      child_process) < 0) {
-				printf("self_exec failed\n");
-				cleanup_msgqueue(i, tid);
-				return FAIL;
-			}
-#else
 			procstat = 2;
 			exit(doreader(key, tid, getpid(),
 					child_process, nreps));
-#endif
 		}
 		rkidarray[i] = pid;
 		if ((pid = FORK_OR_VFORK()) < 0) {
@@ -345,24 +301,9 @@ static int dotest(key_t key, int child_process)
 		}
 		/* Second child does this */
 		if (pid == 0) {
-#ifdef UCLINUX
-			if (self_exec(argv0, "nddd", 3, key, rkidarray[i],
-				      child_process) < 0) {
-				printf("\tFork failure in the first child of child group %d\n",
-					child_process);
-				/*
-				 * Kill the reader child process
-				 */
-				(void)kill(rkidarray[i], SIGKILL);
-
-				cleanup_msgqueue(i, tid);
-				return FAIL;
-			}
-#else
 			procstat = 2;
 			exit(dowriter(key, tid, rkidarray[i],
 					child_process, nreps));
-#endif
 		}
 		wkidarray[i] = pid;
 	}
-- 
2.10.2



More information about the ltp mailing list