1*0677dfd1SJulio Merino /* Copyright (c) 2008 The NetBSD Foundation, Inc. 2c243e490SMarcel Moolenaar * All rights reserved. 3c243e490SMarcel Moolenaar * 4c243e490SMarcel Moolenaar * Redistribution and use in source and binary forms, with or without 5c243e490SMarcel Moolenaar * modification, are permitted provided that the following conditions 6c243e490SMarcel Moolenaar * are met: 7c243e490SMarcel Moolenaar * 1. Redistributions of source code must retain the above copyright 8c243e490SMarcel Moolenaar * notice, this list of conditions and the following disclaimer. 9c243e490SMarcel Moolenaar * 2. Redistributions in binary form must reproduce the above copyright 10c243e490SMarcel Moolenaar * notice, this list of conditions and the following disclaimer in the 11c243e490SMarcel Moolenaar * documentation and/or other materials provided with the distribution. 12c243e490SMarcel Moolenaar * 13c243e490SMarcel Moolenaar * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND 14c243e490SMarcel Moolenaar * CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, 15c243e490SMarcel Moolenaar * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 16c243e490SMarcel Moolenaar * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 17c243e490SMarcel Moolenaar * IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS BE LIABLE FOR ANY 18c243e490SMarcel Moolenaar * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 19c243e490SMarcel Moolenaar * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE 20c243e490SMarcel Moolenaar * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 21c243e490SMarcel Moolenaar * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER 22c243e490SMarcel Moolenaar * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 23c243e490SMarcel Moolenaar * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN 24*0677dfd1SJulio Merino * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ 25c243e490SMarcel Moolenaar 26*0677dfd1SJulio Merino #if !defined(ATF_C_DETAIL_FS_H) 27*0677dfd1SJulio Merino #define ATF_C_DETAIL_FS_H 28c243e490SMarcel Moolenaar 29c243e490SMarcel Moolenaar #include <sys/types.h> 30c243e490SMarcel Moolenaar #include <sys/stat.h> 31c243e490SMarcel Moolenaar 32c243e490SMarcel Moolenaar #include <stdarg.h> 33c243e490SMarcel Moolenaar #include <stdbool.h> 34c243e490SMarcel Moolenaar 35*0677dfd1SJulio Merino #include <atf-c/detail/dynstr.h> 36c243e490SMarcel Moolenaar #include <atf-c/error_fwd.h> 37c243e490SMarcel Moolenaar 38c243e490SMarcel Moolenaar /* --------------------------------------------------------------------- 39c243e490SMarcel Moolenaar * The "atf_fs_path" type. 40c243e490SMarcel Moolenaar * --------------------------------------------------------------------- */ 41c243e490SMarcel Moolenaar 42c243e490SMarcel Moolenaar struct atf_fs_path { 43c243e490SMarcel Moolenaar atf_dynstr_t m_data; 44c243e490SMarcel Moolenaar }; 45c243e490SMarcel Moolenaar typedef struct atf_fs_path atf_fs_path_t; 46c243e490SMarcel Moolenaar 47c243e490SMarcel Moolenaar /* Constructors/destructors. */ 48c243e490SMarcel Moolenaar atf_error_t atf_fs_path_init_ap(atf_fs_path_t *, const char *, va_list); 49c243e490SMarcel Moolenaar atf_error_t atf_fs_path_init_fmt(atf_fs_path_t *, const char *, ...); 50c243e490SMarcel Moolenaar atf_error_t atf_fs_path_copy(atf_fs_path_t *, const atf_fs_path_t *); 51c243e490SMarcel Moolenaar void atf_fs_path_fini(atf_fs_path_t *); 52c243e490SMarcel Moolenaar 53c243e490SMarcel Moolenaar /* Getters. */ 54c243e490SMarcel Moolenaar atf_error_t atf_fs_path_branch_path(const atf_fs_path_t *, atf_fs_path_t *); 55c243e490SMarcel Moolenaar const char *atf_fs_path_cstring(const atf_fs_path_t *); 56c243e490SMarcel Moolenaar atf_error_t atf_fs_path_leaf_name(const atf_fs_path_t *, atf_dynstr_t *); 57c243e490SMarcel Moolenaar bool atf_fs_path_is_absolute(const atf_fs_path_t *); 58c243e490SMarcel Moolenaar bool atf_fs_path_is_root(const atf_fs_path_t *); 59c243e490SMarcel Moolenaar 60c243e490SMarcel Moolenaar /* Modifiers. */ 61c243e490SMarcel Moolenaar atf_error_t atf_fs_path_append_ap(atf_fs_path_t *, const char *, va_list); 62c243e490SMarcel Moolenaar atf_error_t atf_fs_path_append_fmt(atf_fs_path_t *, const char *, ...); 63c243e490SMarcel Moolenaar atf_error_t atf_fs_path_append_path(atf_fs_path_t *, const atf_fs_path_t *); 64c243e490SMarcel Moolenaar atf_error_t atf_fs_path_to_absolute(const atf_fs_path_t *, atf_fs_path_t *); 65c243e490SMarcel Moolenaar 66c243e490SMarcel Moolenaar /* Operators. */ 67c243e490SMarcel Moolenaar bool atf_equal_fs_path_fs_path(const atf_fs_path_t *, 68c243e490SMarcel Moolenaar const atf_fs_path_t *); 69c243e490SMarcel Moolenaar 70c243e490SMarcel Moolenaar /* --------------------------------------------------------------------- 71c243e490SMarcel Moolenaar * The "atf_fs_stat" type. 72c243e490SMarcel Moolenaar * --------------------------------------------------------------------- */ 73c243e490SMarcel Moolenaar 74c243e490SMarcel Moolenaar struct atf_fs_stat { 75c243e490SMarcel Moolenaar int m_type; 76c243e490SMarcel Moolenaar struct stat m_sb; 77c243e490SMarcel Moolenaar }; 78c243e490SMarcel Moolenaar typedef struct atf_fs_stat atf_fs_stat_t; 79c243e490SMarcel Moolenaar 80c243e490SMarcel Moolenaar /* Constants. */ 81c243e490SMarcel Moolenaar extern const int atf_fs_stat_blk_type; 82c243e490SMarcel Moolenaar extern const int atf_fs_stat_chr_type; 83c243e490SMarcel Moolenaar extern const int atf_fs_stat_dir_type; 84c243e490SMarcel Moolenaar extern const int atf_fs_stat_fifo_type; 85c243e490SMarcel Moolenaar extern const int atf_fs_stat_lnk_type; 86c243e490SMarcel Moolenaar extern const int atf_fs_stat_reg_type; 87c243e490SMarcel Moolenaar extern const int atf_fs_stat_sock_type; 88c243e490SMarcel Moolenaar extern const int atf_fs_stat_wht_type; 89c243e490SMarcel Moolenaar 90c243e490SMarcel Moolenaar /* Constructors/destructors. */ 91c243e490SMarcel Moolenaar atf_error_t atf_fs_stat_init(atf_fs_stat_t *, const atf_fs_path_t *); 92c243e490SMarcel Moolenaar void atf_fs_stat_copy(atf_fs_stat_t *, const atf_fs_stat_t *); 93c243e490SMarcel Moolenaar void atf_fs_stat_fini(atf_fs_stat_t *); 94c243e490SMarcel Moolenaar 95c243e490SMarcel Moolenaar /* Getters. */ 96c243e490SMarcel Moolenaar dev_t atf_fs_stat_get_device(const atf_fs_stat_t *); 97c243e490SMarcel Moolenaar ino_t atf_fs_stat_get_inode(const atf_fs_stat_t *); 98c243e490SMarcel Moolenaar mode_t atf_fs_stat_get_mode(const atf_fs_stat_t *); 99c243e490SMarcel Moolenaar off_t atf_fs_stat_get_size(const atf_fs_stat_t *); 100c243e490SMarcel Moolenaar int atf_fs_stat_get_type(const atf_fs_stat_t *); 101c243e490SMarcel Moolenaar bool atf_fs_stat_is_owner_readable(const atf_fs_stat_t *); 102c243e490SMarcel Moolenaar bool atf_fs_stat_is_owner_writable(const atf_fs_stat_t *); 103c243e490SMarcel Moolenaar bool atf_fs_stat_is_owner_executable(const atf_fs_stat_t *); 104c243e490SMarcel Moolenaar bool atf_fs_stat_is_group_readable(const atf_fs_stat_t *); 105c243e490SMarcel Moolenaar bool atf_fs_stat_is_group_writable(const atf_fs_stat_t *); 106c243e490SMarcel Moolenaar bool atf_fs_stat_is_group_executable(const atf_fs_stat_t *); 107c243e490SMarcel Moolenaar bool atf_fs_stat_is_other_readable(const atf_fs_stat_t *); 108c243e490SMarcel Moolenaar bool atf_fs_stat_is_other_writable(const atf_fs_stat_t *); 109c243e490SMarcel Moolenaar bool atf_fs_stat_is_other_executable(const atf_fs_stat_t *); 110c243e490SMarcel Moolenaar 111c243e490SMarcel Moolenaar /* --------------------------------------------------------------------- 112c243e490SMarcel Moolenaar * Free functions. 113c243e490SMarcel Moolenaar * --------------------------------------------------------------------- */ 114c243e490SMarcel Moolenaar 115c243e490SMarcel Moolenaar extern const int atf_fs_access_f; 116c243e490SMarcel Moolenaar extern const int atf_fs_access_r; 117c243e490SMarcel Moolenaar extern const int atf_fs_access_w; 118c243e490SMarcel Moolenaar extern const int atf_fs_access_x; 119c243e490SMarcel Moolenaar 120c243e490SMarcel Moolenaar atf_error_t atf_fs_eaccess(const atf_fs_path_t *, int); 121c243e490SMarcel Moolenaar atf_error_t atf_fs_exists(const atf_fs_path_t *, bool *); 122c243e490SMarcel Moolenaar atf_error_t atf_fs_getcwd(atf_fs_path_t *); 123c243e490SMarcel Moolenaar atf_error_t atf_fs_mkdtemp(atf_fs_path_t *); 124c243e490SMarcel Moolenaar atf_error_t atf_fs_mkstemp(atf_fs_path_t *, int *); 125c243e490SMarcel Moolenaar atf_error_t atf_fs_rmdir(const atf_fs_path_t *); 126c243e490SMarcel Moolenaar atf_error_t atf_fs_unlink(const atf_fs_path_t *); 127c243e490SMarcel Moolenaar 128*0677dfd1SJulio Merino #endif /* !defined(ATF_C_DETAIL_FS_H) */ 129