1 | /*
|
---|
2 | * Copyright 2002-2008, Haiku Inc. All Rights Reserved.
|
---|
3 | * Distributed under the terms of the MIT License.
|
---|
4 | */
|
---|
5 | #ifndef _SYS_STAT_H_
|
---|
6 | #define _SYS_STAT_H_
|
---|
7 |
|
---|
8 |
|
---|
9 | #include <sys/types.h>
|
---|
10 |
|
---|
11 |
|
---|
12 | struct stat {
|
---|
13 | dev_t st_dev; /* device ID that this file resides on */
|
---|
14 | ino_t st_ino; /* this file's serial inode ID */
|
---|
15 | mode_t st_mode; /* file mode (rwx for user, group, etc) */
|
---|
16 | nlink_t st_nlink; /* number of hard links to this file */
|
---|
17 | uid_t st_uid; /* user ID of the owner of this file */
|
---|
18 | gid_t st_gid; /* group ID of the owner of this file */
|
---|
19 | off_t st_size; /* size in bytes of this file */
|
---|
20 | dev_t st_rdev; /* device type (not used) */
|
---|
21 | blksize_t st_blksize; /* preferred block size for I/O */
|
---|
22 | struct timespec st_atim; /* last access time */
|
---|
23 | struct timespec st_mtim; /* last modification time */
|
---|
24 | struct timespec st_ctim; /* last change time, not creation time */
|
---|
25 | time_t st_crtime; /* creation time */
|
---|
26 | unsigned int st_type; /* attribute/index type */
|
---|
27 | blkcnt_t st_blocks; /* number of blocks allocated for object */
|
---|
28 | };
|
---|
29 |
|
---|
30 | #define st_atime st_atim.tv_sec
|
---|
31 | #define st_mtime st_mtim.tv_sec
|
---|
32 | #define st_ctime st_ctim.tv_sec
|
---|
33 |
|
---|
34 | /* extended file types */
|
---|
35 | #define S_ATTR_DIR 01000000000 /* attribute directory */
|
---|
36 | #define S_ATTR 02000000000 /* attribute */
|
---|
37 | #define S_INDEX_DIR 04000000000 /* index (or index directory) */
|
---|
38 | #define S_STR_INDEX 00100000000 /* string index */
|
---|
39 | #define S_INT_INDEX 00200000000 /* int32 index */
|
---|
40 | #define S_UINT_INDEX 00400000000 /* uint32 index */
|
---|
41 | #define S_LONG_LONG_INDEX 00010000000 /* int64 index */
|
---|
42 | #define S_ULONG_LONG_INDEX 00020000000 /* uint64 index */
|
---|
43 | #define S_FLOAT_INDEX 00040000000 /* float index */
|
---|
44 | #define S_DOUBLE_INDEX 00001000000 /* double index */
|
---|
45 | #define S_ALLOW_DUPS 00002000000 /* allow duplicate entries (currently unused) */
|
---|
46 |
|
---|
47 | /* link types */
|
---|
48 | #define S_LINK_SELF_HEALING 00001000000 /* link will be updated if you move its target */
|
---|
49 | #define S_LINK_AUTO_DELETE 00002000000 /* link will be deleted if you delete its target */
|
---|
50 |
|
---|
51 | /* standard file types */
|
---|
52 | #define S_IFMT 00000170000 /* type of file */
|
---|
53 | #define S_IFSOCK 00000140000 /* socket */
|
---|
54 | #define S_IFLNK 00000120000 /* symbolic link */
|
---|
55 | #define S_IFREG 00000100000 /* regular */
|
---|
56 | #define S_IFBLK 00000060000 /* block special */
|
---|
57 | #define S_IFDIR 00000040000 /* directory */
|
---|
58 | #define S_IFCHR 00000020000 /* character special */
|
---|
59 | #define S_IFIFO 00000010000 /* fifo */
|
---|
60 |
|
---|
61 | #define S_ISREG(mode) (((mode) & S_IFMT) == S_IFREG)
|
---|
62 | #define S_ISLNK(mode) (((mode) & S_IFMT) == S_IFLNK)
|
---|
63 | #define S_ISBLK(mode) (((mode) & S_IFMT) == S_IFBLK)
|
---|
64 | #define S_ISDIR(mode) (((mode) & S_IFMT) == S_IFDIR)
|
---|
65 | #define S_ISCHR(mode) (((mode) & S_IFMT) == S_IFCHR)
|
---|
66 | #define S_ISFIFO(mode) (((mode) & S_IFMT) == S_IFIFO)
|
---|
67 | #define S_ISSOCK(mode) (((mode) & S_IFMT) == S_IFSOCK)
|
---|
68 | #define S_ISINDEX(mode) (((mode) & S_INDEX_DIR) == S_INDEX_DIR)
|
---|
69 |
|
---|
70 | #define S_IUMSK 07777 /* user settable bits */
|
---|
71 |
|
---|
72 | #define S_ISUID 04000 /* set user id on execution */
|
---|
73 | #define S_ISGID 02000 /* set group id on execution */
|
---|
74 |
|
---|
75 | #define S_ISVTX 01000 /* save swapped text even after use (sticky bit) */
|
---|
76 |
|
---|
77 | #define S_IRWXU 00700 /* read, write, execute: owner */
|
---|
78 | #define S_IRUSR 00400 /* read permission: owner */
|
---|
79 | #define S_IWUSR 00200 /* write permission: owner */
|
---|
80 | #define S_IXUSR 00100 /* execute permission: owner */
|
---|
81 | #define S_IRWXG 00070 /* read, write, execute: group */
|
---|
82 | #define S_IRGRP 00040 /* read permission: group */
|
---|
83 | #define S_IWGRP 00020 /* write permission: group */
|
---|
84 | #define S_IXGRP 00010 /* execute permission: group */
|
---|
85 | #define S_IRWXO 00007 /* read, write, execute: other */
|
---|
86 | #define S_IROTH 00004 /* read permission: other */
|
---|
87 | #define S_IWOTH 00002 /* write permission: other */
|
---|
88 | #define S_IXOTH 00001 /* execute permission: other */
|
---|
89 |
|
---|
90 | /* BSD extensions */
|
---|
91 | #define S_IREAD S_IRUSR
|
---|
92 | #define S_IWRITE S_IWUSR
|
---|
93 | #define S_IEXEC S_IXUSR
|
---|
94 |
|
---|
95 | #define ACCESSPERMS (S_IRWXU | S_IRWXG | S_IRWXO)
|
---|
96 | #define ALLPERMS (S_ISUID | S_ISGID | S_ISVTX | S_IRWXU | S_IRWXG | S_IRWXO)
|
---|
97 | #define DEFFILEMODE (S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH)
|
---|
98 | /* default file mode, everyone can read/write */
|
---|
99 |
|
---|
100 | #ifdef __cplusplus
|
---|
101 | extern "C" {
|
---|
102 | #endif
|
---|
103 |
|
---|
104 | extern int chmod(const char *path, mode_t mode);
|
---|
105 | extern int fchmod(int fd, mode_t mode);
|
---|
106 | extern int stat(const char *path, struct stat *st);
|
---|
107 | extern int fstat(int fd, struct stat *st);
|
---|
108 | extern int lstat(const char *path, struct stat *st);
|
---|
109 | extern int mkdir(const char *path, mode_t mode);
|
---|
110 | extern int mkfifo(const char *path, mode_t mode);
|
---|
111 | extern mode_t umask(mode_t cmask);
|
---|
112 |
|
---|
113 | #ifdef __cplusplus
|
---|
114 | }
|
---|
115 | #endif
|
---|
116 |
|
---|
117 | #endif /* _SYS_STAT_H_ */
|
---|