1*4882a593Smuzhiyun #ifndef _LINUX_STAT_H 2*4882a593Smuzhiyun #define _LINUX_STAT_H 3*4882a593Smuzhiyun 4*4882a593Smuzhiyun #include <linux/types.h> 5*4882a593Smuzhiyun 6*4882a593Smuzhiyun #ifdef __cplusplus 7*4882a593Smuzhiyun extern "C" { 8*4882a593Smuzhiyun #endif 9*4882a593Smuzhiyun 10*4882a593Smuzhiyun #define S_IFMT 00170000 /* type of file */ 11*4882a593Smuzhiyun #define S_IFSOCK 0140000 /* named socket */ 12*4882a593Smuzhiyun #define S_IFLNK 0120000 /* symbolic link */ 13*4882a593Smuzhiyun #define S_IFREG 0100000 /* regular */ 14*4882a593Smuzhiyun #define S_IFBLK 0060000 /* block special */ 15*4882a593Smuzhiyun #define S_IFDIR 0040000 /* directory */ 16*4882a593Smuzhiyun #define S_IFCHR 0020000 /* character special */ 17*4882a593Smuzhiyun #define S_IFIFO 0010000 /* fifo */ 18*4882a593Smuzhiyun #define S_ISUID 0004000 /* set user id on execution */ 19*4882a593Smuzhiyun #define S_ISGID 0002000 /* set group id on execution */ 20*4882a593Smuzhiyun #define S_ISVTX 0001000 /* save swapped text even after use */ 21*4882a593Smuzhiyun 22*4882a593Smuzhiyun #define S_ISLNK(m) (((m) & S_IFMT) == S_IFLNK) 23*4882a593Smuzhiyun #define S_ISREG(m) (((m) & S_IFMT) == S_IFREG) 24*4882a593Smuzhiyun #define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR) 25*4882a593Smuzhiyun #define S_ISCHR(m) (((m) & S_IFMT) == S_IFCHR) 26*4882a593Smuzhiyun #define S_ISBLK(m) (((m) & S_IFMT) == S_IFBLK) 27*4882a593Smuzhiyun #define S_ISFIFO(m) (((m) & S_IFMT) == S_IFIFO) 28*4882a593Smuzhiyun #define S_ISSOCK(m) (((m) & S_IFMT) == S_IFSOCK) 29*4882a593Smuzhiyun 30*4882a593Smuzhiyun #define S_IRWXU 00700 /* rwx for owner */ 31*4882a593Smuzhiyun #define S_IRUSR 00400 /* read permission for owner */ 32*4882a593Smuzhiyun #define S_IWUSR 00200 /* write permission for owner */ 33*4882a593Smuzhiyun #define S_IXUSR 00100 /* execute/search permission for owner */ 34*4882a593Smuzhiyun 35*4882a593Smuzhiyun #define S_IRWXG 00070 /* rwx for group */ 36*4882a593Smuzhiyun #define S_IRGRP 00040 /* read permission for group */ 37*4882a593Smuzhiyun #define S_IWGRP 00020 /* write permission for group */ 38*4882a593Smuzhiyun #define S_IXGRP 00010 /* execute/search permission for group */ 39*4882a593Smuzhiyun 40*4882a593Smuzhiyun #define S_IRWXO 00007 /* rwx for other */ 41*4882a593Smuzhiyun #define S_IROTH 00004 /* read permission for other */ 42*4882a593Smuzhiyun #define S_IWOTH 00002 /* read permission for other */ 43*4882a593Smuzhiyun #define S_IXOTH 00001 /* execute/search permission for other */ 44*4882a593Smuzhiyun 45*4882a593Smuzhiyun #ifdef __PPC__ 46*4882a593Smuzhiyun 47*4882a593Smuzhiyun struct stat { 48*4882a593Smuzhiyun dev_t st_dev; /* file system id */ 49*4882a593Smuzhiyun ino_t st_ino; /* file id */ 50*4882a593Smuzhiyun mode_t st_mode; /* ownership/protection */ 51*4882a593Smuzhiyun nlink_t st_nlink; /* number of links */ 52*4882a593Smuzhiyun uid_t st_uid; /* user id */ 53*4882a593Smuzhiyun gid_t st_gid; /* group id */ 54*4882a593Smuzhiyun dev_t st_rdev; 55*4882a593Smuzhiyun off_t st_size; /* file size in # of bytes */ 56*4882a593Smuzhiyun unsigned long st_blksize; /* block size */ 57*4882a593Smuzhiyun unsigned long st_blocks; /* file size in # of blocks */ 58*4882a593Smuzhiyun unsigned long st_atime; /* time file was last accessed */ 59*4882a593Smuzhiyun unsigned long __unused1; 60*4882a593Smuzhiyun unsigned long st_mtime; /* time file was last modified */ 61*4882a593Smuzhiyun unsigned long __unused2; 62*4882a593Smuzhiyun unsigned long st_ctime; /* time file status was last changed */ 63*4882a593Smuzhiyun unsigned long __unused3; 64*4882a593Smuzhiyun unsigned long __unused4; 65*4882a593Smuzhiyun unsigned long __unused5; 66*4882a593Smuzhiyun }; 67*4882a593Smuzhiyun 68*4882a593Smuzhiyun #endif /* __PPC__ */ 69*4882a593Smuzhiyun 70*4882a593Smuzhiyun #if defined (__ARM__) || defined (__I386__) || defined (__M68K__) || defined (__bfin__) ||\ 71*4882a593Smuzhiyun defined (__microblaze__) || defined (__nios2__) 72*4882a593Smuzhiyun 73*4882a593Smuzhiyun struct stat { 74*4882a593Smuzhiyun unsigned short st_dev; 75*4882a593Smuzhiyun unsigned short __pad1; 76*4882a593Smuzhiyun unsigned long st_ino; 77*4882a593Smuzhiyun unsigned short st_mode; 78*4882a593Smuzhiyun unsigned short st_nlink; 79*4882a593Smuzhiyun unsigned short st_uid; 80*4882a593Smuzhiyun unsigned short st_gid; 81*4882a593Smuzhiyun unsigned short st_rdev; 82*4882a593Smuzhiyun unsigned short __pad2; 83*4882a593Smuzhiyun unsigned long st_size; 84*4882a593Smuzhiyun unsigned long st_blksize; 85*4882a593Smuzhiyun unsigned long st_blocks; 86*4882a593Smuzhiyun unsigned long st_atime; 87*4882a593Smuzhiyun unsigned long __unused1; 88*4882a593Smuzhiyun unsigned long st_mtime; 89*4882a593Smuzhiyun unsigned long __unused2; 90*4882a593Smuzhiyun unsigned long st_ctime; 91*4882a593Smuzhiyun unsigned long __unused3; 92*4882a593Smuzhiyun unsigned long __unused4; 93*4882a593Smuzhiyun unsigned long __unused5; 94*4882a593Smuzhiyun }; 95*4882a593Smuzhiyun 96*4882a593Smuzhiyun #endif /* __ARM__ */ 97*4882a593Smuzhiyun 98*4882a593Smuzhiyun #if defined (__MIPS__) 99*4882a593Smuzhiyun 100*4882a593Smuzhiyun struct stat { 101*4882a593Smuzhiyun dev_t st_dev; 102*4882a593Smuzhiyun long st_pad1[3]; 103*4882a593Smuzhiyun ino_t st_ino; 104*4882a593Smuzhiyun mode_t st_mode; 105*4882a593Smuzhiyun nlink_t st_nlink; 106*4882a593Smuzhiyun uid_t st_uid; 107*4882a593Smuzhiyun gid_t st_gid; 108*4882a593Smuzhiyun dev_t st_rdev; 109*4882a593Smuzhiyun long st_pad2[2]; 110*4882a593Smuzhiyun off_t st_size; 111*4882a593Smuzhiyun long st_pad3; 112*4882a593Smuzhiyun /* 113*4882a593Smuzhiyun * Actually this should be timestruc_t st_atime, st_mtime and st_ctime 114*4882a593Smuzhiyun * but we don't have it under Linux. 115*4882a593Smuzhiyun */ 116*4882a593Smuzhiyun time_t st_atime; 117*4882a593Smuzhiyun long reserved0; 118*4882a593Smuzhiyun time_t st_mtime; 119*4882a593Smuzhiyun long reserved1; 120*4882a593Smuzhiyun time_t st_ctime; 121*4882a593Smuzhiyun long reserved2; 122*4882a593Smuzhiyun long st_blksize; 123*4882a593Smuzhiyun long st_blocks; 124*4882a593Smuzhiyun long st_pad4[14]; 125*4882a593Smuzhiyun }; 126*4882a593Smuzhiyun 127*4882a593Smuzhiyun #endif /* __MIPS__ */ 128*4882a593Smuzhiyun 129*4882a593Smuzhiyun #if defined(__SH__) || defined(__XTENSA__) 130*4882a593Smuzhiyun 131*4882a593Smuzhiyun struct stat { 132*4882a593Smuzhiyun unsigned long st_dev; 133*4882a593Smuzhiyun unsigned long st_ino; 134*4882a593Smuzhiyun unsigned short st_mode; 135*4882a593Smuzhiyun unsigned short st_nlink; 136*4882a593Smuzhiyun unsigned short st_uid; 137*4882a593Smuzhiyun unsigned short st_gid; 138*4882a593Smuzhiyun unsigned long st_rdev; 139*4882a593Smuzhiyun unsigned long st_size; 140*4882a593Smuzhiyun unsigned long st_blksize; 141*4882a593Smuzhiyun unsigned long st_blocks; 142*4882a593Smuzhiyun unsigned long st_atime; 143*4882a593Smuzhiyun unsigned long st_atime_nsec; 144*4882a593Smuzhiyun unsigned long st_mtime; 145*4882a593Smuzhiyun unsigned long st_mtime_nsec; 146*4882a593Smuzhiyun unsigned long st_ctime; 147*4882a593Smuzhiyun unsigned long st_ctime_nsec; 148*4882a593Smuzhiyun unsigned long __unused4; 149*4882a593Smuzhiyun unsigned long __unused5; 150*4882a593Smuzhiyun }; 151*4882a593Smuzhiyun 152*4882a593Smuzhiyun #endif /* __SH__ || __XTENSA__ */ 153*4882a593Smuzhiyun 154*4882a593Smuzhiyun #ifdef __cplusplus 155*4882a593Smuzhiyun } 156*4882a593Smuzhiyun #endif 157*4882a593Smuzhiyun 158*4882a593Smuzhiyun #endif 159