mescc: Support GNU Bash.
[mes.git] / include / sys / stat.h
1 /* -*-comment-start: "//";comment-end:""-*-
2  * GNU Mes --- Maxwell Equations of Software
3  * Copyright © 2017 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
4  *
5  * This file is part of GNU Mes.
6  *
7  * GNU Mes is free software; you can redistribute it and/or modify it
8  * under the terms of the GNU General Public License as published by
9  * the Free Software Foundation; either version 3 of the License, or (at
10  * your option) any later version.
11  *
12  * GNU Mes is distributed in the hope that it will be useful, but
13  * WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15  * GNU General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License
18  * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
19  */
20 #ifndef __MES_SYS_STAT_H
21 #define __MES_SYS_STAT_H 1lei
22
23 #if WITH_GLIBC
24 #undef __MES_SYS_STAT_H
25 #include_next <sys/stat.h>
26
27 #else // ! WITH_GLIBC
28
29 #include <time.h>
30 #include <sys/types.h>
31
32 #ifndef __MES_MODE_T
33 #define __MES_MODE_T
34 typedef int mode_t;
35 #endif
36
37 #if __i386__
38 struct stat
39 {
40   unsigned long  st_dev;
41   unsigned long  st_ino;
42   unsigned short st_mode;
43   unsigned short st_nlink;
44   unsigned short st_uid;
45   unsigned short st_gid;
46   unsigned long  st_rdev;
47   long           st_size;
48   unsigned long  st_blksize;
49   unsigned long  st_blocks;
50   time_t         st_atime;
51   unsigned long  st_atime_usec;
52   time_t         st_mtime;
53   unsigned long  st_mtime_usec;
54   time_t         st_ctime;
55   unsigned long  st_ctime_usec;
56   unsigned long  __foo0;
57   unsigned long  __foo1;
58 };
59 #elif __x86_64__
60 struct stat
61 {
62   unsigned long  st_dev;
63   unsigned long  st_ino;
64   unsigned int   st_mode;
65   unsigned int   st_nlink;
66   unsigned int   st_uid;
67   unsigned int   st_gid;
68   unsigned long  st_rdev;
69   long           st_size;
70   unsigned long  st_blksize;
71   unsigned long  st_blocks;
72   time_t         st_atime;
73   unsigned long  st_atime_usec;
74   time_t         st_mtime;
75   unsigned long  st_mtime_usec;
76   time_t         st_ctime;
77   unsigned long  st_ctime_usec;
78   unsigned long  __foo0;
79   unsigned long  __foo1;
80 };
81 #endif
82
83 int chmod (char const *file_name, mode_t mode);
84 int mkdir (char const *file_name, mode_t mode);
85 int chown (char const *file_name, uid_t owner, gid_t group);
86 int rmdir (char const *file_name);
87 int stat (char const *file_name, struct stat *buf);
88
89 #define S_IFCHR 0020000
90 #define S_IFDIR 0040000
91 #define S_IFBLK 0060000
92 #define S_IFREG 0100000
93 #define S_IFLNK 0120000
94 #define S_IFMT  0170000
95
96 #define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR)
97 #define S_ISREG(m) (((m) & S_IFMT) == S_IFREG)
98
99 #define S_IRWXU 00700
100 #define S_IXUSR 00100
101 #define S_IWUSR 00200
102 #define S_IRUSR 00400
103
104 #define S_ISUID 0400
105 #define S_ISGID 02000
106 #define S_IXGRP 00010
107 #define S_IXOTH 00001
108 #define S_IRGRP 00040
109 #define S_IROTH 00004
110 #define S_IWGRP 00020
111 #define S_IWOTH 00002
112 #define S_IRWXG 00070
113 #define S_IRWXO 00007
114
115 #endif // ! WITH_GLIBC
116
117 #endif // __MES_SYS_STAT_H