home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 15 / 15.iso / s / s053 / 9.ddi / usr / include / sys / stat.h next >
Encoding:
C/C++ Source or Header  |  1990-12-08  |  7.7 KB  |  304 lines

  1. /*    Copyright (c) 1990 UNIX System Laboratories, Inc.    */
  2. /*    Copyright (c) 1984, 1986, 1987, 1988, 1989, 1990 AT&T    */
  3. /*      All Rights Reserved      */
  4.  
  5. /*    THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF         */
  6. /*    UNIX System Laboratories, Inc.                         */
  7. /*    The copyright notice above does not evidence any       */
  8. /*    actual or intended publication of such source code.    */
  9.  
  10. #ifndef _SYS_STAT_H
  11. #define _SYS_STAT_H
  12.  
  13. #ident    "@(#)/usr/include/sys/stat.h.sl 1.1 4.0 12/08/90 17592 AT&T-USL"
  14.  
  15. #include <sys/time.h>
  16.  
  17. #define _ST_FSTYPSZ 16        /* array size for file system type name */
  18.  
  19. /*
  20.  * stat structure, used by stat(2) and fstat(2)
  21.  */
  22.  
  23. #if defined(_KERNEL)
  24.  
  25.     /* SVID stat struct */
  26. struct    stat {
  27.     o_dev_t    st_dev;
  28.     o_ino_t    st_ino;
  29.     o_mode_t st_mode;
  30.     o_nlink_t st_nlink;
  31.     o_uid_t st_uid;
  32.     o_gid_t st_gid;
  33.     o_dev_t    st_rdev;
  34.     off_t    st_size;
  35.     time_t    st_atime;
  36.     time_t    st_mtime;
  37.     time_t    st_ctime;
  38. };
  39.     /* Expanded stat structure */ 
  40.  
  41. struct    xstat {
  42.     dev_t    st_dev;
  43.     long    st_pad1[3];    /* reserve for dev expansion, sysid definition */
  44.     ino_t    st_ino;
  45.     mode_t    st_mode;
  46.     nlink_t st_nlink;
  47.     uid_t     st_uid;
  48.     gid_t     st_gid;
  49.     dev_t    st_rdev;
  50.     long    st_pad2[2];
  51.     off_t    st_size;
  52.     long    st_pad3;    /* reserve pad for future off_t expansion */
  53.     timestruc_t st_atime;
  54.     timestruc_t st_mtime;
  55.     timestruc_t st_ctime;
  56.     long    st_blksize;
  57.     long    st_blocks;
  58.     char    st_fstype[_ST_FSTYPSZ];
  59.     long    st_pad4[8];    /* expansion area */
  60. };
  61.  
  62. #else /* !defined(_KERNEL) */
  63. #if !defined(_STYPES)    /* user level 4.0 stat struct */
  64.  
  65. /* maps to kernel struct xstat */
  66. struct    stat {
  67.     dev_t    st_dev;
  68.     long    st_pad1[3];    /* reserved for network id */
  69.     ino_t    st_ino;
  70.     mode_t    st_mode;
  71.     nlink_t st_nlink;
  72.     uid_t     st_uid;
  73.     gid_t     st_gid;
  74.     dev_t    st_rdev;
  75.     long    st_pad2[2];
  76.     off_t    st_size;
  77.     long    st_pad3;    /* future off_t expansion */
  78.     timestruc_t st_atim;    
  79.     timestruc_t st_mtim;    
  80.     timestruc_t st_ctim;    
  81.     long    st_blksize;
  82.     long    st_blocks;
  83.     char    st_fstype[_ST_FSTYPSZ];
  84.     long    st_pad4[8];    /* expansion area */
  85. };
  86. #define st_atime    st_atim.tv_sec
  87. #define st_mtime    st_mtim.tv_sec
  88. #define st_ctime    st_ctim.tv_sec
  89.  
  90. #else    /*  SVID Issue 2 stat */
  91.  
  92. struct    stat {
  93.     o_dev_t    st_dev;
  94.     o_ino_t    st_ino;
  95.     o_mode_t st_mode;
  96.     o_nlink_t st_nlink;
  97.     o_uid_t    st_uid;
  98.     o_gid_t    st_gid;
  99.     o_dev_t    st_rdev;
  100.     off_t    st_size;
  101.     time_t    st_atime;
  102.     time_t    st_mtime;
  103.     time_t    st_ctime;
  104. };
  105. #endif    /* end !defined(_STYPES) */
  106. #endif    /* end defined(_KERNEL) */
  107.  
  108.  
  109. /* MODE MASKS */
  110.  
  111. /* de facto standard definitions */
  112.  
  113. #if !defined(_POSIX_SOURCE) || defined(_XOPEN_SOURCE) 
  114. #define    S_IFMT        0xF000    /* type of file */
  115. #endif /*!defined(_POSIX_SOURCE) || defined(_XOPEN_SOURCE)*/ 
  116. #if !defined(_POSIX_SOURCE) 
  117. #define S_IAMB        0x1FF    /* access mode bits */
  118. #endif /* !defined(_POSIX_SOURCE) */
  119. #if !defined(_POSIX_SOURCE) || defined(_XOPEN_SOURCE) 
  120. #define    S_IFIFO        0x1000    /* fifo */
  121. #define    S_IFCHR        0x2000    /* character special */
  122. #define    S_IFDIR        0x4000    /* directory */
  123. #endif /*!defined(_POSIX_SOURCE) || defined(_XOPEN_SOURCE)*/ 
  124. #if !defined(_POSIX_SOURCE) 
  125. #define    S_IFNAM        0x5000  /* XENIX special named file */
  126. #define        S_INSEM 0x1    /* XENIX semaphore subtype of IFNAM */
  127. #define        S_INSHD 0x2    /* XENIX shared data subtype of IFNAM */
  128. #endif /* !defined(_POSIX_SOURCE) */
  129.  
  130. #if !defined(_POSIX_SOURCE) || defined(_XOPEN_SOURCE) 
  131. #define    S_IFBLK        0x6000    /* block special */
  132. #define    S_IFREG        0x8000    /* regular */
  133. #endif /*!defined(_POSIX_SOURCE) || defined(_XOPEN_SOURCE)*/ 
  134. #if !defined(_POSIX_SOURCE) 
  135. #define    S_IFLNK        0xA000    /* symbolic link */
  136. #define    S_IFSOCK    0xC000    /* socket */
  137. #endif /* !defined(_POSIX_SOURCE) */
  138.  
  139. #define    S_ISUID        0x800    /* set user id on execution */
  140. #define    S_ISGID        0x400    /* set group id on execution */
  141.  
  142. #if !defined(_POSIX_SOURCE) || defined(_XOPEN_SOURCE) 
  143. #define    S_ISVTX        0x200    /* save swapped text even after use */
  144. #endif /* !defined(_POSIX_SOURCE) || defined(_XOPEN_SOURCE) */
  145.  
  146. #if !defined(_POSIX_SOURCE) 
  147. #define    S_IREAD        00400    /* read permission, owner */
  148. #define    S_IWRITE    00200    /* write permission, owner */
  149. #define    S_IEXEC        00100    /* execute/search permission, owner */
  150. #define    S_ENFMT        S_ISGID    /* record locking enforcement flag */
  151. #endif /* !defined(_POSIX_SOURCE) */
  152.  
  153.  
  154. /* the following macros are for POSIX conformance */
  155.  
  156. #define    S_IRWXU    00700        /* read, write, execute: owner */
  157. #define    S_IRUSR    00400        /* read permission: owner */
  158. #define    S_IWUSR    00200        /* write permission: owner */
  159. #define    S_IXUSR    00100        /* execute permission: owner */
  160. #define    S_IRWXG    00070        /* read, write, execute: group */
  161. #define    S_IRGRP    00040        /* read permission: group */
  162. #define    S_IWGRP    00020        /* write permission: group */
  163. #define    S_IXGRP    00010        /* execute permission: group */
  164. #define    S_IRWXO    00007        /* read, write, execute: other */
  165. #define    S_IROTH    00004        /* read permission: other */
  166. #define    S_IWOTH    00002        /* write permission: other */
  167. #define    S_IXOTH    00001        /* execute permission: other */
  168.  
  169.  
  170. #define S_ISFIFO(mode)    ((mode&0xF000) == 0x1000)
  171. #define S_ISCHR(mode)    ((mode&0xF000) == 0x2000)
  172. #define S_ISDIR(mode)    ((mode&0xF000) == 0x4000)
  173. #define S_ISBLK(mode)    ((mode&0xF000) == 0x6000)
  174. #define S_ISREG(mode)    ((mode&0xF000) == 0x8000) 
  175.  
  176.  
  177. /* a version number is included in the SVR4 stat and mknod interfaces. */
  178.  
  179.  
  180. #define _R3_MKNOD_VER 1        /* SVR3.0 mknod */
  181. #define _MKNOD_VER 2        /* current version of mknod */
  182. #define _R3_STAT_VER 1        /* SVR3.0 stat */
  183. #define _STAT_VER 2        /* current version of stat */
  184.  
  185. #if !defined(_KERNEL)
  186. #if defined(__STDC__)
  187.  
  188. #if !defined(_STYPES)
  189. static int fstat(int, struct stat *);
  190. static int stat(const char *, struct stat *);
  191. #if !defined(_POSIX_SOURCE) 
  192. static int lstat(const char *, struct stat *);
  193. static int mknod(const char *, mode_t, dev_t);
  194. #endif /* !defined(_POSIX_SOURCE) */
  195. #else
  196. int fstat(int, struct stat *);
  197. int stat(const char *, struct stat *);
  198. #if !defined(_POSIX_SOURCE) 
  199. int lstat(const char *, struct stat *);
  200. int mknod(const char *, mode_t, dev_t);
  201. #endif /* !defined(_POSIX_SOURCE) */
  202. #endif
  203.  
  204. int _fxstat(const int, int, struct stat *);
  205. int _xstat(const int, const char *, struct stat *);
  206. #if !defined(_POSIX_SOURCE) 
  207. int _lxstat(const int, const char *, struct stat *);
  208. int _xmknod(const int, const char *, mode_t, dev_t);
  209. #endif /* !defined(_POSIX_SOURCE) */
  210. extern int chmod(const char *, mode_t);
  211. extern int mkdir(const char *, mode_t);
  212. extern int mkfifo(const char *, mode_t);
  213. extern mode_t umask(mode_t);
  214.  
  215. #else    /* !__STDC__ */
  216.  
  217. #if !defined(_STYPES)
  218. static int fstat(), stat();
  219. #if !defined(_POSIX_SOURCE) 
  220. static int mknod(), lstat();
  221. #endif /* !defined(_POSIX_SOURCE) */
  222. #else
  223. int fstat(), stat();
  224. #if !defined(_POSIX_SOURCE) 
  225. int mknod(), lstat();
  226. #endif /* !defined(_POSIX_SOURCE) */
  227. #endif
  228.  
  229. int _fxstat(), _xstat();
  230. #if !defined(_POSIX_SOURCE) 
  231. int _xmknod(), _lxstat();
  232. #endif /* !defined(_POSIX_SOURCE) */
  233. extern int chmod();
  234. extern int mkdir();
  235. extern int mkfifo();
  236. extern mode_t umask();
  237.  
  238. #endif /* defined(__STDC__) */
  239. #endif /* !defined(_KERNEL) */
  240.  
  241. /*
  242.  * NOTE: Application software should NOT program 
  243.  * to the _xstat interface.
  244.  */
  245.  
  246. #if !defined(_STYPES) && !defined(_KERNEL)
  247. static int
  248. stat(path, buf)
  249. const char *path;
  250. struct stat *buf;
  251. {
  252. int ret;
  253.     ret = _xstat(_STAT_VER, path, buf);
  254.     return ret; 
  255. }
  256.  
  257. #if !defined(_POSIX_SOURCE) 
  258. static int
  259. lstat(path, buf)
  260. const char *path;
  261. struct stat *buf;
  262. {
  263. int ret;
  264.     ret = _lxstat(_STAT_VER, path, buf);
  265.     return ret;
  266. }
  267. #endif /* !defined(_POSIX_SOURCE) */
  268.  
  269. static int
  270. fstat(fd, buf)
  271. int fd;
  272. struct stat *buf;
  273. {
  274. int ret;
  275.     ret = _fxstat(_STAT_VER, fd, buf);
  276.     return ret;
  277. }
  278.  
  279. #if !defined(_POSIX_SOURCE) 
  280. static int
  281. mknod(path, mode, dev)
  282. const char *path;
  283. mode_t mode;
  284. dev_t dev;
  285. {
  286. int ret;
  287.     ret = _xmknod(_MKNOD_VER, path, mode, dev);
  288.     return ret;
  289. }
  290. #endif /* !defined(_POSIX_SOURCE) */
  291.  
  292. #endif
  293. /*            Function prototypes
  294.  *            ___________________
  295.  *
  296.  * fstat()/stat() used for NON-EFT case - functions defined in libc.
  297.  * fxstat/xstat/lxstat are called indirectly from fstat/stat/lstat when EFT is 
  298.  * enabled.
  299.  */
  300.  
  301.  
  302.  
  303. #endif    /* _SYS_STAT_H */
  304.