1 /*
2  * Copyright (c) 2006-2022, RT-Thread Development Team
3  *
4  * SPDX-License-Identifier: Apache-2.0
5  *
6  * Change Logs:
7  * Date           Author       Notes
8  * 2021-09-02     Meco Man     First version
9  */
10 
11 #ifndef __SYS_STAT_H__
12 #define __SYS_STAT_H__
13 
14 #include <sys/types.h>
15 #include <sys/time.h>
16 
17 #ifdef __cplusplus
18 extern "C" {
19 #endif
20 
21 #define S_IFMT               00170000
22 #define S_IFSOCK             0140000
23 #define S_IFLNK              0120000
24 #define S_IFREG              0100000
25 #define S_IFBLK              0060000
26 #define S_IFDIR              0040000
27 #define S_IFCHR              0020000
28 #define S_IFIFO              0010000
29 #define S_ISUID              0004000
30 #define S_ISGID              0002000
31 #define S_ISVTX              0001000
32 
33 #define S_ISLNK(m)           (((m) & S_IFMT) == S_IFLNK)
34 #define S_ISREG(m)           (((m) & S_IFMT) == S_IFREG)
35 #define S_ISDIR(m)           (((m) & S_IFMT) == S_IFDIR)
36 #define S_ISCHR(m)           (((m) & S_IFMT) == S_IFCHR)
37 #define S_ISBLK(m)           (((m) & S_IFMT) == S_IFBLK)
38 #define S_ISFIFO(m)          (((m) & S_IFMT) == S_IFIFO)
39 #define S_ISSOCK(m)          (((m) & S_IFMT) == S_IFSOCK)
40 
41 #define S_IRWXU              00700
42 #define S_IRUSR              00400
43 #define S_IWUSR              00200
44 #define S_IXUSR              00100
45 
46 #define S_IRWXG              00070
47 #define S_IRGRP              00040
48 #define S_IWGRP              00020
49 #define S_IXGRP              00010
50 
51 #define S_IRWXO              00007
52 #define S_IROTH              00004
53 #define S_IWOTH              00002
54 #define S_IXOTH              00001
55 
56 struct stat
57 {
58     dev_t st_dev;
59     uint16_t  st_ino;
60     uint16_t  st_mode;
61     uint16_t  st_nlink;
62     uint16_t  st_uid;
63     uint16_t  st_gid;
64     struct rt_device *st_rdev;
65     uint32_t  st_size;
66     time_t    st_atime;
67     long      st_spare1;
68     time_t    st_mtime;
69     long      st_spare2;
70     time_t    st_ctime;
71     long      st_spare3;
72     uint32_t  st_blksize;
73     uint32_t  st_blocks;
74     long      st_spare4[2];
75 };
76 
77 int    chmod(const char *, mode_t);
78 int    fchmod(int, mode_t);
79 int    fstat(int, struct stat *);
80 int    lstat(const char *, struct stat *);
81 int    mkdir(const char *, mode_t);
82 int    mkfifo(const char *, mode_t);
83 int    mknod(const char *, mode_t, dev_t);
84 int    stat(const char *, struct stat *);
85 mode_t umask(mode_t);
86 
87 #ifdef __cplusplus
88 }
89 #endif
90 
91 #endif
92