t_mkdirat.c revision 1.1
11.1Smanu/* $NetBSD: t_mkdirat.c,v 1.1 2012/11/18 17:41:54 manu Exp $ */ 21.1Smanu 31.1Smanu/*- 41.1Smanu * Copyright (c) 2012 The NetBSD Foundation, Inc. 51.1Smanu * All rights reserved. 61.1Smanu * 71.1Smanu * This code is derived from software contributed to The NetBSD Foundation 81.1Smanu * by Emmanuel Dreyfus. 91.1Smanu * 101.1Smanu * Redistribution and use in source and binary forms, with or without 111.1Smanu * modification, are permitted provided that the following conditions 121.1Smanu * are met: 131.1Smanu * 1. Redistributions of source code must retain the above copyright 141.1Smanu * notice, this list of conditions and the following disclaimer. 151.1Smanu * 2. Redistributions in binary form must reproduce the above copyright 161.1Smanu * notice, this list of conditions and the following disclaimer in the 171.1Smanu * documentation and/or other materials provided with the distribution. 181.1Smanu * 191.1Smanu * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 201.1Smanu * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 211.1Smanu * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 221.1Smanu * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 231.1Smanu * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 241.1Smanu * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 251.1Smanu * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 261.1Smanu * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 271.1Smanu * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 281.1Smanu * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 291.1Smanu * POSSIBILITY OF SUCH DAMAGE. 301.1Smanu */ 311.1Smanu#include <sys/cdefs.h> 321.1Smanu__RCSID("$NetBSD: t_mkdirat.c,v 1.1 2012/11/18 17:41:54 manu Exp $"); 331.1Smanu 341.1Smanu#include <atf-c.h> 351.1Smanu#include <errno.h> 361.1Smanu#include <fcntl.h> 371.1Smanu#include <limits.h> 381.1Smanu#include <paths.h> 391.1Smanu#include <stdio.h> 401.1Smanu#include <string.h> 411.1Smanu#include <unistd.h> 421.1Smanu#include <sys/param.h> 431.1Smanu#include <sys/stat.h> 441.1Smanu 451.1Smanu#define DIR "dir" 461.1Smanu#define SDIR "dir/openat" 471.1Smanu#define BASESDIR "openat" 481.1Smanu#define SDIRERR "dir/openaterr" 491.1Smanu 501.1SmanuATF_TC_WITH_CLEANUP(mkdirat_fd); 511.1SmanuATF_TC_HEAD(mkdirat_fd, tc) 521.1Smanu{ 531.1Smanu atf_tc_set_md_var(tc, "descr", "See that mkdirat works with fd"); 541.1Smanu} 551.1Smanu 561.1SmanuATF_TC_BODY(mkdirat_fd, tc) 571.1Smanu{ 581.1Smanu int dfd; 591.1Smanu mode_t mode = 0755; 601.1Smanu 611.1Smanu ATF_REQUIRE(mkdir(DIR, 0755) == 0); 621.1Smanu ATF_REQUIRE((dfd = open(DIR, O_RDONLY, 0)) != -1); 631.1Smanu ATF_REQUIRE(mkdirat(dfd, BASESDIR, mode) != -1); 641.1Smanu ATF_REQUIRE(close(dfd) == 0); 651.1Smanu ATF_REQUIRE(access(SDIR, F_OK) == 0); 661.1Smanu} 671.1Smanu 681.1SmanuATF_TC_CLEANUP(mkdirat_fd, tc) 691.1Smanu{ 701.1Smanu (void)unlink(SDIR); 711.1Smanu (void)unlink(SDIRERR); 721.1Smanu (void)rmdir(DIR); 731.1Smanu} 741.1Smanu 751.1Smanu 761.1SmanuATF_TC_WITH_CLEANUP(mkdirat_fdcwd); 771.1SmanuATF_TC_HEAD(mkdirat_fdcwd, tc) 781.1Smanu{ 791.1Smanu atf_tc_set_md_var(tc, "descr", 801.1Smanu "See that mkdirat works with fd as AT_FDCWD"); 811.1Smanu} 821.1Smanu 831.1SmanuATF_TC_BODY(mkdirat_fdcwd, tc) 841.1Smanu{ 851.1Smanu mode_t mode = 0755; 861.1Smanu 871.1Smanu ATF_REQUIRE(mkdir(DIR, 0755) == 0); 881.1Smanu ATF_REQUIRE(mkdirat(AT_FDCWD, SDIR, mode) != -1); 891.1Smanu ATF_REQUIRE(access(SDIR, F_OK) == 0); 901.1Smanu} 911.1Smanu 921.1SmanuATF_TC_CLEANUP(mkdirat_fdcwd, tc) 931.1Smanu{ 941.1Smanu (void)unlink(SDIR); 951.1Smanu (void)unlink(SDIRERR); 961.1Smanu (void)rmdir(DIR); 971.1Smanu} 981.1Smanu 991.1SmanuATF_TC_WITH_CLEANUP(mkdirat_fdcwderr); 1001.1SmanuATF_TC_HEAD(mkdirat_fdcwderr, tc) 1011.1Smanu{ 1021.1Smanu atf_tc_set_md_var(tc, "descr", 1031.1Smanu "See that mkdirat fails with fd as AT_FDCWD and bad path"); 1041.1Smanu} 1051.1Smanu 1061.1SmanuATF_TC_BODY(mkdirat_fdcwderr, tc) 1071.1Smanu{ 1081.1Smanu mode_t mode = 0755; 1091.1Smanu 1101.1Smanu ATF_REQUIRE(mkdirat(AT_FDCWD, SDIRERR, mode) == -1); 1111.1Smanu} 1121.1Smanu 1131.1SmanuATF_TC_CLEANUP(mkdirat_fdcwderr, tc) 1141.1Smanu{ 1151.1Smanu (void)unlink(SDIR); 1161.1Smanu (void)unlink(SDIRERR); 1171.1Smanu (void)rmdir(DIR); 1181.1Smanu} 1191.1Smanu 1201.1SmanuATF_TC_WITH_CLEANUP(mkdirat_fderr); 1211.1SmanuATF_TC_HEAD(mkdirat_fderr, tc) 1221.1Smanu{ 1231.1Smanu atf_tc_set_md_var(tc, "descr", "See that mkdirat fails with fd as -1"); 1241.1Smanu} 1251.1Smanu 1261.1SmanuATF_TC_BODY(mkdirat_fderr, tc) 1271.1Smanu{ 1281.1Smanu int fd; 1291.1Smanu mode_t mode = 0755; 1301.1Smanu 1311.1Smanu ATF_REQUIRE(mkdir(DIR, 0755) == 0); 1321.1Smanu ATF_REQUIRE((fd = open(SDIR, O_CREAT|O_RDWR, 0644)) != -1); 1331.1Smanu ATF_REQUIRE(close(fd) == 0); 1341.1Smanu ATF_REQUIRE(mkdirat(-1, SDIR, mode) == -1); 1351.1Smanu} 1361.1Smanu 1371.1SmanuATF_TC_CLEANUP(mkdirat_fderr, tc) 1381.1Smanu{ 1391.1Smanu (void)unlink(SDIR); 1401.1Smanu (void)unlink(SDIRERR); 1411.1Smanu (void)rmdir(DIR); 1421.1Smanu} 1431.1Smanu 1441.1Smanu 1451.1SmanuATF_TP_ADD_TCS(tp) 1461.1Smanu{ 1471.1Smanu 1481.1Smanu ATF_TP_ADD_TC(tp, mkdirat_fd); 1491.1Smanu ATF_TP_ADD_TC(tp, mkdirat_fdcwd); 1501.1Smanu ATF_TP_ADD_TC(tp, mkdirat_fdcwderr); 1511.1Smanu ATF_TP_ADD_TC(tp, mkdirat_fderr); 1521.1Smanu 1531.1Smanu return atf_no_error(); 1541.1Smanu} 155