OLD | NEW |
| (Empty) |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | |
2 // Use of this source code is governed by a BSD-style license that can be | |
3 // found in the LICENSE file. | |
4 | |
5 // Partial <sys/stat.h>-lookalike-ish. Note that this is a C header, so that | |
6 // crappy (and non-crappy) C programs can use it. | |
7 // | |
8 // In general, functions/types/macros are given "mojio_"/"MOJIO_"/etc. prefixes. | |
9 // There are a handful of exceptions (noted below). | |
10 | |
11 #ifndef MOJO_SERVICES_FILES_PUBLIC_C_MOJIO_SYS_STAT_H_ | |
12 #define MOJO_SERVICES_FILES_PUBLIC_C_MOJIO_SYS_STAT_H_ | |
13 | |
14 // Includes -------------------------------------------------------------------- | |
15 | |
16 // <sys/stat.h> is required to define a large number of types defined in | |
17 // <sys/types.h>, so we just include our equivalent of the latter. | |
18 #include "files/public/c/mojio_sys_types.h" | |
19 | |
20 // We need our |struct timespec| equivalent. | |
21 #include "files/public/c/mojio_time.h" | |
22 | |
23 // Macros ---------------------------------------------------------------------- | |
24 | |
25 #define MOJIO_S_IRWXU (MOJIO_S_IRUSR | MOJIO_S_IWUSR | MOJIO_S_IXUSR) | |
26 #define MOJIO_S_IRUSR 00400 | |
27 #define MOJIO_S_IWUSR 00200 | |
28 #define MOJIO_S_IXUSR 00100 | |
29 | |
30 #define MOJIO_S_IRWXG (MOJIO_S_IRGRP | MOJIO_S_IWGRP | MOJIO_S_IXGRP) | |
31 #define MOJIO_S_IRGRP 00040 | |
32 #define MOJIO_S_IWGRP 00020 | |
33 #define MOJIO_S_IXGRP 00010 | |
34 | |
35 #define MOJIO_S_IRWXO (MOJIO_S_IROTH | MOJIO_S_IWOTH | MOJIO_S_IXOTH) | |
36 #define MOJIO_S_IROTH 00004 | |
37 #define MOJIO_S_IWOTH 00002 | |
38 #define MOJIO_S_IXOTH 00001 | |
39 | |
40 #define MOJIO_S_ISUID 04000 | |
41 #define MOJIO_S_ISGID 02000 | |
42 #define MOJIO_S_ISVTX 01000 | |
43 | |
44 // Mask for the values below. | |
45 #define MOJIO_S_IFMT 0170000 | |
46 // These values are mysterious, but are the standard values on Linux. | |
47 #define MOJIO_S_IFBLK 0060000 | |
48 #define MOJIO_S_IFCHR 0020000 | |
49 #define MOJIO_S_IFDIR 0040000 | |
50 #define MOJIO_S_IFIFO 0010000 | |
51 #define MOJIO_S_IFLNK 0120000 | |
52 #define MOJIO_S_IFREG 0100000 | |
53 #define MOJIO_S_IFSOCK 0140000 | |
54 | |
55 #define MOJIO_S_ISBLK(mode) (((mode)&MOJIO_S_IFMT) == MOJIO_S_IFBLK) | |
56 #define MOJIO_S_ISCHR(mode) (((mode)&MOJIO_S_IFMT) == MOJIO_S_IFCHR) | |
57 #define MOJIO_S_ISDIR(mode) (((mode)&MOJIO_S_IFMT) == MOJIO_S_IFDIR) | |
58 #define MOJIO_S_ISFIFO(mode) (((mode)&MOJIO_S_IFMT) == MOJIO_S_IFIFO) | |
59 #define MOJIO_S_ISLNK(mode) (((mode)&MOJIO_S_IFMT) == MOJIO_S_IFLNK) | |
60 #define MOJIO_S_ISREG(mode) (((mode)&MOJIO_S_IFMT) == MOJIO_S_IFREG) | |
61 #define MOJIO_S_ISSOCK(mode) (((mode)&MOJIO_S_IFMT) == MOJIO_S_IFSOCK) | |
62 | |
63 // POSIX.1-2008 says we should define |st_atime| to |st_atim.tv_sec| (and | |
64 // similarly for |st_mtime| and |st_ctime|). This is to provide (source) | |
65 // backwards compatibility with older versions of POSIX. | |
66 // | |
67 // We could reasonably provide these macros on systems that are compliant with | |
68 // POSIX.1-2008 (or later): even though they might collide with macro | |
69 // definitions in the "real" <sys/stat.h>, it's okay since the macro definitions | |
70 // will be identical. However, providing these macros on systems that aren't | |
71 // POSIX.1-2008-compliant (like Android) leads to an intractable conflict. Thus | |
72 // we provide prefixed macros instead. | |
73 #define mojio_st_atime st_atim.tv_sec | |
74 #define mojio_st_mtime st_mtim.tv_sec | |
75 #define mojio_st_ctime st_ctim.tv_sec | |
76 | |
77 // Types ----------------------------------------------------------------------- | |
78 | |
79 struct mojio_stat { | |
80 mojio_dev_t st_dev; | |
81 mojio_ino_t st_ino; | |
82 mojio_mode_t st_mode; | |
83 mojio_nlink_t st_nlink; | |
84 mojio_uid_t st_uid; | |
85 mojio_gid_t st_gid; | |
86 mojio_dev_t st_rdev; | |
87 mojio_off_t st_size; | |
88 struct mojio_timespec st_atim; | |
89 struct mojio_timespec st_mtim; | |
90 struct mojio_timespec st_ctim; | |
91 mojio_blksize_t st_blksize; | |
92 mojio_blkcnt_t st_blocks; | |
93 }; | |
94 | |
95 // Functions ------------------------------------------------------------------- | |
96 | |
97 #ifdef __cplusplus | |
98 extern "C" { | |
99 #endif | |
100 | |
101 // TODO(vtl): Below is a complete list of functions in <sys/stat.h> (according | |
102 // to POSIX.1-2008, 2013 edition). Figure out which ones we want/need to | |
103 // support. | |
104 // | |
105 // int chmod(const char*, mode_t); | |
106 // int fchmod(int, mode_t); | |
107 // int fchmodat(int, const char*, mode_t, int); | |
108 // [DONE] int fstat(int, struct stat*); | |
109 // int fstatat(int, const char* restrict, struct stat* restrict, int); | |
110 // int futimens(int, const struct timespec [2]); | |
111 // int lstat(const char* restrict, struct stat* restrict); | |
112 // int mkdir(const char*, mode_t); | |
113 // int mkdirat(int, const char*, mode_t); | |
114 // int mkfifo(const char*, mode_t); | |
115 // int mkfifoat(int, const char*, mode_t); | |
116 // [XSI] int mknod(const char*, mode_t, dev_t); | |
117 // [XSI] int mknodat(int, const char*, mode_t, dev_t); | |
118 // int stat(const char* restrict, struct stat* restrict); | |
119 // mode_t umask(mode_t); | |
120 // int utimensat(int, const char*, const struct timespec [2], int); | |
121 | |
122 int mojio_fstat(int fd, struct mojio_stat* buf); | |
123 | |
124 #ifdef __cplusplus | |
125 } // extern "C" | |
126 #endif | |
127 | |
128 #endif // MOJO_SERVICES_FILES_PUBLIC_C_MOJIO_SYS_STAT_H_ | |
OLD | NEW |