1865695bbc89088b9526ea9045410e5afb70a985cplars/*
2865695bbc89088b9526ea9045410e5afb70a985cplars * Copyright (c) 2000 Silicon Graphics, Inc.  All Rights Reserved.
3865695bbc89088b9526ea9045410e5afb70a985cplars *
4865695bbc89088b9526ea9045410e5afb70a985cplars * This program is free software; you can redistribute it and/or modify it
5865695bbc89088b9526ea9045410e5afb70a985cplars * under the terms of version 2 of the GNU General Public License as
6865695bbc89088b9526ea9045410e5afb70a985cplars * published by the Free Software Foundation.
7865695bbc89088b9526ea9045410e5afb70a985cplars *
8865695bbc89088b9526ea9045410e5afb70a985cplars * This program is distributed in the hope that it would be useful, but
9865695bbc89088b9526ea9045410e5afb70a985cplars * WITHOUT ANY WARRANTY; without even the implied warranty of
10865695bbc89088b9526ea9045410e5afb70a985cplars * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
11865695bbc89088b9526ea9045410e5afb70a985cplars *
12865695bbc89088b9526ea9045410e5afb70a985cplars * Further, this software is distributed without any warranty that it is
13865695bbc89088b9526ea9045410e5afb70a985cplars * free of the rightful claim of any third person regarding infringement
14865695bbc89088b9526ea9045410e5afb70a985cplars * or the like.  Any license provided herein, whether implied or
15865695bbc89088b9526ea9045410e5afb70a985cplars * otherwise, applies only to this software file.  Patent licenses, if
16865695bbc89088b9526ea9045410e5afb70a985cplars * any, provided herein do not apply to combinations of this program with
17865695bbc89088b9526ea9045410e5afb70a985cplars * other software, or any other product whatsoever.
18865695bbc89088b9526ea9045410e5afb70a985cplars *
19865695bbc89088b9526ea9045410e5afb70a985cplars * You should have received a copy of the GNU General Public License along
20fed9641096e27f79a0f2d9adfe9839dd8d11dc0fWanlong Gao * with this program; if not, write the Free Software Foundation, Inc.,
21fed9641096e27f79a0f2d9adfe9839dd8d11dc0fWanlong Gao * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
22865695bbc89088b9526ea9045410e5afb70a985cplars *
23865695bbc89088b9526ea9045410e5afb70a985cplars * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
24865695bbc89088b9526ea9045410e5afb70a985cplars * Mountain View, CA  94043, or:
25865695bbc89088b9526ea9045410e5afb70a985cplars *
26865695bbc89088b9526ea9045410e5afb70a985cplars * http://www.sgi.com
27865695bbc89088b9526ea9045410e5afb70a985cplars *
28865695bbc89088b9526ea9045410e5afb70a985cplars * For further information regarding this notice, see:
29865695bbc89088b9526ea9045410e5afb70a985cplars *
30865695bbc89088b9526ea9045410e5afb70a985cplars * http://oss.sgi.com/projects/GenInfo/NoticeExplan/
31865695bbc89088b9526ea9045410e5afb70a985cplars *
32865695bbc89088b9526ea9045410e5afb70a985cplars */
33c7a4cfad9cab977a7f68479584f37e5f05351a4bShuang Qiu/*
34c7a4cfad9cab977a7f68479584f37e5f05351a4bShuang Qiu * DETAILED DESCRIPTION
35c7a4cfad9cab977a7f68479584f37e5f05351a4bShuang Qiu *   This is a Phase I test for the fstatfs(2) system call.  It is intended
36c7a4cfad9cab977a7f68479584f37e5f05351a4bShuang Qiu *   to provide a limited exposure of the system call, for now.  It
37c7a4cfad9cab977a7f68479584f37e5f05351a4bShuang Qiu *   should/will be extended when full functional tests are written for
38c7a4cfad9cab977a7f68479584f37e5f05351a4bShuang Qiu *   fstatfs(2).
39c7a4cfad9cab977a7f68479584f37e5f05351a4bShuang Qiu */
40865695bbc89088b9526ea9045410e5afb70a985cplars
41865695bbc89088b9526ea9045410e5afb70a985cplars#include <sys/types.h>
42a7fa8561a5a095faf6e202a80b0c7729be8bb82dSteven Jackson#include <fcntl.h>
43865695bbc89088b9526ea9045410e5afb70a985cplars#include <sys/statfs.h>
44865695bbc89088b9526ea9045410e5afb70a985cplars#include <errno.h>
45865695bbc89088b9526ea9045410e5afb70a985cplars#include <signal.h>
46865695bbc89088b9526ea9045410e5afb70a985cplars#include <string.h>
474d91ec5b9069bb5a97b961cc4cbe657c237509dfCyril Hrubis
48865695bbc89088b9526ea9045410e5afb70a985cplars#include "test.h"
494d91ec5b9069bb5a97b961cc4cbe657c237509dfCyril Hrubis#include "safe_macros.h"
50865695bbc89088b9526ea9045410e5afb70a985cplars
51c7a4cfad9cab977a7f68479584f37e5f05351a4bShuang Qiustatic void setup(void);
52c7a4cfad9cab977a7f68479584f37e5f05351a4bShuang Qiustatic void cleanup(void);
53865695bbc89088b9526ea9045410e5afb70a985cplars
54fdce7d5e2a219d201a2b0e3bab6b61b01ec1d716Cyril Hrubischar *TCID = "fstatfs01";
55865695bbc89088b9526ea9045410e5afb70a985cplars
564d91ec5b9069bb5a97b961cc4cbe657c237509dfCyril Hrubisstatic int file_fd;
574d91ec5b9069bb5a97b961cc4cbe657c237509dfCyril Hrubisstatic int pipe_fd;
584d91ec5b9069bb5a97b961cc4cbe657c237509dfCyril Hrubis
594d91ec5b9069bb5a97b961cc4cbe657c237509dfCyril Hrubisstatic struct tcase {
604d91ec5b9069bb5a97b961cc4cbe657c237509dfCyril Hrubis	int *fd;
614d91ec5b9069bb5a97b961cc4cbe657c237509dfCyril Hrubis	const char *msg;
624d91ec5b9069bb5a97b961cc4cbe657c237509dfCyril Hrubis} tcases[2] = {
634d91ec5b9069bb5a97b961cc4cbe657c237509dfCyril Hrubis	{&file_fd, "fstatfs() on a file"},
644d91ec5b9069bb5a97b961cc4cbe657c237509dfCyril Hrubis	{&pipe_fd, "fstatfs() on a pipe"},
654d91ec5b9069bb5a97b961cc4cbe657c237509dfCyril Hrubis};
664d91ec5b9069bb5a97b961cc4cbe657c237509dfCyril Hrubis
674d91ec5b9069bb5a97b961cc4cbe657c237509dfCyril Hrubisint TST_TOTAL = ARRAY_SIZE(tcases);
68865695bbc89088b9526ea9045410e5afb70a985cplars
6956207cec7732e09c216c751c0b5f88a242bacae6subrata_modakint main(int ac, char **av)
70865695bbc89088b9526ea9045410e5afb70a985cplars{
714d91ec5b9069bb5a97b961cc4cbe657c237509dfCyril Hrubis	int lc, i;
724d91ec5b9069bb5a97b961cc4cbe657c237509dfCyril Hrubis	struct statfs stats;
7356207cec7732e09c216c751c0b5f88a242bacae6subrata_modak
74d6d11d08678aac1ed2c370ea8e42e5f45aea07beCyril Hrubis	tst_parse_opts(ac, av, NULL, NULL);
75865695bbc89088b9526ea9045410e5afb70a985cplars
7656207cec7732e09c216c751c0b5f88a242bacae6subrata_modak	setup();
77865695bbc89088b9526ea9045410e5afb70a985cplars
7856207cec7732e09c216c751c0b5f88a242bacae6subrata_modak	for (lc = 0; TEST_LOOPING(lc); lc++) {
79d59a659cd639ca2780b00049d102acd2a783d585Caspar Zhang		tst_count = 0;
80865695bbc89088b9526ea9045410e5afb70a985cplars
814d91ec5b9069bb5a97b961cc4cbe657c237509dfCyril Hrubis		for (i = 0; i < TST_TOTAL; i++) {
824d91ec5b9069bb5a97b961cc4cbe657c237509dfCyril Hrubis			TEST(fstatfs(*tcases[i].fd, &stats));
8356207cec7732e09c216c751c0b5f88a242bacae6subrata_modak
844d91ec5b9069bb5a97b961cc4cbe657c237509dfCyril Hrubis			if (TEST_RETURN == -1) {
854d91ec5b9069bb5a97b961cc4cbe657c237509dfCyril Hrubis				tst_resm(TFAIL | TTERRNO, "%s", tcases[i].msg);
864d91ec5b9069bb5a97b961cc4cbe657c237509dfCyril Hrubis			} else {
874d91ec5b9069bb5a97b961cc4cbe657c237509dfCyril Hrubis				tst_resm(TPASS, "%s - f_type=%lx",
884d91ec5b9069bb5a97b961cc4cbe657c237509dfCyril Hrubis				         tcases[i].msg, stats.f_type);
894d91ec5b9069bb5a97b961cc4cbe657c237509dfCyril Hrubis			}
9056207cec7732e09c216c751c0b5f88a242bacae6subrata_modak		}
912c28215423293e443469a07ae7011135d058b671Garrett Cooper	}
92865695bbc89088b9526ea9045410e5afb70a985cplars
9356207cec7732e09c216c751c0b5f88a242bacae6subrata_modak	cleanup();
941569799abe4296fc5ca50ede305c1eb2ac482422Garrett Cooper	tst_exit();
952c28215423293e443469a07ae7011135d058b671Garrett Cooper}
96865695bbc89088b9526ea9045410e5afb70a985cplars
97c7a4cfad9cab977a7f68479584f37e5f05351a4bShuang Qiustatic void setup(void)
98865695bbc89088b9526ea9045410e5afb70a985cplars{
994d91ec5b9069bb5a97b961cc4cbe657c237509dfCyril Hrubis	int pipe[2];
1004d91ec5b9069bb5a97b961cc4cbe657c237509dfCyril Hrubis
10156207cec7732e09c216c751c0b5f88a242bacae6subrata_modak	tst_sig(NOFORK, DEF_HANDLER, cleanup);
102865695bbc89088b9526ea9045410e5afb70a985cplars
10356207cec7732e09c216c751c0b5f88a242bacae6subrata_modak	TEST_PAUSE;
104865695bbc89088b9526ea9045410e5afb70a985cplars
10556207cec7732e09c216c751c0b5f88a242bacae6subrata_modak	tst_tmpdir();
106865695bbc89088b9526ea9045410e5afb70a985cplars
1074d91ec5b9069bb5a97b961cc4cbe657c237509dfCyril Hrubis	file_fd = SAFE_OPEN(cleanup, "test_file", O_RDWR | O_CREAT, 0700);
1084d91ec5b9069bb5a97b961cc4cbe657c237509dfCyril Hrubis
1094d91ec5b9069bb5a97b961cc4cbe657c237509dfCyril Hrubis	SAFE_PIPE(cleanup, pipe);
1104d91ec5b9069bb5a97b961cc4cbe657c237509dfCyril Hrubis	pipe_fd = pipe[0];
1114d91ec5b9069bb5a97b961cc4cbe657c237509dfCyril Hrubis	SAFE_CLOSE(cleanup, pipe[1]);
1122c28215423293e443469a07ae7011135d058b671Garrett Cooper}
113865695bbc89088b9526ea9045410e5afb70a985cplars
114c7a4cfad9cab977a7f68479584f37e5f05351a4bShuang Qiustatic void cleanup(void)
115865695bbc89088b9526ea9045410e5afb70a985cplars{
1164d91ec5b9069bb5a97b961cc4cbe657c237509dfCyril Hrubis	if (file_fd > 0 && close(file_fd))
1174d91ec5b9069bb5a97b961cc4cbe657c237509dfCyril Hrubis		tst_resm(TWARN | TERRNO, "close(file_fd) failed");
1184d91ec5b9069bb5a97b961cc4cbe657c237509dfCyril Hrubis
1194d91ec5b9069bb5a97b961cc4cbe657c237509dfCyril Hrubis	if (pipe_fd > 0 && close(pipe_fd))
1204d91ec5b9069bb5a97b961cc4cbe657c237509dfCyril Hrubis		tst_resm(TWARN | TERRNO, "close(pipe_fd) failed");
12156207cec7732e09c216c751c0b5f88a242bacae6subrata_modak
12256207cec7732e09c216c751c0b5f88a242bacae6subrata_modak	tst_rmdir();
123ec6edca7aa42b6affd989ef91b5897f96795e40fChris Dearman}
124