1865695bbc89088b9526ea9045410e5afb70a985cplars/* 2865695bbc89088b9526ea9045410e5afb70a985cplars * 3865695bbc89088b9526ea9045410e5afb70a985cplars * Copyright (c) International Business Machines Corp., 2001 4865695bbc89088b9526ea9045410e5afb70a985cplars * 5865695bbc89088b9526ea9045410e5afb70a985cplars * This program is free software; you can redistribute it and/or modify 6865695bbc89088b9526ea9045410e5afb70a985cplars * it under the terms of the GNU General Public License as published by 7865695bbc89088b9526ea9045410e5afb70a985cplars * the Free Software Foundation; either version 2 of the License, or 8865695bbc89088b9526ea9045410e5afb70a985cplars * (at your option) any later version. 9865695bbc89088b9526ea9045410e5afb70a985cplars * 10865695bbc89088b9526ea9045410e5afb70a985cplars * This program is distributed in the hope that it will be useful, 11865695bbc89088b9526ea9045410e5afb70a985cplars * but WITHOUT ANY WARRANTY; without even the implied warranty of 12865695bbc89088b9526ea9045410e5afb70a985cplars * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See 13865695bbc89088b9526ea9045410e5afb70a985cplars * the GNU General Public License for more details. 14865695bbc89088b9526ea9045410e5afb70a985cplars * 15865695bbc89088b9526ea9045410e5afb70a985cplars * You should have received a copy of the GNU General Public License 16865695bbc89088b9526ea9045410e5afb70a985cplars * along with this program; if not, write to the Free Software 174548c6cf9bcdd96d8303caa4130ab638b61f8a30Wanlong Gao * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 18865695bbc89088b9526ea9045410e5afb70a985cplars */ 19865695bbc89088b9526ea9045410e5afb70a985cplars 20865695bbc89088b9526ea9045410e5afb70a985cplars/* 21865695bbc89088b9526ea9045410e5afb70a985cplars * NAME 22865695bbc89088b9526ea9045410e5afb70a985cplars * signal02.c 23865695bbc89088b9526ea9045410e5afb70a985cplars * 24865695bbc89088b9526ea9045410e5afb70a985cplars * DESCRIPTION 25865695bbc89088b9526ea9045410e5afb70a985cplars * signal02 - Test that we get an error using illegal signals 26865695bbc89088b9526ea9045410e5afb70a985cplars * 27865695bbc89088b9526ea9045410e5afb70a985cplars * ALGORITHM 28865695bbc89088b9526ea9045410e5afb70a985cplars * loop if that option was specified 29865695bbc89088b9526ea9045410e5afb70a985cplars * issue the system call 30865695bbc89088b9526ea9045410e5afb70a985cplars * check the return value 31865695bbc89088b9526ea9045410e5afb70a985cplars * if return value != -1 32865695bbc89088b9526ea9045410e5afb70a985cplars * issue a FAIL message, break remaining tests and cleanup 33865695bbc89088b9526ea9045410e5afb70a985cplars * if we get an EINVAL 34865695bbc89088b9526ea9045410e5afb70a985cplars * issue a PASS message 35865695bbc89088b9526ea9045410e5afb70a985cplars * else 36865695bbc89088b9526ea9045410e5afb70a985cplars * issue a FAIL message, break remaining tests and cleanup 37865695bbc89088b9526ea9045410e5afb70a985cplars * call cleanup 38865695bbc89088b9526ea9045410e5afb70a985cplars * 39865695bbc89088b9526ea9045410e5afb70a985cplars * USAGE: <for command-line> 40865695bbc89088b9526ea9045410e5afb70a985cplars * signal02 [-c n] [-e] [-i n] [-I x] [-p x] [-t] 41865695bbc89088b9526ea9045410e5afb70a985cplars * where, -c n : Run n copies concurrently. 42865695bbc89088b9526ea9045410e5afb70a985cplars * -e : Turn on error logging. 43865695bbc89088b9526ea9045410e5afb70a985cplars * -i n : Execute test n times. 44865695bbc89088b9526ea9045410e5afb70a985cplars * -I x : Execute test for x seconds. 45865695bbc89088b9526ea9045410e5afb70a985cplars * -P x : Pause for x seconds between iterations. 46865695bbc89088b9526ea9045410e5afb70a985cplars * -t : Turn on syscall timing. 47865695bbc89088b9526ea9045410e5afb70a985cplars * 48865695bbc89088b9526ea9045410e5afb70a985cplars * History 49865695bbc89088b9526ea9045410e5afb70a985cplars * 07/2001 John George 50865695bbc89088b9526ea9045410e5afb70a985cplars * -Ported 51865695bbc89088b9526ea9045410e5afb70a985cplars * 52865695bbc89088b9526ea9045410e5afb70a985cplars * Restrictions 53865695bbc89088b9526ea9045410e5afb70a985cplars * none 54865695bbc89088b9526ea9045410e5afb70a985cplars */ 55865695bbc89088b9526ea9045410e5afb70a985cplars 56865695bbc89088b9526ea9045410e5afb70a985cplars#include "test.h" 57865695bbc89088b9526ea9045410e5afb70a985cplars 58865695bbc89088b9526ea9045410e5afb70a985cplars#include <errno.h> 59865695bbc89088b9526ea9045410e5afb70a985cplars#include <signal.h> 60865695bbc89088b9526ea9045410e5afb70a985cplars 61865695bbc89088b9526ea9045410e5afb70a985cplarsvoid cleanup(void); 62865695bbc89088b9526ea9045410e5afb70a985cplarsvoid setup(void); 63865695bbc89088b9526ea9045410e5afb70a985cplars 6456207cec7732e09c216c751c0b5f88a242bacae6subrata_modakchar *TCID = "signal02"; 65865695bbc89088b9526ea9045410e5afb70a985cplarsint TST_TOTAL = 3; 66865695bbc89088b9526ea9045410e5afb70a985cplars 6756207cec7732e09c216c751c0b5f88a242bacae6subrata_modaktypedef void (*sighandler_t) (int); 6874948ad801d4aba1c872652580b8b331e41aefcaplars 6956207cec7732e09c216c751c0b5f88a242bacae6subrata_modaksighandler_t Tret; 7056207cec7732e09c216c751c0b5f88a242bacae6subrata_modakint sigs[] = { _NSIG + 1, SIGKILL, SIGSTOP }; 71865695bbc89088b9526ea9045410e5afb70a985cplars 7274948ad801d4aba1c872652580b8b331e41aefcaplarsint main(int ac, char **av) 73865695bbc89088b9526ea9045410e5afb70a985cplars{ 7489af32a63ce8a780ea39337339e14caae244b5a4Cyril Hrubis int lc; 75865695bbc89088b9526ea9045410e5afb70a985cplars int i; 76865695bbc89088b9526ea9045410e5afb70a985cplars 77d6d11d08678aac1ed2c370ea8e42e5f45aea07beCyril Hrubis tst_parse_opts(ac, av, NULL, NULL); 78865695bbc89088b9526ea9045410e5afb70a985cplars 7956207cec7732e09c216c751c0b5f88a242bacae6subrata_modak setup(); /* global setup */ 80865695bbc89088b9526ea9045410e5afb70a985cplars 81865695bbc89088b9526ea9045410e5afb70a985cplars /* The following loop checks looping state if -i option given */ 82865695bbc89088b9526ea9045410e5afb70a985cplars 83865695bbc89088b9526ea9045410e5afb70a985cplars for (lc = 0; TEST_LOOPING(lc); lc++) { 84d59a659cd639ca2780b00049d102acd2a783d585Caspar Zhang /* reset tst_count in case we are looping */ 85d59a659cd639ca2780b00049d102acd2a783d585Caspar Zhang tst_count = 0; 86865695bbc89088b9526ea9045410e5afb70a985cplars 87865695bbc89088b9526ea9045410e5afb70a985cplars /* 88865695bbc89088b9526ea9045410e5afb70a985cplars * There are three cases where we should get an EINVAL 89865695bbc89088b9526ea9045410e5afb70a985cplars */ 9056207cec7732e09c216c751c0b5f88a242bacae6subrata_modak for (i = 0; i < TST_TOTAL; i++) { 91865695bbc89088b9526ea9045410e5afb70a985cplars 9256207cec7732e09c216c751c0b5f88a242bacae6subrata_modak errno = 0; 9356207cec7732e09c216c751c0b5f88a242bacae6subrata_modak Tret = signal(sigs[i], SIG_IGN); 9456207cec7732e09c216c751c0b5f88a242bacae6subrata_modak TEST_ERRNO = errno; 95865695bbc89088b9526ea9045410e5afb70a985cplars 9674948ad801d4aba1c872652580b8b331e41aefcaplars if (Tret != SIG_ERR) { 97865695bbc89088b9526ea9045410e5afb70a985cplars tst_brkm(TFAIL, cleanup, "%s call failed - " 98865695bbc89088b9526ea9045410e5afb70a985cplars "errno = %d : %s", TCID, TEST_ERRNO, 99865695bbc89088b9526ea9045410e5afb70a985cplars strerror(TEST_ERRNO)); 100354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao } 101bdbaec51a423e715c2b03ed9e497e9a1fba6103esubrata_modak 10256207cec7732e09c216c751c0b5f88a242bacae6subrata_modak switch (TEST_ERRNO) { 103865695bbc89088b9526ea9045410e5afb70a985cplars case EINVAL: 104865695bbc89088b9526ea9045410e5afb70a985cplars tst_resm(TPASS, "expected failure - errno = " 105865695bbc89088b9526ea9045410e5afb70a985cplars "%d - %s", TEST_ERRNO, 106865695bbc89088b9526ea9045410e5afb70a985cplars strerror(TEST_ERRNO)); 107865695bbc89088b9526ea9045410e5afb70a985cplars break; 108865695bbc89088b9526ea9045410e5afb70a985cplars default: 109865695bbc89088b9526ea9045410e5afb70a985cplars tst_resm(TFAIL, "call failed to produce " 11056207cec7732e09c216c751c0b5f88a242bacae6subrata_modak "expected error - errno = %d " 11156207cec7732e09c216c751c0b5f88a242bacae6subrata_modak "- %s", TEST_ERRNO, 11256207cec7732e09c216c751c0b5f88a242bacae6subrata_modak strerror(TEST_ERRNO)); 113865695bbc89088b9526ea9045410e5afb70a985cplars } 114865695bbc89088b9526ea9045410e5afb70a985cplars } 115d59a659cd639ca2780b00049d102acd2a783d585Caspar Zhang tst_count++; /* incr. TEST_LOOP counter */ 116865695bbc89088b9526ea9045410e5afb70a985cplars } 117865695bbc89088b9526ea9045410e5afb70a985cplars 118865695bbc89088b9526ea9045410e5afb70a985cplars cleanup(); 119865695bbc89088b9526ea9045410e5afb70a985cplars 1207d0a4a57fbcd47f72b67c08df532e8ef47f6fdaeGarrett Cooper tst_exit(); 121fa451a14d1fd38a2c32ff2a66474bafbf5b6c9dfrobbiew 122865695bbc89088b9526ea9045410e5afb70a985cplars} 123865695bbc89088b9526ea9045410e5afb70a985cplars 124865695bbc89088b9526ea9045410e5afb70a985cplars/* 125865695bbc89088b9526ea9045410e5afb70a985cplars * setup() - performs all the ONE TIME setup for this test. 126865695bbc89088b9526ea9045410e5afb70a985cplars */ 12756207cec7732e09c216c751c0b5f88a242bacae6subrata_modakvoid setup(void) 128865695bbc89088b9526ea9045410e5afb70a985cplars{ 1292c28215423293e443469a07ae7011135d058b671Garrett Cooper 130865695bbc89088b9526ea9045410e5afb70a985cplars tst_sig(NOFORK, DEF_HANDLER, cleanup); 131865695bbc89088b9526ea9045410e5afb70a985cplars 132865695bbc89088b9526ea9045410e5afb70a985cplars TEST_PAUSE; 133865695bbc89088b9526ea9045410e5afb70a985cplars} 134865695bbc89088b9526ea9045410e5afb70a985cplars 135865695bbc89088b9526ea9045410e5afb70a985cplars/* 136865695bbc89088b9526ea9045410e5afb70a985cplars * cleanup() - performs all the ONE TIME cleanup for this test at completion 137865695bbc89088b9526ea9045410e5afb70a985cplars * or premature exit. 138865695bbc89088b9526ea9045410e5afb70a985cplars */ 13956207cec7732e09c216c751c0b5f88a242bacae6subrata_modakvoid cleanup(void) 140865695bbc89088b9526ea9045410e5afb70a985cplars{ 141865695bbc89088b9526ea9045410e5afb70a985cplars 142ec6edca7aa42b6affd989ef91b5897f96795e40fChris Dearman} 143