VSF Documented
stat.h
Go to the documentation of this file.
1#ifndef __VSF_LINUX_SYS_STAT_H__
2#define __VSF_LINUX_SYS_STAT_H__
3
5
6#if VSF_LINUX_CFG_RELATIVE_PATH == ENABLED
7# include "../sys/types.h"
8# include "../simple_libc/time.h"
9#else
10# include <sys/types.h>
11# include <time.h>
12#endif
13
14// for fs constants
16
17#ifdef __cplusplus
18extern "C" {
19#endif
20
21#if VSF_LINUX_CFG_WRAPPER == ENABLED
22#define stat VSF_LINUX_WRAPPER(stat)
23#define lstat VSF_LINUX_WRAPPER(lstat)
24#define fstat VSF_LINUX_WRAPPER(fstat)
25#define fstatat VSF_LINUX_WRAPPER(fstatat)
26#define umask VSF_LINUX_WRAPPER(umask)
27#define chmod VSF_LINUX_WRAPPER(chmod)
28#define fchmod VSF_LINUX_WRAPPER(fchmod)
29#define futimens VSF_LINUX_WRAPPER(futimens)
30#define utimensat VSF_LINUX_WRAPPER(utimensat)
31#define mkdir VSF_LINUX_WRAPPER(mkdir)
32#define mkfifo VSF_LINUX_WRAPPER(mkfifo)
33#define mkfifoat VSF_LINUX_WRAPPER(mkfifoat)
34#define mknod VSF_LINUX_WRAPPER(mknod)
35#define mknodat VSF_LINUX_WRAPPER(mknodat)
36#endif
37
38// syscalls
39
40#define __NR_stat stat
41#define __NR_fstat fstat
42#define __NR_fstatat fstatat
43#define __NR_umask umask
44#define __NR_chmod chmod
45#define __NR_fchmod fchmod
46#define __NR_fchmodat fchmodat
47#define __NR_futimesat futimesat
48#define __NR_utimensat utimensat
49
50// TODO: assert extension attr is fit in vk_file_attr_t
51#define VSF_FILE_ATTR_CHR (VSF_FILE_ATTR_USER << 0)
52#define VSF_FILE_ATTR_BLK (VSF_FILE_ATTR_USER << 1)
53#define VSF_FILE_ATTR_EXCL (VSF_FILE_ATTR_USER << 3)
54#define VSF_FILE_ATTR_SOCK (VSF_FILE_ATTR_USER << 4)
55#define VSF_FILE_ATTR_TTY (VSF_FILE_ATTR_USER << 5)
56#define VSF_FILE_ATTR_FIFO (VSF_FILE_ATTR_USER << 6)
57// internal use, indicating priv of sfd is shared, do not free
58// normally, vsf_linux_fs_bind_fdpriv is used to do binding for __VSF_FILE_ATTR_SHARE_PRIV
59#define __VSF_FILE_ATTR_SHARE_PRIV (VSF_FILE_ATTR_USER << 16)
60
61#define UTIME_NOW ((1l << 30) - 1l)
62#define UTIME_OMIT ((1l << 30) - 2l)
63
64#define S_IFDIR 0040000
65#define S_IFREG 0100000
66#define S_IFLNK 0120000
67#define S_IFIFO 0010000
68#define S_IFCHR 0020000
69#define S_IFSOCK 0140000
70#define S_IFBLK 0060000
71#define S_IFMT 0170000
72
73#define __S_IR 04
74#define __S_IW 02
75#define __S_IX 01
76#define S_IROTH (__S_IR << 0)
77#define S_IWOTH (__S_IW << 0)
78#define S_IXOTH (__S_IX << 0)
79#define S_IRWXO (S_IROTH | S_IWOTH | S_IXOTH)
80#define S_IRGRP (__S_IR << 3)
81#define S_IWGRP (__S_IW << 3)
82#define S_IXGRP (__S_IX << 3)
83#define S_IRWXG (S_IRGRP | S_IWGRP | S_IXGRP)
84#define S_IRUSR (__S_IR << 6)
85#define S_IWUSR (__S_IW << 6)
86#define S_IXUSR (__S_IX << 6)
87#define S_IRWXU (S_IRUSR | S_IWUSR | S_IXUSR)
88
89#define S_IREAD S_IRUSR
90#define S_IWRITE S_IWUSR
91#define S_IEXEC S_IXUSR
92
93// protection bits
94#define S_ISUID 0004000
95#define S_ISGID 0002000
96#define S_ISVTX 0001000
97
98#define S_ISLNK(__MODE) (((__MODE) & S_IFMT) == S_IFLNK)
99#define S_ISREG(__MODE) (((__MODE) & S_IFMT) == S_IFREG)
100#define S_ISDIR(__MODE) (((__MODE) & S_IFMT) == S_IFDIR)
101#define S_ISFIFO(__MODE) (((__MODE) & S_IFMT) == S_IFIFO)
102#define S_ISSOCK(__MODE) (((__MODE) & S_IFMT) == S_IFSOCK)
103#define S_ISCHR(__MODE) (((__MODE) & S_IFMT) == S_IFCHR)
104#define S_ISBLK(__MODE) (((__MODE) & S_IFMT) == S_IFBLK)
105
106// struct stat is actually stat64
107struct stat {
119
123#define st_atime st_atim.tv_sec
124#define st_mtime st_mtim.tv_sec
125#define st_ctime st_ctim.tv_sec
126};
127
128struct stat64 {
140
144#define st_atime st_atim.tv_sec
145#define st_mtime st_mtim.tv_sec
146#define st_ctime st_ctim.tv_sec
147};
148
149#if VSF_LINUX_APPLET_USE_SYS_STAT == ENABLED
152
168# ifndef __VSF_APPLET__
170# endif
171#endif
172
173#if defined(__VSF_APPLET__) && (defined(__VSF_APPLET_LIB__) || defined(__VSF_APPLET_LINUX_SYS_STAT_LIB__))\
174 && VSF_APPLET_CFG_ABI_PATCH != ENABLED && VSF_LINUX_APPLET_USE_SYS_STAT == ENABLED
175
176#ifndef VSF_LINUX_APPLET_SYS_STAT_VPLT
177# if VSF_LINUX_USE_APPLET == ENABLED
178# define VSF_LINUX_APPLET_SYS_STAT_VPLT \
179 ((vsf_linux_sys_stat_vplt_t *)(VSF_LINUX_APPLET_VPLT->sys_stat_vplt))
180# else
181# define VSF_LINUX_APPLET_SYS_STAT_VPLT \
182 ((vsf_linux_sys_stat_vplt_t *)vsf_vplt((void *)0))
183# endif
184#endif
185
186#define VSF_LINUX_APPLET_SYS_STAT_ENTRY(__NAME) \
187 VSF_APPLET_VPLT_ENTRY_FUNC_ENTRY(VSF_LINUX_APPLET_SYS_STAT_VPLT, __NAME)
188#define VSF_LINUX_APPLET_SYS_STAT_IMP(...) \
189 VSF_APPLET_VPLT_ENTRY_FUNC_IMP(VSF_LINUX_APPLET_SYS_STAT_VPLT, __VA_ARGS__)
190
191VSF_LINUX_APPLET_SYS_STAT_IMP(umask, mode_t, mode_t mask) {
193 return VSF_LINUX_APPLET_SYS_STAT_ENTRY(umask)(mask);
194}
195VSF_LINUX_APPLET_SYS_STAT_IMP(stat, int, const char *pathname, struct stat *buf) {
197 return VSF_LINUX_APPLET_SYS_STAT_ENTRY(stat)(pathname, buf);
198}
199VSF_LINUX_APPLET_SYS_STAT_IMP(lstat, int, const char *pathname, struct stat *buf) {
201 return VSF_LINUX_APPLET_SYS_STAT_ENTRY(lstat)(pathname, buf);
202}
203VSF_LINUX_APPLET_SYS_STAT_IMP(fstat, int, int fd, struct stat *buf) {
205 return VSF_LINUX_APPLET_SYS_STAT_ENTRY(fstat)(fd, buf);
206}
207VSF_LINUX_APPLET_SYS_STAT_IMP(fstatat, int, int dirfd, const char *pathname, struct stat *buf, int flags) {
209 return VSF_LINUX_APPLET_SYS_STAT_ENTRY(fstatat)(dirfd, pathname, buf, flags);
210}
211VSF_LINUX_APPLET_SYS_STAT_IMP(chmod, int, const char *pathname, mode_t mode) {
213 return VSF_LINUX_APPLET_SYS_STAT_ENTRY(chmod)(pathname, mode);
214}
215VSF_LINUX_APPLET_SYS_STAT_IMP(fchmod, int, int fd, mode_t mode) {
217 return VSF_LINUX_APPLET_SYS_STAT_ENTRY(fchmod)(fd, mode);
218}
219VSF_LINUX_APPLET_SYS_STAT_IMP(mkdir, int, const char *pathname, mode_t mode) {
221 return VSF_LINUX_APPLET_SYS_STAT_ENTRY(mkdir)(pathname, mode);
222}
223VSF_LINUX_APPLET_SYS_STAT_IMP(mkfifo, int, const char *pathname, mode_t mode) {
225 return VSF_LINUX_APPLET_SYS_STAT_ENTRY(mkfifo)(pathname, mode);
226}
227VSF_LINUX_APPLET_SYS_STAT_IMP(mkfifoat, int, int dirfd, const char *pathname, mode_t mode) {
229 return VSF_LINUX_APPLET_SYS_STAT_ENTRY(mkfifoat)(dirfd, pathname, mode);
230}
231VSF_LINUX_APPLET_SYS_STAT_IMP(mknod, int, const char *pathname, mode_t mode, dev_t dev) {
233 return VSF_LINUX_APPLET_SYS_STAT_ENTRY(mknod)(pathname, mode, dev);
234}
235VSF_LINUX_APPLET_SYS_STAT_IMP(mknodat, int, int dirfd, const char *pathname, mode_t mode, dev_t dev) {
237 return VSF_LINUX_APPLET_SYS_STAT_ENTRY(mknodat)(dirfd, pathname, mode, dev);
238}
239VSF_LINUX_APPLET_SYS_STAT_IMP(futimens, int, int fd, const struct timespec times[2]) {
241 return VSF_LINUX_APPLET_SYS_STAT_ENTRY(futimens)(fd, times);
242}
243VSF_LINUX_APPLET_SYS_STAT_IMP(utimensat, int, int dirfd, const char *pathname, const struct timespec times[2], int flags) {
245 return VSF_LINUX_APPLET_SYS_STAT_ENTRY(utimensat)(dirfd, pathname, times, flags);
246}
247
248#else // __VSF_APPLET__ && VSF_LINUX_APPLET_USE_SYS_STAT
249
250mode_t umask(mode_t mask);
251int stat(const char *pathname, struct stat *buf);
252int lstat(const char *pathname, struct stat *buf);
253int fstat(int fd, struct stat *buf);
254int fstatat(int dirfd, const char *pathname, struct stat *buf, int flags);
255int futimens(int fd, const struct timespec times[2]);
256int utimensat(int dirfd, const char *pathname, const struct timespec times[2], int flags);
257int chmod(const char *pathname, mode_t mode);
258int fchmod(int fd, mode_t mode);
259int mkdir(const char *pathname, mode_t mode);
260int mkfifo(const char *pathname, mode_t mode);
261int mkfifoat(int dirfd, const char *pathname, mode_t mode);
262int mknod(const char *pathname, mode_t mode, dev_t dev);
263int mknodat(int dirfd, const char *pathname, mode_t mode, dev_t dev);
264
265#endif // __VSF_APPLET__ && VSF_LINUX_APPLET_USE_SYS_STAT
266
267static inline int stat64(const char *pathname, struct stat64 *buf)
268{
269 return stat(pathname, (struct stat *)buf);
270}
271static inline int lstat64(const char *pathname, struct stat64 *buf)
272{
273 return lstat(pathname, (struct stat *)buf);
274}
275static inline int fstat64(int fd, struct stat64 *buf)
276{
277 return fstat(fd, (struct stat *)buf);
278}
279
280#ifdef __cplusplus
281}
282#endif
283
284#endif
unsigned long long ino64_t
Definition types.h:108
unsigned int blksiz_t
Definition types.h:109
unsigned long long blkcnt64_t
Definition types.h:111
unsigned int uid_t
Definition types.h:98
unsigned int gid_t
Definition types.h:99
long long off64_t
Definition types.h:105
unsigned long dev_t
Definition types.h:106
unsigned int mode_t
Definition types.h:95
unsigned int nlink_t
Definition types.h:97
#define mknodat
Definition stat.h:35
#define stat
Definition stat.h:22
#define mkdir
Definition stat.h:31
#define chmod
Definition stat.h:27
#define fchmod
Definition stat.h:28
#define mkfifo
Definition stat.h:32
#define mkfifoat
Definition stat.h:33
__VSF_VPLT_DECORATOR__ vsf_linux_sys_stat_vplt_t vsf_linux_sys_stat_vplt
Definition vsf_linux_fs.c:3710
#define fstatat
Definition stat.h:25
#define mknod
Definition stat.h:34
#define futimens
Definition stat.h:29
#define fstat
Definition stat.h:24
#define umask
Definition stat.h:26
#define lstat
Definition stat.h:23
#define utimensat
Definition stat.h:30
Definition stat.h:128
mode_t st_mode
Definition stat.h:132
ino64_t st_ino
Definition stat.h:131
gid_t st_gid
Definition stat.h:135
nlink_t st_nlink
Definition stat.h:133
dev_t st_dev
Definition stat.h:129
off64_t st_size
Definition stat.h:136
struct timespec st_ctim
Definition stat.h:143
dev_t st_rdev
Definition stat.h:130
mode_t st_attr
Definition stat.h:139
struct timespec st_mtim
Definition stat.h:142
blksiz_t st_blksize
Definition stat.h:137
uid_t st_uid
Definition stat.h:134
blkcnt64_t st_blocks
Definition stat.h:138
struct timespec st_atim
Definition stat.h:141
Definition stat.h:107
nlink_t st_nlink
Definition stat.h:112
ino64_t st_ino
Definition stat.h:110
blkcnt64_t st_blocks
Definition stat.h:117
uid_t st_uid
Definition stat.h:113
mode_t st_mode
Definition stat.h:111
struct timespec st_mtim
Definition stat.h:121
struct timespec st_atim
Definition stat.h:120
struct timespec st_ctim
Definition stat.h:122
dev_t st_rdev
Definition stat.h:109
mode_t st_attr
Definition stat.h:118
gid_t st_gid
Definition stat.h:114
off64_t st_size
Definition stat.h:115
dev_t st_dev
Definition stat.h:108
blksiz_t st_blksize
Definition stat.h:116
Definition time.h:67
Definition stat.h:150
VSF_APPLET_VPLT_ENTRY_FUNC_DEF(mknodat)
VSF_APPLET_VPLT_ENTRY_FUNC_DEF(fstatat)
VSF_APPLET_VPLT_ENTRY_FUNC_DEF(fchmod)
VSF_APPLET_VPLT_ENTRY_FUNC_DEF(utimensat)
vsf_vplt_info_t info
Definition stat.h:151
VSF_APPLET_VPLT_ENTRY_FUNC_DEF(futimens)
VSF_APPLET_VPLT_ENTRY_FUNC_DEF(mkfifoat)
VSF_APPLET_VPLT_ENTRY_FUNC_DEF(mkfifo)
#define times
Definition times.h:18
Definition vsf_cfg.h:95
#define __VSF_VPLT_DECORATOR__
Definition vsf_cfg.h:93
#define VSF_APPLET_VPLT_ENTRY_FUNC_TRACE()
Definition vsf_cfg.h:165
Generated from commit: vsfteam/vsf@1c19fdc