Skip to contentSkip to conversation

semctl/semctl01.c: cleanup

PATCH Superseded DAN LI 4 participants 10 messages May 9, 2013 – May 13, 2013 1 message not in the archive

v1 of 2 Superseded Latest is v2 →

lore
Share & tools
lore

DAN LI

author
#0 lore raw

PATCH 1/2 semctl/semctl01.c: cleanup

1. Remove useless comments

2. Revise code to follow ltp-code-style

---
 testcases/kernel/syscalls/ipc/semctl/semctl01.c | 311 +++++++++---------------
 1 file changed, 117 insertions(+), 194 deletions(-)
testcases/kernel/syscalls/ipc/semctl/semctl01.c +117 -194
index c8957c8..93d7cd7 100644
@@ -1,20 +1,19 @@
 /*
+ * Copyright (c) International Business Machines  Corp., 2001
  *
- *   Copyright (c) International Business Machines  Corp., 2001
+ * 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 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 will 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.
  *
- *   This program is distributed in the hope that it will 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 to the Free Software
- *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ * You should have received a copy of the GNU General Public License
+ * along with this program;  if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  */
 
 /*
@@ -24,32 +23,6 @@
  * DESCRIPTION
  *	semctl01 - test the 10 possible semctl() commands
  *
- * ALGORITHM
- *	create a semaphore set with read and alter permissions
- *	loop if that option was specified
- *	  loop through the test cases
- *	    do any setup required for the test case
- *	    make the semctl() call using the TEST() macro
- *	    check the return code
- *	      if failure, issue a FAIL message.
- *	    otherwise,
- *	      if doing functionality testing
- *		call the appropriate test function
- *	  	if correct,
- *			issue a PASS message
- *		otherwise
- *			issue a FAIL message
- *	call cleanup
- *
- * USAGE:  <for command-line>
- *  semctl01 [-c n] [-f] [-i n] [-I x] [-P x] [-t]
- *     where,  -c n : Run n copies concurrently.
- *             -f   : Turn off functionality Testing.
- *	       -i n : Execute test n times.
- *	       -I x : Execute test for x seconds.
- *	       -P x : Pause for x seconds between iterations.
- *	       -t   : Turn on syscall timing.
- *
  * HISTORY
  *	03/2001 - Written by Wayne Boyer
  *
@@ -57,9 +30,6 @@
  *      - Fix concurrency issue. Due to the use of usleep function to
  *        synchronize processes, synchronization issues can occur on a loaded
  *        system. Fix this by using pipes to synchronize processes.
- *
- * RESTRICTIONS
- *	none
  */
 
 #include "ipcsem.h"
@@ -68,35 +38,35 @@
 char *TCID = "semctl01";
 int TST_TOTAL = 10;
 
-int sem_id_1 = -1;		/* a semaphore set with read and alter permissions */
+static int sem_id_1 = -1;
 
-int sync_pipes[2];
+static int sync_pipes[2];
 
 /*
  * These are the various setup and check functions for the 10 different
  * commands that are available for the semctl() call.
  */
-void func_stat(void);
-void set_setup(void), func_set(void);
-void func_gall(void);
-void cnt_setup(int), func_cnt(int);
-void pid_setup(void), func_pid(int);
-void gval_setup(void), func_gval(int);
-void sall_setup(void), func_sall(void);
-void func_sval(void);
-void func_rmid(void);
-void child_cnt(void);
-void child_pid(void);
-
-struct semid_ds buf;
-unsigned short array[PSEMS];
-struct sembuf sops;
-
-#define INCVAL 2		/* a semaphore increment value */
+static void func_stat(void);
+static void set_setup(void), func_set(void);
+static void func_gall(void);
+static void cnt_setup(int), func_cnt(int);
+static void pid_setup(void), func_pid(int);
+static void func_gval(int);
+static void sall_setup(void), func_sall(void);
+static void func_sval(void);
+static void func_rmid(void);
+static void child_cnt(void);
+static void child_pid(void);
+
+static struct semid_ds buf;
+static unsigned short array[PSEMS];
+static struct sembuf sops;
+
+#define INCVAL 2
 #define NEWMODE	066
 #define NCHILD	5
-#define SEM2	2		/* semaphore to use for GETPID and GETVAL */
-#define SEM4	4		/* semaphore to use for GETNCNT and GETZCNT */
+#define SEM2	2
+#define SEM4	4
 #define ONE	1
 #ifdef _XLC_COMPILER
 #define SEMUN_CAST
@@ -104,64 +74,54 @@ struct sembuf sops;
 #define SEMUN_CAST (union semun)
 #endif
 
-#ifdef _XLC_COMPILER
-#define SEMUN_CAST
-#else
-#define SEMUN_CAST (union semun)
-#endif
-
-int pid_arr[NCHILD];
+static int pid_arr[NCHILD];
 
 #ifdef UCLINUX
 #define PIPE_NAME	"semctl01"
 static char *argv0;
-int sem_op;
+static int sem_op;
 #endif
 
