1 #ifndef	_SYS_STAT_H
2 #define	_SYS_STAT_H
3 
4 #ifdef __cplusplus
5 extern "C" {
6 #endif
7 
8 #include <_ansi.h>
9 #include <time.h>
10 #include <sys/types.h>
11 
12 /* dj's stat defines _STAT_H_ */
13 #ifndef _STAT_H_
14 
15 /* It is intended that the layout of this structure not change when the
16    sizes of any of the basic types change (short, int, long) [via a compile
17    time option].  */
18 
19 #ifdef __CYGWIN__
20 #include <cygwin/stat.h>
21 #ifdef _COMPILING_NEWLIB
22 #define stat64 __stat64
23 #endif
24 #else
25 struct	stat
26 {
27   dev_t		st_dev;
28   ino_t		st_ino;
29   mode_t	st_mode;
30   nlink_t	st_nlink;
31   uid_t		st_uid;
32   gid_t		st_gid;
33   dev_t		st_rdev;
34   off_t		st_size;
35   /* SysV/sco doesn't have the rest... But Solaris, eabi does.  */
36 #if defined(__svr4__) && !defined(__PPC__) && !defined(__sun__)
37   time_t	st_atime;
38   time_t	st_mtime;
39   time_t	st_ctime;
40 #else
41   time_t	st_atime;
42   long		st_spare1;
43   time_t	st_mtime;
44   long		st_spare2;
45   time_t	st_ctime;
46   long		st_spare3;
47   long		st_blksize;
48   long		st_blocks;
49   long	st_spare4[2];
50 #endif
51 };
52 #endif
53 
54 #define	_IFMT		0170000	/* type of file */
55 #define		_IFDIR	0040000	/* directory */
56 #define		_IFCHR	0020000	/* character special */
57 #define		_IFBLK	0060000	/* block special */
58 #define		_IFREG	0100000	/* regular */
59 #define		_IFLNK	0120000	/* symbolic link */
60 #define		_IFSOCK	0140000	/* socket */
61 #define		_IFIFO	0010000	/* fifo */
62 
63 #define 	S_BLKSIZE  1024 /* size of a block */
64 
65 #define	S_ISUID		0004000	/* set user id on execution */
66 #define	S_ISGID		0002000	/* set group id on execution */
67 #ifndef	_POSIX_SOURCE
68 #define	S_ISVTX		0001000	/* save swapped text even after use */
69 #define	S_IREAD		0000400	/* read permission, owner */
70 #define	S_IWRITE 	0000200	/* write permission, owner */
71 #define	S_IEXEC		0000100	/* execute/search permission, owner */
72 #define	S_ENFMT 	0002000	/* enforcement-mode locking */
73 
74 #define	S_IFMT		_IFMT
75 #define	S_IFDIR		_IFDIR
76 #define	S_IFCHR		_IFCHR
77 #define	S_IFBLK		_IFBLK
78 #define	S_IFREG		_IFREG
79 #define	S_IFLNK		_IFLNK
80 #define	S_IFSOCK	_IFSOCK
81 #define	S_IFIFO		_IFIFO
82 #endif	/* !_POSIX_SOURCE */
83 
84 #ifdef _WIN32
85 /* The Windows header files define _S_ forms of these, so we do too
86    for easier portability.  */
87 #define _S_IFMT		_IFMT
88 #define _S_IFDIR	_IFDIR
89 #define _S_IFCHR	_IFCHR
90 #define _S_IFIFO	_IFIFO
91 #define _S_IFREG	_IFREG
92 #define _S_IREAD	0000400
93 #define _S_IWRITE	0000200
94 #define _S_IEXEC	0000100
95 #endif
96 
97 #define	S_IRWXU 	(S_IRUSR | S_IWUSR | S_IXUSR)
98 #define		S_IRUSR	0000400	/* read permission, owner */
99 #define		S_IWUSR	0000200	/* write permission, owner */
100 #define		S_IXUSR 0000100/* execute/search permission, owner */
101 #define	S_IRWXG		(S_IRGRP | S_IWGRP | S_IXGRP)
102 #define		S_IRGRP	0000040	/* read permission, group */
103 #define		S_IWGRP	0000020	/* write permission, grougroup */
104 #define		S_IXGRP 0000010/* execute/search permission, group */
105 #define	S_IRWXO		(S_IROTH | S_IWOTH | S_IXOTH)
106 #define		S_IROTH	0000004	/* read permission, other */
107 #define		S_IWOTH	0000002	/* write permission, other */
108 #define		S_IXOTH 0000001/* execute/search permission, other */
109 
110 #define	S_ISBLK(m)	(((m)&_IFMT) == _IFBLK)
111 #define	S_ISCHR(m)	(((m)&_IFMT) == _IFCHR)
112 #define	S_ISDIR(m)	(((m)&_IFMT) == _IFDIR)
113 #define	S_ISFIFO(m)	(((m)&_IFMT) == _IFIFO)
114 #define	S_ISREG(m)	(((m)&_IFMT) == _IFREG)
115 #define	S_ISLNK(m)	(((m)&_IFMT) == _IFLNK)
116 #define	S_ISSOCK(m)	(((m)&_IFMT) == _IFSOCK)
117 
118 
119 int	_EXFUN(chmod,( const char *__path, mode_t __mode ));
120 int     _EXFUN(fchmod,(int __fd, mode_t __mode));
121 int	_EXFUN(fstat,( int __fd, struct stat *__sbuf ));
122 int	_EXFUN(mkdir,( const char *_path, mode_t __mode ));
123 int	_EXFUN(mkfifo,( const char *__path, mode_t __mode ));
124 int	_EXFUN(stat,( const char *__path, struct stat *__sbuf ));
125 mode_t	_EXFUN(umask,( mode_t __mask ));
126 
127 #if defined(__rtems__) || defined(__CYGWIN__) && !defined(__INSIDE_CYGWIN__)
128 int	_EXFUN(lstat,( const char *__path, struct stat *__buf ));
129 int	_EXFUN(mknod,( const char *__path, mode_t __mode, dev_t __dev ));
130 #endif
131 
132 /* Provide prototypes for most of the _<systemcall> names that are
133    provided in newlib for some compilers.  */
134 #ifdef _COMPILING_NEWLIB
135 int	_EXFUN(_fstat,( int __fd, struct stat *__sbuf ));
136 int	_EXFUN(_stat,( const char *__path, struct stat *__sbuf ));
137 #ifdef __LARGE64_FILES
138 struct stat64;
139 int	_EXFUN(_fstat64,( int __fd, struct stat64 *__sbuf ));
140 #endif
141 #endif
142 
143 #endif /* !_STAT_H_ */
144 #ifdef __cplusplus
145 }
146 #endif
147 #endif /* _SYS_STAT_H */
148