1 /* 2 * Copyright (c) International Business Machines Corp., 2002 3 * Copyright (c) 2013 Wanlong Gao <gaowanlong (at) cn.fujitsu.com> 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 17 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 18 */ 19 20 /* 21 * Description: 22 * 1. open an O_WRONLY file, test if read failed. 23 * 2. open an O_RDONLY file, test if write failed. 24 */ 25 26 #include <sys/types.h> 27 #include <sys/stat.h> 28 #include <stdio.h> 29 #include <fcntl.h> 30 #include "test.h" 31 32 char *TCID = "open09"; 33 int TST_TOTAL = 2; 34 35 #define PASSED 1 36 #define FAILED 0 37 38 static char tempfile[40] = ""; 39 40 static void setup(void); 41 static void cleanup(void); 42 43 int main(int ac, char *av[]) 44 { 45 int fildes; 46 int ret = 0; 47 char pbuf[BUFSIZ]; 48 49 int lc; 50 51 tst_parse_opts(ac, av, NULL, NULL); 52 53 setup(); 54 55 for (lc = 0; TEST_LOOPING(lc); lc++) { 56 57 fildes = open(tempfile, O_WRONLY); 58 if (fildes == -1) 59 tst_brkm(TFAIL, cleanup, "\t\t\topen failed"); 60 61 ret = read(fildes, pbuf, 1); 62 if (ret != -1) 63 tst_resm(TFAIL, "read should not succeed"); 64 else 65 tst_resm(TPASS, "Test passed in O_WRONLY."); 66 67 close(fildes); 68 69 fildes = open(tempfile, O_RDONLY); 70 if (fildes == -1) { 71 tst_resm(TFAIL, "\t\t\topen failed"); 72 } else { 73 ret = write(fildes, pbuf, 1); 74 if (ret != -1) 75 tst_resm(TFAIL, "write should not succeed"); 76 else 77 tst_resm(TPASS, "Test passed in O_RDONLY."); 78 } 79 close(fildes); 80 } 81 82 cleanup(); 83 tst_exit(); 84 } 85 86 static void setup(void) 87 { 88 int fildes; 89 90 tst_sig(NOFORK, DEF_HANDLER, cleanup); 91 TEST_PAUSE; 92 tst_tmpdir(); 93 94 sprintf(tempfile, "open09.%d", getpid()); 95 96 fildes = creat(tempfile, 0600); 97 if (fildes == -1) { 98 tst_brkm(TBROK, cleanup, "\t\t\tcan't create '%s'", 99 tempfile); 100 } else { 101 close(fildes); 102 } 103 } 104 105 static void cleanup(void) 106 { 107 unlink(tempfile); 108 tst_rmdir(); 109 } 110