1 #ifndef __SYS_STAT_H__
2 #define __SYS_STAT_H__
3 
4 /* We need some time stuff */
5 #include <time.h>
6 
7 /*
8  *	Defines and stuff for the stat functions.
9  *	We try to be good and emulate as much a possible
10  *	Hence all these silly defs!
11  *
12  *	$Id: stat.h,v 1.5 2016-03-06 21:39:17 dom Exp $
13  */
14 
15 struct stat {
16 	unsigned int	st_mode;	/* Mode */
17 	time_t	st_atime;	/* Last access */
18 	time_t	st_mtime;	/* Last modification */
19 	time_t	st_ctime;	/* Last change?!?! */
20 	long	st_size;	/* Size */
21 	/* These two based on real values */
22 	int	st_blksize;	/* Blocksize */
23 	int	st_blocks;	/* # of blocks */
24 	/* Below here is fake */
25 	int	st_ino;		/* Inode */
26 	int	st_uid;		/* UID (not supported) */
27 	int	st_gid;		/* GID (not supported) */
28 	int	st_dev;		/* Device number */
29 	int	st_nlink;	/* number of links */
30 	int	st_rdev;	/* ? */
31 };
32 
33 extern int __LIB__ __SAVEFRAME__ stat(char *filename, struct stat *buf) __smallc;
34 
35 extern int __LIB__  mkdir(char *dirname);
36 #define mkdir(a,b) mkdir(a)
37 
38 #define S_IFMT		0170000	/* file type mask */
39 #define S_IFLNK		0110000	/* symbolic link */
40 #define S_IFREG		0100000	/* or just 000000, regular */
41 #define S_IFBLK 	0060000	/* block special */
42 #define S_IFDIR 	0040000	/* directory */
43 #define S_IFCHR 	0020000	/* character special */
44 #define S_IFPIPE 	0010000	/* pipe */
45 
46 #define S_UMASK 	07777	/* bits modifiable by chmod */
47 
48 #define S_ISUID 	04000	/* set euid to file uid */
49 #define S_ISGID 	02000 	/* set egid to file gid */
50 #define S_ISVTX 	01000	/* */
51 
52 #define S_IREAD 	0400	/* owner may read */
53 #define S_IWRITE 	0200 	/* owner may write */
54 #define S_IEXEC 	0100	/* owner may execute <directory search> */
55 
56 #define S_IGREAD 	0040	/* group may read */
57 #define S_IGWRITE 	0020 	/* group may write */
58 #define S_IGEXEC 	0010	/* group may execute <directory search> */
59 
60 #define S_IOREAD 	0004	/* other may read */
61 #define S_IOWRITE  	0002	/* other may write */
62 #define S_IOEXEC 	0001	/* other may execute <directory search> */
63 
64 #define S_IRWXU 	00700
65 #define S_IRUSR 	00400
66 #define S_IWUSR 	00200
67 #define S_IXUSR 	00100
68 
69 #define S_IRWXG 	00070
70 #define S_IRGRP 	00040
71 #define S_IWGRP 	00020
72 #define S_IXGRP 	00010
73 
74 #define S_IRWXO 	00007
75 #define S_IROTH 	00004
76 #define S_IWOTH 	00002
77 #define S_IXOTH 	00001
78 
79 #define S_ISLNK(m)	(((m) & S_IFMT) == S_IFLNK)
80 #define S_ISREG(m)	(((m) & S_IFMT) == S_IFREG)
81 #define S_ISDIR(m)	(((m) & S_IFMT) == S_IFDIR)
82 #define S_ISCHR(m)	(((m) & S_IFMT) == S_IFCHR)
83 #define S_ISBLK(m)	(((m) & S_IFMT) == S_IFBLK)
84 #define S_ISPIPE(m)	(((m) & S_IFMT) == S_IFPIPE)
85 
86 #define S_ISDEV(m)	(((m) & S_IFMT) & S_IFCHR)
87 
88 #endif
89