blob: bd9a9375904c5e0e0790c7737ac9cd7fe0ebc654 [file] [log] [blame]
plars865695b2001-08-27 22:15:12 +00001/*
2 *
3 * Copyright (c) International Business Machines Corp., 2001
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
13 * the GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
Wanlong Gao4548c6c2012-10-19 18:03:36 +080017 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
plars865695b2001-08-27 22:15:12 +000018 */
19
20/*
21 * NAME
22 * shmdt02.c
23 *
24 * DESCRIPTION
25 * shmdt02 - check for EINVAL error
26 *
27 * ALGORITHM
28 * loop if that option was specified
29 * call shmdt() using an invalid shared memory address
30 * check the errno value
31 * issue a PASS message if we get EINVAL
32 * otherwise, the tests fails
33 * issue a FAIL message
34 * call cleanup
35 *
36 * USAGE: <for command-line>
37 * shmdt02 [-c n] [-e] [-i n] [-I x] [-P x] [-t]
38 * where, -c n : Run n copies concurrently.
39 * -e : Turn on errno logging.
40 * -i n : Execute test n times.
41 * -I x : Execute test for x seconds.
42 * -P x : Pause for x seconds between iterations.
43 * -t : Turn on syscall timing.
44 *
45 * HISTORY
46 * 03/2001 - Written by Wayne Boyer
47 *
48 * RESTRICTIONS
49 * none
50 */
51
robbiew23499f02002-11-18 19:54:58 +000052#include "ipcshm.h"
plars865695b2001-08-27 22:15:12 +000053
54char *TCID = "shmdt02";
55int TST_TOTAL = 1;
plars865695b2001-08-27 22:15:12 +000056
subrata_modak56207ce2009-03-23 13:35:39 +000057int exp_enos[] = { EINVAL, 0 }; /* 0 terminated list of expected errnos */
plars865695b2001-08-27 22:15:12 +000058
robbiew23499f02002-11-18 19:54:58 +000059int main(int ac, char **av)
plars865695b2001-08-27 22:15:12 +000060{
Cyril Hrubis89af32a2012-10-24 16:39:11 +020061 int lc;
62 char *msg;
subrata_modak56207ce2009-03-23 13:35:39 +000063 int unshared; /* a local variable to use to produce *//* the error in the shmdt() call */
plars865695b2001-08-27 22:15:12 +000064
Garrett Cooper45e285d2010-11-22 12:19:25 -080065 if ((msg = parse_opts(ac, av, NULL, NULL)) != NULL) {
Garrett Cooper60fa8012010-11-22 13:50:58 -080066 tst_brkm(TBROK, NULL, "OPTION PARSING ERROR - %s", msg);
plars865695b2001-08-27 22:15:12 +000067 }
68
subrata_modak56207ce2009-03-23 13:35:39 +000069 setup(); /* global setup */
plars865695b2001-08-27 22:15:12 +000070
71 /* The following loop checks looping state if -i option given */
72
73 for (lc = 0; TEST_LOOPING(lc); lc++) {
Caspar Zhangd59a6592013-03-07 14:59:12 +080074 /* reset tst_count in case we are looping */
75 tst_count = 0;
plars865695b2001-08-27 22:15:12 +000076
77 /*
subrata_modak4bb656a2009-02-26 12:02:09 +000078 * make the call using the TEST() macro - attempt to
plars865695b2001-08-27 22:15:12 +000079 * remove an invalid shared memory address
80 */
subrata_modakbdbaec52009-02-26 12:14:51 +000081
plars865695b2001-08-27 22:15:12 +000082 TEST(shmdt(&unshared));
subrata_modakbdbaec52009-02-26 12:14:51 +000083
plars865695b2001-08-27 22:15:12 +000084 if (TEST_RETURN != -1) {
85 tst_brkm(TFAIL, cleanup, "call succeeded unexpectedly");
86 }
subrata_modakbdbaec52009-02-26 12:14:51 +000087
plars865695b2001-08-27 22:15:12 +000088 TEST_ERROR_LOG(TEST_ERRNO);
89
subrata_modak56207ce2009-03-23 13:35:39 +000090 switch (TEST_ERRNO) {
plars865695b2001-08-27 22:15:12 +000091 case EINVAL:
92 tst_resm(TPASS, "expected failure - errno = %d : %s",
93 TEST_ERRNO, strerror(TEST_ERRNO));
94 break;
95 default:
96 tst_resm(TFAIL, "call failed with an unexpected error "
97 "- %d : %s", TEST_ERRNO, strerror(TEST_ERRNO));
subrata_modak56207ce2009-03-23 13:35:39 +000098
plars865695b2001-08-27 22:15:12 +000099 }
100 }
101
102 cleanup();
103
Garrett Cooper7d0a4a52010-12-16 10:05:08 -0800104 tst_exit();
plars865695b2001-08-27 22:15:12 +0000105}
106
107/*
108 * setup() - performs all the ONE TIME setup for this test.
109 */
subrata_modak56207ce2009-03-23 13:35:39 +0000110void setup(void)
plars865695b2001-08-27 22:15:12 +0000111{
Garrett Cooper2c282152010-12-16 00:55:50 -0800112
plars865695b2001-08-27 22:15:12 +0000113 tst_sig(NOFORK, DEF_HANDLER, cleanup);
114
115 /* Set up the expected error numbers for -e option */
116 TEST_EXP_ENOS(exp_enos);
117
plars865695b2001-08-27 22:15:12 +0000118 TEST_PAUSE;
119}
120
121/*
122 * cleanup() - performs all the ONE TIME cleanup for this test at completion
123 * or premature exit.
124 */
subrata_modak56207ce2009-03-23 13:35:39 +0000125void cleanup(void)
plars865695b2001-08-27 22:15:12 +0000126{
127 /*
128 * print timing stats if that option was specified.
129 * print errno log if that option was specified.
130 */
131 TEST_CLEANUP;
132
Chris Dearmanec6edca2012-10-17 19:54:01 -0700133}