1 2 /* 3 * 4 * Copyright (c) International Business Machines Corp., 2002 5 * 6 * This program is free software; you can redistribute it and/or modify 7 * it under the terms of the GNU General Public License as published by 8 * the Free Software Foundation; either version 2 of the License, or 9 * (at your option) any later version. 10 * 11 * This program is distributed in the hope that it will be useful, 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See 14 * the GNU General Public License for more details. 15 * 16 * You should have received a copy of the GNU General Public License 17 * along with this program; if not, write to the Free Software 18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 19 */ 20 21 /* 22 * NAME 23 * sigpending02.c 24 * 25 * DESCRIPTION 26 * Test to see the the proper errors are returned by sigpending 27 *$ 28 * ALGORITHM 29 * test 1: 30 * Call sigpending(sigset_t*=-1), it should return -1 with errno EFAULT 31 * 32 * USAGE: <for command-line> 33 * -c n Run n copies concurrently 34 * -e Turn on errno logging 35 * -f Turn off functional testing 36 * -h Show this help screen 37 * -i n Execute test n times 38 * -I x Execute test for x seconds 39 * -p Pause for SIGUSR1 before starting 40 * -P x Pause for x seconds between iterations 41 * -t Turn on syscall timing 42 * 43 * HISTORY 44 * 02/2002 Written by Paul Larson 45 * 46 * RESTRICTIONS 47 * None 48 */ 49 #include <sys/types.h> 50 #include <fcntl.h> 51 #include <sys/stat.h> 52 #include <errno.h> 53 #include <string.h> 54 #include <signal.h> 55 #include "test.h" 56 57 void setup(); 58 void help(); 59 void cleanup(); 60 61 char *TCID = "sigpending02"; 62 int TST_TOTAL = 1; 63 64 /*********************************************************************** 65 * Main 66 ***********************************************************************/ 67 int main(int ac, char **av) 68 { 69 int lc; 70 sigset_t *sigset; 71 72 tst_parse_opts(ac, av, NULL, NULL); 73 74 /*************************************************************** 75 * perform global setup for test 76 ***************************************************************/ 77 setup(); 78 79 /* set sigset to point to an invalid location */ 80 sigset = (sigset_t *) - 1; 81 82 /*************************************************************** 83 * check looping state 84 ***************************************************************/ 85 /* TEST_LOOPING() is a macro that will make sure the test continues 86 * looping according to the standard command line args. 87 */ 88 for (lc = 0; TEST_LOOPING(lc); lc++) { 89 90 tst_count = 0; 91 92 TEST(sigpending(sigset)); 93 94 /* check return code */ 95 if (TEST_RETURN == -1) { 96 if (TEST_ERRNO != EFAULT) 97 tst_brkm(TFAIL, cleanup, 98 "sigpending() Failed with wrong " 99 "errno, expected errno=%d, got errno=%d : %s", 100 EFAULT, TEST_ERRNO, 101 strerror(TEST_ERRNO)); 102 else 103 tst_resm(TPASS, 104 "expected failure - errno = %d : %s", 105 TEST_ERRNO, strerror(TEST_ERRNO)); 106 } else { 107 tst_brkm(TFAIL, cleanup, 108 "sigpending() Failed, expected " 109 "return value=-1, got %ld", TEST_RETURN); 110 } 111 } 112 113 /*************************************************************** 114 * cleanup and exit 115 ***************************************************************/ 116 cleanup(); 117 tst_exit(); 118 119 } 120 121 /*************************************************************** 122 * help 123 ***************************************************************/ 124 void help(void) 125 { 126 printf("test\n"); 127 } 128 129 /*************************************************************** 130 * setup() - performs all ONE TIME setup for this test. 131 ***************************************************************/ 132 void setup(void) 133 { 134 TEST_PAUSE; 135 } 136 137 /*************************************************************** 138 * cleanup() - performs all ONE TIME cleanup for this test at 139 * completion or premature exit. 140 ***************************************************************/ 141 void cleanup(void) 142 { 143 } 144