1179055Sjfv/* $NetBSD: t_mkfifoat.c,v 1.4 2017/01/14 20:55:26 christos Exp $ */ 2171384Sjfv 3320897Serj/*- 4179055Sjfv * Copyright (c) 2012 The NetBSD Foundation, Inc. 5179055Sjfv * All rights reserved. 6179055Sjfv * 7179055Sjfv * This code is derived from software contributed to The NetBSD Foundation 8179055Sjfv * by Emmanuel Dreyfus. 9179055Sjfv * 10179055Sjfv * Redistribution and use in source and binary forms, with or without 11179055Sjfv * modification, are permitted provided that the following conditions 12179055Sjfv * are met: 13179055Sjfv * 1. Redistributions of source code must retain the above copyright 14179055Sjfv * notice, this list of conditions and the following disclaimer. 15179055Sjfv * 2. Redistributions in binary form must reproduce the above copyright 16179055Sjfv * notice, this list of conditions and the following disclaimer in the 17179055Sjfv * documentation and/or other materials provided with the distribution. 18179055Sjfv * 19179055Sjfv * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 20179055Sjfv * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 21179055Sjfv * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 22179055Sjfv * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 23179055Sjfv * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 24179055Sjfv * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 25179055Sjfv * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 26179055Sjfv * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 27179055Sjfv * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 28179055Sjfv * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 29179055Sjfv * POSSIBILITY OF SUCH DAMAGE. 30179055Sjfv */ 31171384Sjfv#include <sys/cdefs.h> 32179055Sjfv__RCSID("$NetBSD: t_mkfifoat.c,v 1.4 2017/01/14 20:55:26 christos Exp $"); 33179055Sjfv 34171384Sjfv#include <atf-c.h> 35320897Serj#include <errno.h> 36320897Serj#include <fcntl.h> 37171384Sjfv#include <limits.h> 38171384Sjfv#include <paths.h> 39171384Sjfv#include <stdio.h> 40230775Sjfv#include <string.h> 41171384Sjfv#include <unistd.h> 42171384Sjfv#include <sys/param.h> 43171384Sjfv#include <sys/stat.h> 44171384Sjfv 45171384Sjfv#define DIR "dir" 46171384Sjfv#define FIFO "dir/openat" 47171384Sjfv#define BASEFIFO "openat" 48171384Sjfv#define FIFOERR "dir/openaterr" 49171384Sjfv 50171384SjfvATF_TC(mkfifoat_fd); 51171384SjfvATF_TC_HEAD(mkfifoat_fd, tc) 52171384Sjfv{ 53171384Sjfv atf_tc_set_md_var(tc, "descr", "See that mkfifoat works with fd"); 54171384Sjfv} 55171384SjfvATF_TC_BODY(mkfifoat_fd, tc) 56171384Sjfv{ 57171384Sjfv int dfd; 58320897Serj mode_t mode = 0600; 59171384Sjfv 60294734Ssmh ATF_REQUIRE(mkdir(DIR, 0755) == 0); 61294734Ssmh ATF_REQUIRE((dfd = open(DIR, O_RDONLY, 0)) != -1); 62294734Ssmh ATF_REQUIRE(mkfifoat(dfd, BASEFIFO, mode) != -1); 63294734Ssmh ATF_REQUIRE(access(FIFO, F_OK) == 0); 64294734Ssmh (void)close(dfd); 65294734Ssmh} 66294734Ssmh 67294734SsmhATF_TC(mkfifoat_fdcwd); 68294734SsmhATF_TC_HEAD(mkfifoat_fdcwd, tc) 69171384Sjfv{ 70171384Sjfv atf_tc_set_md_var(tc, "descr", 71171384Sjfv "See that mkfifoat works with fd as AT_FDCWD"); 72171384Sjfv} 73292674SsbrunoATF_TC_BODY(mkfifoat_fdcwd, tc) 74171384Sjfv{ 75171384Sjfv mode_t mode = 0600; 76171384Sjfv 77171384Sjfv ATF_REQUIRE(mkdir(DIR, 0755) == 0); 78171384Sjfv ATF_REQUIRE(mkfifoat(AT_FDCWD, FIFO, mode) != -1); 79171384Sjfv ATF_REQUIRE(access(FIFO, F_OK) == 0); 80171384Sjfv} 81240466Seadler 82240466SeadlerATF_TC(mkfifoat_fdcwderr); 83240466SeadlerATF_TC_HEAD(mkfifoat_fdcwderr, tc) 84171384Sjfv{ 85294734Ssmh atf_tc_set_md_var(tc, "descr", 86294734Ssmh "See that mkfifoat fails with fd as AT_FDCWD and bad path"); 87294734Ssmh} 88294734SsmhATF_TC_BODY(mkfifoat_fdcwderr, tc) 89294734Ssmh{ 90294734Ssmh mode_t mode = 0600; 91294734Ssmh 92294734Ssmh ATF_REQUIRE(mkfifoat(AT_FDCWD, FIFOERR, mode) == -1); 93294734Ssmh} 94294734Ssmh 95294734SsmhATF_TC(mkfifoat_fderr); 96294734SsmhATF_TC_HEAD(mkfifoat_fderr, tc) 97294734Ssmh{ 98294734Ssmh atf_tc_set_md_var(tc, "descr", "See that mkfifoat fails with fd as -1"); 99294734Ssmh} 100294734SsmhATF_TC_BODY(mkfifoat_fderr, tc) 101294734Ssmh{ 102171384Sjfv int fd; 103171384Sjfv mode_t mode = 0600; 104171384Sjfv 105171384Sjfv ATF_REQUIRE(mkdir(DIR, 0755) == 0); 106171384Sjfv ATF_REQUIRE((fd = open(FIFO, O_CREAT|O_RDWR, 0644)) != -1); 107240466Seadler ATF_REQUIRE(close(fd) == 0); 108240466Seadler ATF_REQUIRE(mkfifoat(-1, FIFO, mode) == -1); 109171384Sjfv} 110171384Sjfv 111251964SjfvATF_TP_ADD_TCS(tp) 112251964Sjfv{ 113251964Sjfv 114251964Sjfv ATF_TP_ADD_TC(tp, mkfifoat_fd); 115171384Sjfv ATF_TP_ADD_TC(tp, mkfifoat_fdcwd); 116171384Sjfv ATF_TP_ADD_TC(tp, mkfifoat_fdcwderr); 117171384Sjfv ATF_TP_ADD_TC(tp, mkfifoat_fderr); 118185352Sjfv 119171384Sjfv return atf_no_error(); 120185352Sjfv} 121171384Sjfv