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