xref: /freebsd/contrib/atf/atf-c/detail/fs.h (revision 0677dfd1)
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