-struct test_case_t {
-	int semnum;		/* the primitive semaphore to use */
-	int cmd;		/* the command to test */
-	void (*func_test) ();	/* the test function */
+static struct test_case_t {
+	int semnum;
+	int cmd;
+	void (*func_test) ();
 	union semun arg;
-	void (*func_setup) ();	/* the setup function if necessary */
+	void (*func_setup) ();
 } TC[] = {
-	{
-	0, IPC_STAT, func_stat, SEMUN_CAST & buf, NULL}, {
-	0, IPC_SET, func_set, SEMUN_CAST & buf, set_setup}, {
-	0, GETALL, func_gall, SEMUN_CAST array, NULL}, {
-	SEM4, GETNCNT, func_cnt, SEMUN_CAST & buf, cnt_setup}, {
-	SEM2, GETPID, func_pid, SEMUN_CAST & buf, pid_setup}, {
-	SEM2, GETVAL, func_gval, SEMUN_CAST & buf, NULL}, {
-	SEM4, GETZCNT, func_cnt, SEMUN_CAST & buf, cnt_setup}, {
-	0, SETALL, func_sall, SEMUN_CAST array, sall_setup}, {
-	SEM4, SETVAL, func_sval, SEMUN_CAST INCVAL, NULL}, {
-	0, IPC_RMID, func_rmid, SEMUN_CAST & buf, NULL}
+	{0, IPC_STAT, func_stat, SEMUN_CAST & buf, NULL},
+	{0, IPC_SET, func_set, SEMUN_CAST & buf, set_setup},
+	{0, GETALL, func_gall, SEMUN_CAST array, NULL},
+	{SEM4, GETNCNT, func_cnt, SEMUN_CAST & buf, cnt_setup},
+	{SEM2, GETPID, func_pid, SEMUN_CAST & buf, pid_setup},
+	{SEM2, GETVAL, func_gval, SEMUN_CAST & buf, NULL},
+	{SEM4, GETZCNT, func_cnt, SEMUN_CAST & buf, cnt_setup},
+	{0, SETALL, func_sall, SEMUN_CAST array, sall_setup},
+	{SEM4, SETVAL, func_sval, SEMUN_CAST INCVAL, NULL},
+	{0, IPC_RMID, func_rmid, SEMUN_CAST & buf, NULL},
 };
 
-int main(int ac, char **av)
+int main(int argc, char *argv[])
 {
 	int lc;
 	char *msg;
 	int i, j;
 
-	if ((msg = parse_opts(ac, av, NULL, NULL)) != NULL) {
+	msg = parse_opts(argc, argv, NULL, NULL);
+	if (msg != NULL)
 		tst_brkm(TBROK, NULL, "OPTION PARSING ERROR - %s", msg);
-	}
+
 #ifdef UCLINUX
-	argv0 = av[0];
+	argv0 = argv[0];
 	maybe_run_child(&child_pid, "nd", 1, &sem_id_1);
 	maybe_run_child(&child_cnt, "ndd", 2, &sem_id_1, &sem_op);
 #endif
 
-	setup();		/* global setup */
-
-	/* The following loop checks looping state if -i option given */
+	setup();
 
 	for (lc = 0; TEST_LOOPING(lc); lc++) {
-		/* reset tst_count in case we are looping */
 		tst_count = 0;
 
-		/* loop through the test cases */
 		for (i = 0; i < TST_TOTAL; i++) {
 
 			/*
@@ -182,10 +142,6 @@ int main(int ac, char **av)
 				}
 			}
 
-			/*
-			 * Use TEST macro to make the call
-			 */
-
 			TEST(semctl(sem_id_1, TC[i].semnum, TC[i].cmd,
 				    TC[i].arg));
 
@@ -202,9 +158,9 @@ int main(int ac, char **av)
 					 */
 					switch (TC[i].cmd) {
 					case GETNCNT:
-					 /*FALLTHROUGH*/ case GETZCNT:
-					 /*FALLTHROUGH*/ case GETPID:
-					 /*FALLTHROUGH*/ case GETVAL:
+					case GETZCNT:
+					case GETPID:
+					case GETVAL:
 						(*TC[i].func_test)
 						    (TEST_RETURN);
 						break;
@@ -222,12 +178,11 @@ int main(int ac, char **av)
 			 */
 			switch (TC[i].cmd) {
 			case GETNCNT:
-			 /*FALLTHROUGH*/ case GETZCNT:
+			case GETZCNT:
 				for (j = 0; j < NCHILD; j++) {
-					if (kill(pid_arr[j], SIGKILL) == -1) {
+					if (kill(pid_arr[j], SIGKILL) == -1)
 						tst_brkm(TBROK, cleanup,
 							 "child kill failed");
-					}
 				}
 				break;
 			}
@@ -236,39 +191,36 @@ int main(int ac, char **av)
 		 * recreate the semaphore resource if looping
 		 */
 		if (TEST_LOOPING(lc)) {
-			if ((sem_id_1 = semget(semkey, PSEMS,
-					       IPC_CREAT | IPC_EXCL | SEM_RA))
-			    == -1) {
+			sem_id_1 = semget(semkey, PSEMS,
+					  IPC_CREAT | IPC_EXCL | SEM_RA);
+			if (sem_id_1 == -1)
 				tst_brkm(TBROK, cleanup,
 					 "couldn't recreate " "semaphore");
-			}
 		}
 	}
 
 	cleanup();
 
 	tst_exit();
-
 }
 
 /*
  * func_stat() - check the functionality of the IPC_STAT command with semctl()
  */
-void func_stat()
+static void func_stat(void)
 {
 	/* check the number of semaphores and the ipc_perm.mode value */
-	if (buf.sem_nsems == PSEMS && buf.sem_perm.mode == (SEM_RA)) {
+	if (buf.sem_nsems == PSEMS && buf.sem_perm.mode == (SEM_RA))
 		tst_resm(TPASS, "buf.sem_nsems and buf.sem_perm.mode"
 			 " are correct");
-	} else {
+	else
 		tst_resm(TFAIL, "semaphore STAT info is incorrect");
-	}
 }
 
 /*
  * set_setup() - set up for the IPC_SET command with semctl()
  */
-void set_setup()
+static void set_setup(void)
 {
 	/* set up a new mode for the semaphore set */
 	buf.sem_perm.mode = SEM_RA | NEWMODE;
@@ -277,7 +229,7 @@ void set_setup()
 /*
  * func_set() - check the functionality of the IPC_SET command with semctl()
  */
-void func_set()
+static void func_set(void)
 {
 	/* first stat the semaphore to get the new data */
 	if (semctl(sem_id_1, 0, IPC_STAT, (union semun)&buf) == -1) {
@@ -286,17 +238,16 @@ void func_set()
 	}
 
 	/* check that the new mode is what we set */
-	if (buf.sem_perm.mode == (SEM_RA | NEWMODE)) {
+	if (buf.sem_perm.mode == (SEM_RA | NEWMODE))
 		tst_resm(TPASS, "buf.sem_perm.mode is correct");
-	} else {
+	else
 		tst_resm(TFAIL, "semaphore mode info is incorrect");
-	}
 }
 
 /*
  * func_gall() - check the functionality of the GETALL command with semctl()
  */
-void func_gall()
+static void func_gall(void)
 {
 	int i;
 
@@ -313,7 +264,7 @@ void func_gall()
 /*
  * cnt_setup() - set up for the GETNCNT and GETZCNT commands with semctl()
  */
-void cnt_setup(int opval)
+static void cnt_setup(int opval)
 {
 	int pid, i;
 
@@ -326,31 +277,31 @@ void cnt_setup(int opval)
 	if (opval == 0) {
 		/* initialize the semaphore value to ONE */
 		sops.sem_op = ONE;
-		if (semop(sem_id_1, &sops, 1) == -1) {
+		if (semop(sem_id_1, &sops, 1) == -1)
 			tst_brkm(TBROK, cleanup, "semop #1 failed - cnt_setup");
-		}
 	}
 
-	sops.sem_op = opval;	/* set the correct operation */
+	/* set the correct operation */
+	sops.sem_op = opval;
 	for (i = 0; i < NCHILD; i++) {
 		if (sync_pipe_create(sync_pipes, PIPE_NAME) == -1)
 			tst_brkm(TBROK, cleanup, "sync_pipe_create failed");
 
 		/* fork five children to wait */
-		if ((pid = FORK_OR_VFORK()) == -1)
+		pid = FORK_OR_VFORK();
+		if (pid == -1)
 			tst_brkm(TBROK, cleanup, "fork failed in cnt_setup");
 
-		if (pid == 0) {	/* child */
+		if (pid == 0) {
 #ifdef UCLINUX
 			sem_op = sops.sem_op;
-			if (self_exec(argv0, "ndd", 2, sem_id_1, sem_op) < 0) {
+			if (self_exec(argv0, "ndd", 2, sem_id_1, sem_op) < 0)
 				tst_brkm(TBROK, cleanup, "self_exec failed "
 					 "in cnt_setup");
-			}
 #else
 			child_cnt();
 #endif
-		} else {	/* parent */
+		} else {
 			if (sync_pipe_wait(sync_pipes) == -1)
 				tst_brkm(TBROK, cleanup,
 					 "sync_pipe_wait failed");
@@ -370,7 +321,7 @@ void cnt_setup(int opval)
 	sleep(1);
 }
 
-void child_cnt()
+static void child_cnt(void)
 {
 #ifdef UCLINUX
 	sops.sem_op = (short int)sem_op;
@@ -397,9 +348,9 @@ void child_cnt()
 	 * routine which should cause an error to be return
 	 * by the semop() call.
 	 */
-	if (semop(sem_id_1, &sops, 1) != -1) {
+	if (semop(sem_id_1, &sops, 1) != -1)
 		tst_resm(TBROK, "semop succeeded - cnt_setup");
-	}
+
 	exit(0);
 }
 
@@ -407,40 +358,37 @@ void child_cnt()
  * func_cnt() - check the functionality of the GETNCNT and GETZCNT commands
  *	        with semctl()
  */
-void func_cnt(int rval)
+static void func_cnt(int rval)
 {
 
-	if (rval == NCHILD) {
+	if (rval == NCHILD)
 		tst_resm(TPASS, "number of sleeping processes is correct");
-	} else {
+	else
 		tst_resm(TFAIL, "number of sleeping processes is not correct");
-	}
 }
 
 /*
  * pid_setup() - set up for the GETPID command with semctl()
  */
-void pid_setup()
+static void pid_setup(void)
 {
 	int pid;
 
-	if (sync_pipe_create(sync_pipes, PIPE_NAME) == -1) {
+	if (sync_pipe_create(sync_pipes, PIPE_NAME) == -1)
 		tst_brkm(TBROK, cleanup, "sync_pipe_create failed");
-	}
 
 	/*
 	 * Fork a child to do a semop that will pass.
 	 */
-	if ((pid = FORK_OR_VFORK()) == -1) {
+	pid = FORK_OR_VFORK();
+	if (pid == -1)
 		tst_brkm(TBROK, cleanup, "fork failed in pid_setup()");
-	}
 
 	if (pid == 0) {		/* child */
 #ifdef UCLINUX
-		if (self_exec(argv0, "nd", 1, sem_id_1) < 0) {
+		if (self_exec(argv0, "nd", 1, sem_id_1) < 0)
 			tst_brkm(TBROK, cleanup, "self_exec failed "
 				 "in pid_setup()");
-		}
 #else
 		child_pid();
 #endif
@@ -455,7 +403,7 @@ void pid_setup()
 	}
 }
 
-void child_pid()
+static void child_pid(void)
 {
 #ifdef UCLINUX
 	if (sync_pipe_create(sync_pipes, PIPE_NAME) == -1)
@@ -468,53 +416,50 @@ void child_pid()
 	if (sync_pipe_close(sync_pipes, PIPE_NAME) == -1)
 		tst_brkm(TBROK, cleanup, "sync_pipe_close failed");
 
-	sops.sem_num = SEM2;	/* semaphore to change */
-	sops.sem_op = ONE;	/* operation is to increment semaphore */
+	sops.sem_num = SEM2;
+	sops.sem_op = ONE;
 	sops.sem_flg = 0;
 
 	/*
 	 * Do a semop that will increment the semaphore.
 	 */
-	if (semop(sem_id_1, &sops, 1) == -1) {
+	if (semop(sem_id_1, &sops, 1) == -1)
 		tst_resm(TBROK, "semop failed - pid_setup");
-	}
+
 	exit(0);
 }
 
 /*
  * func_pid() - check the functionality of the GETPID command with semctl()
  */
-void func_pid(int rval)
+static void func_pid(int rval)
 {
 	/* compare the rval (pid) to the saved pid from the setup */
-	if (rval == pid_arr[SEM2]) {
+	if (rval == pid_arr[SEM2])
 		tst_resm(TPASS, "last pid value is correct");
-	} else {
+	else
 		tst_resm(TFAIL, "last pid value is not correct");
-	}
 }
 
 /*
  * func_gval() - check the functionality of the GETVAL command with semctl()
  */
-void func_gval(int rval)
+static void func_gval(int rval)
 {
 	/*
 	 * This is a simple test.  The semaphore value should be equal
 	 * to ONE as it was set in the last test (GETPID).
 	 */
-	if (rval == 1) {
+	if (rval == 1)
 		tst_resm(TPASS, "semaphore value is correct");
-	} else {
+	else
 		tst_resm(TFAIL, "semaphore value is not correct");
-	}
-
 }
 
 /*
  * all_setup() - set up for the SETALL command with semctl()
  */
-void sall_setup()
+static void sall_setup(void)
 {
 	int i;
 
@@ -527,7 +472,7 @@ void sall_setup()
 /*
  * func_sall() - check the functionality of the SETALL command with semctl()
  */
-void func_sall()
+static void func_sall(void)
 {
 	int i;
 	unsigned short rarray[PSEMS];
@@ -536,9 +481,8 @@ void func_sall()
 	 * do a GETALL and compare the values to those set above
 	 */
 
-	if (semctl(sem_id_1, 0, GETALL, (union semun)rarray) == -1) {
+	if (semctl(sem_id_1, 0, GETALL, (union semun)rarray) == -1)
 		tst_brkm(TBROK, cleanup, "semctl failed in func_sall");
-	}
 
 	for (i = 0; i < PSEMS; i++) {
 		if (array[i] != rarray[i]) {
@@ -553,7 +497,7 @@ void func_sall()
 /*
  * func_sval() - check the functionality of the SETVAL command with semctl()
  */
-void func_sval()
+static void func_sval(void)
 {
 	int semv;
 	union semun arr;
@@ -562,42 +506,36 @@ void func_sval()
 	 * do a GETVAL and compare it to the value set above
 	 */
 
-	if ((semv = semctl(sem_id_1, SEM4, GETVAL, arr)) == -1) {
+	semv = semctl(sem_id_1, SEM4, GETVAL, arr);
+	if (semv == -1)
 		tst_brkm(TBROK, cleanup, "semctl failed in func_sval");
-	}
 
-	if (semv != INCVAL) {
+	if (semv != INCVAL)
 		tst_resm(TFAIL, "semaphore value is not what was set");
-	} else {
+	else
 		tst_resm(TPASS, "semaphore value is correct");
-	}
 }
 
 /*
  * func_rmid() - check the functionality of the IPC_RMID command with semctl()
  */
-void func_rmid()
+static void func_rmid(void)
 {
 
 	/*
 	 * do a semop() - we should get EINVAL
 	 */
-	if (semop(sem_id_1, &sops, 1) != -1) {
+	if (semop(sem_id_1, &sops, 1) != -1)
 		tst_resm(TFAIL, "semop succeeded on expected fail");
-	}
 
-	if (errno != EINVAL) {
+	if (errno != EINVAL)
 		tst_resm(TFAIL, "returned errno - %d - is not expected", errno);
-	} else {
+	else
 		tst_resm(TPASS, "semaphore appears to be removed");
-	}
 
 	sem_id_1 = -1;
 }
 
-/*
- * setup() - performs all the ONE TIME setup for this test.
- */
 void setup(void)
 {
 
@@ -605,27 +543,17 @@ void setup(void)
 
 	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();
 
 	/* get an IPC resource key */
 	semkey = getipckey();
 
 	/* create a semaphore set with read and alter permissions */
-	if ((sem_id_1 =
-	     semget(semkey, PSEMS, IPC_CREAT | IPC_EXCL | SEM_RA)) == -1) {
+	sem_id_1 = semget(semkey, PSEMS, IPC_CREAT | IPC_EXCL | SEM_RA);
+	if (sem_id_1 == -1)
 		tst_brkm(TBROK, cleanup, "couldn't create semaphore in setup");
-	}
 }
 
-/*
- * cleanup() - performs all the ONE TIME cleanup for this test at completion
- * 	       or premature exit.
- */
 void cleanup(void)
 {
 	/* if it exists, remove the semaphore resource */
@@ -633,10 +561,5 @@ void cleanup(void)
 
 	tst_rmdir();
 
-	/*
-	 * print timing stats if that option was specified.
-	 * print errno log if that option was specified.
-	 */
 	TEST_CLEANUP;
-
 }
Signature · 12 lines
1.8.1

------------------------------------------------------------------------------
Learn Graph Databases - Download FREE O'Reilly Book
"Graph Databases" is the definitive new guide to graph databases and 
their applications. This 200-page book is written by three acclaimed 
leaders in the field. The early access version is available now. 
Download your free book today! http://p.sf.net/sfu/neotech_d2d_may
_______________________________________________
Ltp-list mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/ltp-list
author
#1 lore raw

PATCH 2/2 semctl/semctl01.c: Test features IPC_INFO, SEM_INFO and SEM_STAT

Additional tests for features IPC_INFO, SEM_INFO and SEM_STAT.

---
 testcases/kernel/syscalls/ipc/semctl/semctl01.c | 45 +++++++++++++++++++++++++
 1 file changed, 45 insertions(+)
testcases/kernel/syscalls/ipc/semctl/semctl01.c +45 -0
index 93d7cd7..8e5c907 100644
@@ -32,11 +32,19 @@
  *        system. Fix this by using pipes to synchronize processes.
  */
 
+#ifndef _GNU_SOURCE
+#define _GNU_SOURCE
+#endif
 #include "ipcsem.h"
 #include "libtestsuite.h"
 
 char *TCID = "semctl01";
+
+#ifdef __linux__
+int TST_TOTAL = 13;
+#else
 int TST_TOTAL = 10;
+#endif
 
 static int sem_id_1 = -1;
 
@@ -57,8 +65,14 @@ static void func_sval(void);
 static void func_rmid(void);
 static void child_cnt(void);
 static void child_pid(void);
+#ifdef __linux__
+static void func_iinfo(int);
+static void func_sinfo(void);
+static void func_sstat(int);
+#endif
 
 static struct semid_ds buf;
+static struct seminfo ipc_buf;
 static unsigned short array[PSEMS];
 static struct sembuf sops;
 
@@ -98,6 +112,11 @@ static struct test_case_t {
 	{SEM4, GETZCNT, func_cnt, SEMUN_CAST & buf, cnt_setup},
 	{0, SETALL, func_sall, SEMUN_CAST array, sall_setup},
 	{SEM4, SETVAL, func_sval, SEMUN_CAST INCVAL, NULL},
+#ifdef __linux__
+	{0, IPC_INFO, func_iinfo, SEMUN_CAST & ipc_buf, NULL},
+	{0, SEM_INFO, func_sinfo, SEMUN_CAST & ipc_buf, NULL},
+	{0, SEM_STAT, func_sstat, SEMUN_CAST & buf, NULL},
+#endif
 	{0, IPC_RMID, func_rmid, SEMUN_CAST & buf, NULL},
 };
 
@@ -161,6 +180,8 @@ int main(int argc, char *argv[])
 					case GETZCNT:
 					case GETPID:
 					case GETVAL:
+					case IPC_INFO:
+					case SEM_STAT:
 						(*TC[i].func_test)
 						    (TEST_RETURN);
 						break;
@@ -536,6 +557,30 @@ static void func_rmid(void)
 	sem_id_1 = -1;
 }
 
+static void func_iinfo(int hidx)
+{
+	if (hidx >= 0)
+		tst_resm(TPASS, "the highest index is correct");
+	else
+		tst_resm(TFAIL, "the highest index is incorrect");
+}
+
+static void func_sinfo(void)
+{
+	if (ipc_buf.semusz < 1)
+		tst_resm(TFAIL, "number of semaphore sets is incorrect");
+	else
+		tst_resm(TPASS, "number of semaphore sets is correct");
+}
+
+static void func_sstat(int semidx)
+{
+	if (semidx >= 0)
+		tst_resm(TPASS, "id of the semaphore set is correct");
+	else
+		tst_resm(TFAIL, "id of the semaphore set is incorrect");
+}
+
 void setup(void)
 {
 
Signature · 14 lines
1.8.1



------------------------------------------------------------------------------
Learn Graph Databases - Download FREE O'Reilly Book
"Graph Databases" is the definitive new guide to graph databases and 
their applications. This 200-page book is written by three acclaimed 
leaders in the field. The early access version is available now. 
Download your free book today! http://p.sf.net/sfu/neotech_d2d_may
_______________________________________________
Ltp-list mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/ltp-list
#2 lore raw

Re: [LTP] [PATCH 2/2]semctl/semctl01.c: Test features IPC_INFO, SEM_INFO and SEM_STAT

Hi!

Quoted 9 lines
testcases/kernel/syscalls/ipc/semctl/semctl01.c +4 -0
+#ifdef __linux__
+int TST_TOTAL = 13;
+#else
 int TST_TOTAL = 10;
+#endif
 
 static int sem_id_1 = -1;

testcases/kernel/syscalls/ipc/semctl/semctl01.c static void func_sval(void); · line 72

Quoted 8 lines
testcases/kernel/syscalls/ipc/semctl/semctl01.c +5 -0
@@ -57,8 +65,14 @@ static void func_sval(void);
 static void func_rmid(void);
 static void child_cnt(void);
 static void child_pid(void);
+#ifdef __linux__
+static void func_iinfo(int);
+static void func_sinfo(void);
+static void func_sstat(int);
+#endif

Well the only part of the LTP that we promise that will build and run on anything else than Linux is Open Posix Testsuite, so in my opinion these ifdefs are not needed. Has anybody different opinion?

Signature · 13 lines
Cyril Hrubis
[email protected]

------------------------------------------------------------------------------
Learn Graph Databases - Download FREE O'Reilly Book
"Graph Databases" is the definitive new guide to graph databases and 
their applications. This 200-page book is written by three acclaimed 
leaders in the field. The early access version is available now. 
Download your free book today! http://p.sf.net/sfu/neotech_d2d_may
_______________________________________________
Ltp-list mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/ltp-list
#3 lore raw
In reply to DAN LI
Quoted 14 lines · On Thursday 09 May 2013 04:42:55 DAN LI wrote:
testcases/kernel/syscalls/ipc/semctl/semctl01.c +0 -6
 
 /*
@@ -24,32 +23,6 @@
  * DESCRIPTION
  *	semctl01 - test the 10 possible semctl() commands
  *
- * ALGORITHM
- *	create a semaphore set with read and alter permissions
- *	loop if that option was specified
- *	  loop through the test cases
- *	    do any setup required for the test case
- *	    make the semctl() call using the TEST() macro

testcases/kernel/syscalls/ipc/semctl/semctl01.c line 42

Quoted 10 lines
testcases/kernel/syscalls/ipc/semctl/semctl01.c +0 -10
- *	    check the return code
- *	      if failure, issue a FAIL message.
- *	    otherwise,
- *	      if doing functionality testing
- *		call the appropriate test function
- *	  	if correct,
- *			issue a PASS message
- *		otherwise
- *			issue a FAIL message
- *	call cleanup

i don't see high level DESCRIPTION/ALGORITHM as "useless". why do you ?

testcases/kernel/syscalls/ipc/semctl/semctl01.c line 26

Quoted 1 line
testcases/kernel/syscalls/ipc/semctl/semctl01.c +0 -0
  * HISTORY

on the flip side, HISTORY is pretty useless. that's what git log is for. -mike

------------------------------------------------------------------------------
Learn Graph Databases - Download FREE O'Reilly Book "Graph Databases" is the definitive new guide to graph databases and their applications. This 200-page book is written by three acclaimed leaders in the field. The early access version is available now. Download your free book today! http://p.sf.net/sfu/neotech_d2d_may

_______________________________________________
Ltp-list mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/ltp-list

author
#4 lore raw
Quoted 19 lines · Mike Frysinger
Quoted 18 lines · On Thursday 09 May 2013 04:42:55 DAN LI wrote:
testcases/kernel/syscalls/ipc/semctl/semctl01.c +0 -10
 
 /*
@@ -24,32 +23,6 @@
  * DESCRIPTION
  *	semctl01 - test the 10 possible semctl() commands
  *
- * ALGORITHM
- *	create a semaphore set with read and alter permissions
- *	loop if that option was specified
- *	  loop through the test cases
- *	    do any setup required for the test case
- *	    make the semctl() call using the TEST() macro
- *	    check the return code
- *	      if failure, issue a FAIL message.
- *	    otherwise,
- *	      if doing functionality testing
Quoted 8 lines

testcases/kernel/syscalls/ipc/semctl/semctl01.c line 42

Quoted 6 lines
testcases/kernel/syscalls/ipc/semctl/semctl01.c +0 -6
- *		call the appropriate test function
- *	  	if correct,
- *			issue a PASS message
- *		otherwise
- *			issue a FAIL message
- *	call cleanup

i don't see high level DESCRIPTION/ALGORITHM as "useless". why do you ?

In my opinion, "ALGORITHM" section of many ltp testcases follows one format:
------------------------------------------------
setup()
loop test frame
loop all test cases
TEST(call)
if call failed
log the errno
else
if functionality is ok
case PASS
else
case FAIL
cleanup()
------------------------------------------------

So, i think this section is redundant and useless once someone has learned the test frame.

Quoted 4 lines

testcases/kernel/syscalls/ipc/semctl/semctl01.c line 26

Quoted 2 lines
testcases/kernel/syscalls/ipc/semctl/semctl01.c +0 -0
  * HISTORY

on the flip side, HISTORY is pretty useless. that's what git log is for.

Agreed.

I'll send a V2 to fix it.

Thanks,
DAN LI

Quoted 2 lines

-mike

------------------------------------------------------------------------------
Learn Graph Databases - Download FREE O'Reilly Book "Graph Databases" is the definitive new guide to graph databases and their applications. This 200-page book is written by three acclaimed leaders in the field. The early access version is available now. Download your free book today! http://p.sf.net/sfu/neotech_d2d_may
_______________________________________________
Ltp-list mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/ltp-list

#8 lore raw

Re: [LTP] [PATCH 2/2]semctl/semctl01.c: Test features IPC_INFO, SEM_INFO and SEM_STAT

In reply to a message not in the archive
Quoted 21 lines · Mike Frysinger
Quoted 11 lines · On Thursday 09 May 2013 09:32:32 [email protected] wrote:
Quoted 11 lines
(quoted diff) +5 -0
+#ifdef __linux__
+int TST_TOTAL = 13;
+#else
 int TST_TOTAL = 10;
+#endif
 static int sem_id_1 = -1;
@@ -57,8 +65,14 @@ static void func_sval(void);
 static void func_rmid(void);
 static void child_cnt(void);
 static void child_pid(void);
+#ifdef __linux__
Quoted 8 lines

Review static void func_sval(void); · line 72

Quoted 4 lines
(quoted diff) +4 -0
+static void func_iinfo(int);
+static void func_sinfo(void);
+static void func_sstat(int);
+#endif

Well the only part of the LTP that we promise that will build and run on anything else than Linux is Open Posix Testsuite, so in my opinion these ifdefs are not needed. Has anybody different opinion?

Quoted 2 lines

i agree -- drop the __linux__ check, especially under testcases/kernel/ ... the "kernel" there is "linux".

So, you mean drop the "sgi" as well?

Thanks,
Wanlong Gao

Quoted 13 lines

-mike

------------------------------------------------------------------------------
Learn Graph Databases - Download FREE O'Reilly Book "Graph Databases" is the definitive new guide to graph databases and their applications. This 200-page book is written by three acclaimed leaders in the field. The early access version is available now. Download your free book today! http://p.sf.net/sfu/neotech_d2d_may

Quoted 5 lines

_______________________________________________
Ltp-list mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/ltp-list

------------------------------------------------------------------------------
Learn Graph Databases - Download FREE O'Reilly Book "Graph Databases" is the definitive new guide to graph databases and their applications. This 200-page book is written by three acclaimed leaders in the field. The early access version is available now. Download your free book today! http://p.sf.net/sfu/neotech_d2d_may
_______________________________________________
Ltp-list mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/ltp-list

#5 lore raw
In reply to DAN LI
Quoted 48 lines · On Thursday 09 May 2013 22:35:15 DAN LI wrote:
Quoted 22 lines · Mike Frysinger
Quoted 21 lines · On Thursday 09 May 2013 04:42:55 DAN LI wrote:
testcases/kernel/syscalls/ipc/semctl/semctl01.c +0 -10
 
 /*
@@ -24,32 +23,6 @@
 
  * DESCRIPTION
  *	semctl01 - test the 10 possible semctl() commands
  *
 
- * ALGORITHM
- *	create a semaphore set with read and alter permissions
- *	loop if that option was specified
- *	  loop through the test cases
- *	    do any setup required for the test case
- *	    make the semctl() call using the TEST() macro
- *	    check the return code
- *	      if failure, issue a FAIL message.
- *	    otherwise,
- *	      if doing functionality testing
Quoted 8 lines

testcases/kernel/syscalls/ipc/semctl/semctl01.c line 42

Quoted 6 lines
testcases/kernel/syscalls/ipc/semctl/semctl01.c +0 -6
- *		call the appropriate test function
- *	  	if correct,
- *			issue a PASS message
- *		otherwise
- *			issue a FAIL message
- *	call cleanup

i don't see high level DESCRIPTION/ALGORITHM as "useless". why do you ?

In my opinion, "ALGORITHM" section of many ltp testcases follows one
format: ------------------------------------------------ setup()
loop test frame
loop all test cases
TEST(call)
if call failed
log the errno
else
if functionality is ok
case PASS
else
case FAIL
cleanup()
------------------------------------------------

Quoted 2 lines

So, i think this section is redundant and useless once someone has learned the test frame.

and if you delete all the sections, then what are people going to refer to ? -mike

------------------------------------------------------------------------------
Learn Graph Databases - Download FREE O'Reilly Book "Graph Databases" is the definitive new guide to graph databases and their applications. This 200-page book is written by three acclaimed leaders in the field. The early access version is available now. Download your free book today! http://p.sf.net/sfu/neotech_d2d_may

_______________________________________________
Ltp-list mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/ltp-list

#9 lore raw

Re: [LTP] [PATCH 2/2]semctl/semctl01.c: Test features IPC_INFO, SEM_INFO and SEM_STAT

In reply to Wanlong Gao
Quoted 28 lines · On Friday 10 May 2013 04:30:00 Wanlong Gao wrote:
Quoted 27 lines · Mike Frysinger
Quoted 25 lines · On Thursday 09 May 2013 09:32:32 [email protected] wrote:
Quoted 11 lines
(quoted diff) +4 -0
+#ifdef __linux__
+int TST_TOTAL = 13;
+#else
 
 int TST_TOTAL = 10;
 
+#endif
 
 static int sem_id_1 = -1;

Review static void func_sval(void); · line 74

Quoted 10 lines
(quoted diff) +5 -0
@@ -57,8 +65,14 @@ static void func_sval(void);
 
 static void func_rmid(void);
 static void child_cnt(void);
 static void child_pid(void);
 
+#ifdef __linux__
+static void func_iinfo(int);
+static void func_sinfo(void);
+static void func_sstat(int);
+#endif

Well the only part of the LTP that we promise that will build and run on anything else than Linux is Open Posix Testsuite, so in my opinion these ifdefs are not needed. Has anybody different opinion?

Quoted 4 lines
Quoted 2 lines

i agree -- drop the __linux__ check, especially under testcases/kernel/ ... the "kernel" there is "linux".

So, you mean drop the "sgi" as well?

scrubbing it from testcases/kernel/syscalls/sighold/sighold02.c makes sense. SGI is dead and so is IRIX. if they want to run tests against their system, then can download an older version of LTP.
-mike

------------------------------------------------------------------------------
Learn Graph Databases - Download FREE O'Reilly Book "Graph Databases" is the definitive new guide to graph databases and their applications. This 200-page book is written by three acclaimed leaders in the field. The early access version is available now. Download your free book today! http://p.sf.net/sfu/neotech_d2d_may

_______________________________________________
Ltp-list mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/ltp-list

#10 lore raw

Re: [LTP] [PATCH 2/2]semctl/semctl01.c: Test features IPC_INFO, SEM_INFO and SEM_STAT

Quoted 29 lines · Mike Frysinger
Quoted 28 lines · On Friday 10 May 2013 04:30:00 Wanlong Gao wrote:
Quoted 27 lines · Mike Frysinger
Quoted 25 lines · On Thursday 09 May 2013 09:32:32 [email protected] wrote:
Quoted 11 lines
(quoted diff) +4 -0
+#ifdef __linux__
+int TST_TOTAL = 13;
+#else
 
 int TST_TOTAL = 10;
 
+#endif
 
 static int sem_id_1 = -1;

Review static void func_sval(void); · line 74

Quoted 10 lines
(quoted diff) +5 -0
@@ -57,8 +65,14 @@ static void func_sval(void);
 
 static void func_rmid(void);
 static void child_cnt(void);
 static void child_pid(void);
 
+#ifdef __linux__
+static void func_iinfo(int);
+static void func_sinfo(void);
+static void func_sstat(int);
+#endif

Well the only part of the LTP that we promise that will build and run on anything else than Linux is Open Posix Testsuite, so in my opinion these ifdefs are not needed. Has anybody different opinion?

Quoted 8 lines
Quoted 4 lines
Quoted 2 lines

i agree -- drop the __linux__ check, especially under testcases/kernel/ ... the "kernel" there is "linux".

So, you mean drop the "sgi" as well?

scrubbing it from testcases/kernel/syscalls/sighold/sighold02.c makes sense. SGI is dead and so is IRIX. if they want to run tests against their system, then can download an older version of LTP.

Make sense.

Thanks,
Wanlong Gao

Quoted 2 lines

-mike

------------------------------------------------------------------------------
Learn Graph Databases - Download FREE O'Reilly Book "Graph Databases" is the definitive new guide to graph databases and their applications. This 200-page book is written by three acclaimed leaders in the field. The early access version is available now. Download your free book today! http://p.sf.net/sfu/neotech_d2d_may
_______________________________________________
Ltp-list mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/ltp-list

#6 lore raw
In reply to Mike Frysinger

Hi!

Quoted 18 lines
Quoted 18 lines
Quoted 1 line

i don't see high level DESCRIPTION/ALGORITHM as "useless". why do you ?

In my opinion, "ALGORITHM" section of many ltp testcases follows one
format: ------------------------------------------------ setup()
loop test frame
loop all test cases
TEST(call)
if call failed
log the errno
else
if functionality is ok
case PASS
else
case FAIL
cleanup()
------------------------------------------------

Quoted 4 lines
Quoted 2 lines

So, i think this section is redundant and useless once someone has learned the test frame.

and if you delete all the sections, then what are people going to refer to ?

I usually end up with less structured but IMHO more readable description. Having the descriptions in form of pseudocode seems to be useless as the actual code is right bellow it. I tend to rewrite these into something like:

'Call foo with bar options and check for xyz result.'

Which shortens the description into one sentence but all the important information is preserved.

Signature · 13 lines
Cyril Hrubis
[email protected]

------------------------------------------------------------------------------
Learn Graph Databases - Download FREE O'Reilly Book
"Graph Databases" is the definitive new guide to graph databases and 
their applications. This 200-page book is written by three acclaimed 
leaders in the field. The early access version is available now. 
Download your free book today! http://p.sf.net/sfu/neotech_d2d_may
_______________________________________________
Ltp-list mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/ltp-list