1865695bbc89088b9526ea9045410e5afb70a985cplars/* 2865695bbc89088b9526ea9045410e5afb70a985cplars * Copyright (c) 2000 Silicon Graphics, Inc. All Rights Reserved. 3ac481d1b1591b98db5a77ccf1bec80b1562413c8Cyril Hrubis * Copyright (c) 2017 Cyril Hrubis <chrubis@suse.cz> 4865695bbc89088b9526ea9045410e5afb70a985cplars * 5865695bbc89088b9526ea9045410e5afb70a985cplars * This program is free software; you can redistribute it and/or modify it 6865695bbc89088b9526ea9045410e5afb70a985cplars * under the terms of version 2 of the GNU General Public License as 7865695bbc89088b9526ea9045410e5afb70a985cplars * published by the Free Software Foundation. 8865695bbc89088b9526ea9045410e5afb70a985cplars * 9865695bbc89088b9526ea9045410e5afb70a985cplars * This program is distributed in the hope that it would be useful, but 10865695bbc89088b9526ea9045410e5afb70a985cplars * WITHOUT ANY WARRANTY; without even the implied warranty of 11865695bbc89088b9526ea9045410e5afb70a985cplars * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 12865695bbc89088b9526ea9045410e5afb70a985cplars * 13865695bbc89088b9526ea9045410e5afb70a985cplars * Further, this software is distributed without any warranty that it is 14865695bbc89088b9526ea9045410e5afb70a985cplars * free of the rightful claim of any third person regarding infringement 15865695bbc89088b9526ea9045410e5afb70a985cplars * or the like. Any license provided herein, whether implied or 16865695bbc89088b9526ea9045410e5afb70a985cplars * otherwise, applies only to this software file. Patent licenses, if 17865695bbc89088b9526ea9045410e5afb70a985cplars * any, provided herein do not apply to combinations of this program with 18865695bbc89088b9526ea9045410e5afb70a985cplars * other software, or any other product whatsoever. 19865695bbc89088b9526ea9045410e5afb70a985cplars * 20865695bbc89088b9526ea9045410e5afb70a985cplars * You should have received a copy of the GNU General Public License along 21fed9641096e27f79a0f2d9adfe9839dd8d11dc0fWanlong Gao * with this program; if not, write the Free Software Foundation, Inc., 22fed9641096e27f79a0f2d9adfe9839dd8d11dc0fWanlong Gao * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 23865695bbc89088b9526ea9045410e5afb70a985cplars * 24865695bbc89088b9526ea9045410e5afb70a985cplars * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy, 25865695bbc89088b9526ea9045410e5afb70a985cplars * Mountain View, CA 94043, or: 26865695bbc89088b9526ea9045410e5afb70a985cplars * 27865695bbc89088b9526ea9045410e5afb70a985cplars * http://www.sgi.com 28865695bbc89088b9526ea9045410e5afb70a985cplars * 29865695bbc89088b9526ea9045410e5afb70a985cplars * For further information regarding this notice, see: 30865695bbc89088b9526ea9045410e5afb70a985cplars * 31865695bbc89088b9526ea9045410e5afb70a985cplars * http://oss.sgi.com/projects/GenInfo/NoticeExplan/ 32865695bbc89088b9526ea9045410e5afb70a985cplars * 33865695bbc89088b9526ea9045410e5afb70a985cplars */ 34ac481d1b1591b98db5a77ccf1bec80b1562413c8Cyril Hrubis /* 35ac481d1b1591b98db5a77ccf1bec80b1562413c8Cyril Hrubis * Basic test for fcntl(2) using F_GETFL argument. 36ac481d1b1591b98db5a77ccf1bec80b1562413c8Cyril Hrubis */ 37865695bbc89088b9526ea9045410e5afb70a985cplars#include <sys/types.h> 38ac481d1b1591b98db5a77ccf1bec80b1562413c8Cyril Hrubis#include <sys/stat.h> 39db63921767012310af15f29035a334e50486292cmridge#include <fcntl.h> 40db63921767012310af15f29035a334e50486292cmridge#include <unistd.h> 41865695bbc89088b9526ea9045410e5afb70a985cplars#include <errno.h> 42ac481d1b1591b98db5a77ccf1bec80b1562413c8Cyril Hrubis#include <stdio.h> 43865695bbc89088b9526ea9045410e5afb70a985cplars 44ac481d1b1591b98db5a77ccf1bec80b1562413c8Cyril Hrubis#include "tst_test.h" 45865695bbc89088b9526ea9045410e5afb70a985cplars 46ac481d1b1591b98db5a77ccf1bec80b1562413c8Cyril Hrubisstatic int fd; 47ac481d1b1591b98db5a77ccf1bec80b1562413c8Cyril Hrubisstatic char fname[255]; 48865695bbc89088b9526ea9045410e5afb70a985cplars 49ac481d1b1591b98db5a77ccf1bec80b1562413c8Cyril Hrubisstatic void verify_fcntl(void) 50865695bbc89088b9526ea9045410e5afb70a985cplars{ 51ac481d1b1591b98db5a77ccf1bec80b1562413c8Cyril Hrubis TEST(fcntl(fd, F_GETFL, 0)); 52865695bbc89088b9526ea9045410e5afb70a985cplars 53ac481d1b1591b98db5a77ccf1bec80b1562413c8Cyril Hrubis if (TEST_RETURN == -1) { 54ac481d1b1591b98db5a77ccf1bec80b1562413c8Cyril Hrubis tst_res(TFAIL | TTERRNO, "fcntl(%s, F_GETFL, 0) failed", 55ac481d1b1591b98db5a77ccf1bec80b1562413c8Cyril Hrubis fname); 56ac481d1b1591b98db5a77ccf1bec80b1562413c8Cyril Hrubis return; 57ac481d1b1591b98db5a77ccf1bec80b1562413c8Cyril Hrubis } 5856207cec7732e09c216c751c0b5f88a242bacae6subrata_modak 59ac481d1b1591b98db5a77ccf1bec80b1562413c8Cyril Hrubis if ((TEST_RETURN & O_ACCMODE) != O_RDWR) { 60ac481d1b1591b98db5a77ccf1bec80b1562413c8Cyril Hrubis tst_res(TFAIL, "fcntl(%s, F_GETFL, 0) returned wrong " 61ac481d1b1591b98db5a77ccf1bec80b1562413c8Cyril Hrubis "access mode %li, expected %i", fname, 62ac481d1b1591b98db5a77ccf1bec80b1562413c8Cyril Hrubis TEST_RETURN & O_ACCMODE, O_RDWR); 63ac481d1b1591b98db5a77ccf1bec80b1562413c8Cyril Hrubis return; 642c28215423293e443469a07ae7011135d058b671Garrett Cooper } 65865695bbc89088b9526ea9045410e5afb70a985cplars 66ac481d1b1591b98db5a77ccf1bec80b1562413c8Cyril Hrubis tst_res(TPASS, "fcntl(%s, F_GETFL, 0) returned %lx", 67ac481d1b1591b98db5a77ccf1bec80b1562413c8Cyril Hrubis fname, TEST_RETURN); 682c28215423293e443469a07ae7011135d058b671Garrett Cooper} 69865695bbc89088b9526ea9045410e5afb70a985cplars 70ac481d1b1591b98db5a77ccf1bec80b1562413c8Cyril Hrubisstatic void setup(void) 71865695bbc89088b9526ea9045410e5afb70a985cplars{ 72ac481d1b1591b98db5a77ccf1bec80b1562413c8Cyril Hrubis sprintf(fname, "fcntl04_%d", getpid()); 73ac481d1b1591b98db5a77ccf1bec80b1562413c8Cyril Hrubis fd = SAFE_OPEN(fname, O_RDWR | O_CREAT, 0700); 742c28215423293e443469a07ae7011135d058b671Garrett Cooper} 75865695bbc89088b9526ea9045410e5afb70a985cplars 76ac481d1b1591b98db5a77ccf1bec80b1562413c8Cyril Hrubisstatic void cleanup(void) 77865695bbc89088b9526ea9045410e5afb70a985cplars{ 78e1c49edf1e9a7de95250c6aa6b122723531934ecCyril Hrubis if (fd > 0) 79e1c49edf1e9a7de95250c6aa6b122723531934ecCyril Hrubis SAFE_CLOSE(fd); 80ec6edca7aa42b6affd989ef91b5897f96795e40fChris Dearman} 81ac481d1b1591b98db5a77ccf1bec80b1562413c8Cyril Hrubis 82ac481d1b1591b98db5a77ccf1bec80b1562413c8Cyril Hrubisstatic struct tst_test test = { 83ac481d1b1591b98db5a77ccf1bec80b1562413c8Cyril Hrubis .tid = "fcntl04", 84ac481d1b1591b98db5a77ccf1bec80b1562413c8Cyril Hrubis .needs_tmpdir = 1, 85ac481d1b1591b98db5a77ccf1bec80b1562413c8Cyril Hrubis .test_all = verify_fcntl, 86ac481d1b1591b98db5a77ccf1bec80b1562413c8Cyril Hrubis .setup = setup, 87ac481d1b1591b98db5a77ccf1bec80b1562413c8Cyril Hrubis .cleanup = cleanup, 88ac481d1b1591b98db5a77ccf1bec80b1562413c8Cyril Hrubis}; 89