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