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