• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /******************************************************************************/
2 /* Copyright (c) Crackerjack Project., 2007                                   */
3 /*                                                                            */
4 /* This program is free software;  you can redistribute it and/or modify      */
5 /* it under the terms of the GNU General Public License as published by       */
6 /* the Free Software Foundation; either version 2 of the License, or          */
7 /* (at your option) any later version.                                        */
8 /*                                                                            */
9 /* This program is distributed in the hope that it will be useful,            */
10 /* but WITHOUT ANY WARRANTY;  without even the implied warranty of            */
11 /* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See                  */
12 /* the GNU General Public License for more details.                           */
13 /*                                                                            */
14 /* You should have received a copy of the GNU General Public License          */
15 /* along with this program;  if not, write to the Free Software               */
16 /* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA    */
17 /*                                                                            */
18 /******************************************************************************/
19 /******************************************************************************/
20 /*                                                                            */
21 /* File:        rt_sigqueueinfo01.c                                           */
22 /*                                                                            */
23 /* Description: This tests the rt_sigqueueinfo() syscall.                     */
24 /*		rt_sigqueueinfo() Send signal information to a signal	      */
25 /*									      */
26 /* Usage:  <for command-line>                                                 */
27 /* rt_sigqueueinfo01 [-c n] [-e][-i n] [-I x] [-p x] [-t]                     */
28 /*      where,  -c n : Run n copies concurrently.                             */
29 /*              -e   : Turn on errno logging.                                 */
30 /*              -i n : Execute test n times.                                  */
31 /*              -I x : Execute test for x seconds.                            */
32 /*              -P x : Pause for x seconds between iterations.                */
33 /*              -t   : Turn on syscall timing.                                */
34 /*                                                                            */
35 /* Total Tests: 2                                                             */
36 /*                                                                            */
37 /* Test Name:   rt_sigqueueinfo01                                              */
38 /* History:     Porting from Crackerjack to LTP is done by                    */
39 /*              Manas Kumar Nayak maknayak@in.ibm.com>                        */
40 /******************************************************************************/
41 #include <sys/wait.h>
42 #include <stdio.h>
43 #include <signal.h>
44 #include <err.h>
45 #include <errno.h>
46 #include <stdlib.h>
47 #include <unistd.h>
48 #include <sys/syscall.h>
49 #include <string.h>
50 
51 #include "test.h"
52 #include "lapi/syscalls.h"
53 
54 char *TCID = "rt_sigqueueinfo01";
55 int testno;
56 int TST_TOTAL = 2;
57 
cleanup(void)58 void cleanup(void)
59 {
60 
61 	tst_rmdir();
62 
63 }
64 
setup(void)65 void setup(void)
66 {
67 	TEST_PAUSE;
68 	tst_tmpdir();
69 }
70 
main(void)71 int main(void)
72 {
73 	int status;
74 	pid_t pid;
75 	pid = getpid();
76 	siginfo_t uinfo;
77 
78 	tst_count = 0;
79 	for (testno = 0; testno < TST_TOTAL; ++testno) {
80 		TEST(pid = fork());
81 		setup();
82 		if (TEST_RETURN < 0)
83 			tst_brkm(TFAIL | TTERRNO, cleanup, "fork failed");
84 		else if (TEST_RETURN == 0) {
85 			uinfo.si_errno = 0;
86 			uinfo.si_code = SI_QUEUE;
87 			TEST(ltp_syscall(__NR_rt_sigqueueinfo, getpid(),
88 				SIGCHLD, &uinfo));
89 			if (TEST_RETURN != 0)
90 				err(1, "rt_sigqueueinfo");
91 			exit(0);
92 		} else {
93 			wait(&status);
94 			if (WIFEXITED(status) && WEXITSTATUS(status) == 0)
95 				tst_resm(TPASS, "Test Succeeded");
96 			else
97 				tst_resm(TFAIL, "Test Failed");
98 		}
99 		cleanup();
100 	}
101 	tst_exit();
102 }
103