home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 1999 March B / SCO_CASTOR4RRT.iso / update701 / root.17 / usr / include / sys / stat.h / stat.h
Encoding:
C/C++ Source or Header  |  1998-08-18  |  13.6 KB  |  525 lines

  1. /*
  2.  * Copyright (c) 1998 The Santa Cruz Operation, Inc.. All Rights Reserved. 
  3.  *                                                                         
  4.  *        THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF THE               
  5.  *                   SANTA CRUZ OPERATION INC.                             
  6.  *                                                                         
  7.  *   The copyright notice above does not evidence any actual or intended   
  8.  *   publication of such source code.                                      
  9.  */
  10.  
  11. #ifndef _FS_STAT_H    /* wrapper symbol for kernel use */
  12. #define _FS_STAT_H    /* subject to change without notice */
  13. #define _SYS_STAT_H    /* SVR4.0COMPAT */
  14. #ident    "@(#)kern:fs/stat.h    1.16.5.2"
  15.  
  16. #ifdef _KERNEL_HEADERS
  17.  
  18. #include <util/types.h>    /* REQUIRED */
  19. #include <svc/time.h>    /* REQUIRED */
  20.  
  21. #elif defined(_KERNEL) || defined(_KMEMUSER)
  22.  
  23. #include <sys/types.h>    /* REQUIRED */
  24. #include <sys/time.h>    /* REQUIRED */
  25.  
  26. #elif defined(_XOPEN_SOURCE) && _XOPEN_SOURCE_EXTENDED - 0 >= 1
  27.  
  28. #include <sys/types.h>
  29.  
  30. #ifndef _TIMESTRUC_T
  31. #define _TIMESTRUC_T
  32.  
  33. typedef struct
  34. #if defined(_POSIX_TIMERS) || _POSIX_C_SOURCE - 0 >= 199309 \
  35.     || !defined(_XOPEN_SOURCE) && !defined(_POSIX_SOURCE) \
  36.         && !defined(_POSIX_C_SOURCE)
  37. #ifndef _TIMESPEC
  38. #define _TIMESPEC
  39.         timespec
  40. #endif
  41. #endif /*defined(_POSIX_TIMERS) || ...*/
  42. {
  43. #ifdef    tv_sec
  44.     time_t     __tv_sec;    /* seconds */
  45. #else
  46.     time_t     tv_sec;        /* seconds */
  47. #endif
  48. #ifdef tv_nsec
  49.     long    __tv_nsec;    /* and nanoseconds */
  50. #else
  51.     long    tv_nsec;    /* and nanoseconds */
  52. #endif
  53. } timestruc_t;
  54.  
  55. #endif /*_TIMESTRUC_T*/
  56.  
  57. #else
  58.  
  59. #include <sys/types.h>
  60. #include <sys/time.h>
  61.  
  62. #endif /*_KERNEL_HEADERS*/
  63.  
  64. #define _ST_FSTYPSZ 16    /* array size for file system type name */
  65.  
  66. /*
  67.  * stat structure, used by stat(2) and fstat(2)
  68.  */
  69.  
  70. #ifdef _KERNEL
  71.  
  72. struct stat {
  73.     o_dev_t    st_dev;
  74.     o_ino_t    st_ino;
  75.     o_mode_t st_mode;
  76.     o_nlink_t st_nlink;
  77.     o_uid_t    st_uid;
  78.     o_gid_t st_gid;
  79.     o_dev_t    st_rdev;
  80.     off32_t    st_size;
  81.     time_t    st_atime;
  82.     time_t    st_mtime;
  83.     time_t    st_ctime;
  84. };
  85.  
  86. typedef struct xstat {
  87.     dev_t    st_dev;
  88.     long    st_pad1[3];    /* reserve for dev expansion, sysid def. */
  89.     n_ino_t    st_ino;
  90.     mode_t    st_mode;
  91.     nlink_t st_nlink;
  92.     uid_t     st_uid;
  93.     gid_t     st_gid;
  94.     dev_t    st_rdev;
  95.     long    st_pad2[2];    /* dev and off_t expansion */
  96.     n_off_t    st_size;
  97.     long    st_pad3;    /* reserve pad for future off_t expansion */
  98.     timestruc_t st_atime;
  99.     timestruc_t st_mtime;
  100.     timestruc_t st_ctime;
  101.     long    st_blksize;
  102.     n_blkcnt_t st_blocks;
  103.     char    st_fstype[_ST_FSTYPSZ];
  104.     int    st_aclcnt;
  105.     lid_t    st_level;
  106.     ulong_t    st_flags;    /* contains MLD flag */
  107.     lid_t    st_cmwlevel;
  108.     long    st_pad4[4];    /* expansion area */
  109. } stat_t;
  110.  
  111. typedef struct xstat32 {
  112.     dev_t    st_dev;
  113.     long    st_pad1[3];    /* reserve for dev expansion, sysid def. */
  114.     ino32_t    st_ino;
  115.     mode_t    st_mode;
  116.     nlink_t st_nlink;
  117.     uid_t     st_uid;
  118.     gid_t     st_gid;
  119.     dev_t    st_rdev;
  120.     long    st_pad2[2];    /* dev and off_t expansion */
  121.     off32_t    st_size;
  122.     long    st_pad3;    /* reserve pad for future off_t expansion */
  123.     timestruc_t st_atime;
  124.     timestruc_t st_mtime;
  125.     timestruc_t st_ctime;
  126.     long    st_blksize;
  127.     blkcnt32_t st_blocks;
  128.     char    st_fstype[_ST_FSTYPSZ];
  129.     int    st_aclcnt;
  130.     lid_t    st_level;
  131.     ulong_t    st_flags;    /* contains MLD flag */
  132.     lid_t    st_cmwlevel;
  133.     long    st_pad4[4];    /* expansion area */
  134. } stat32_t;
  135.  
  136. typedef struct xstat64 {
  137.     dev_t    st_dev;
  138.     long    st_pad1[3];    /* reserve for dev expansion, sysid def. */
  139.     ino64_t    st_ino;
  140.     mode_t    st_mode;
  141.     nlink_t st_nlink;
  142.     uid_t     st_uid;
  143.     gid_t     st_gid;
  144.     dev_t    st_rdev;
  145.     long    st_pad2[2];    /* dev and off_t expansion */
  146.     off64_t    st_size;    /* st_pad3 removed for SUN compatibility */
  147.     timestruc_t st_atime;
  148.     timestruc_t st_mtime;
  149.     timestruc_t st_ctime;
  150.     long    st_blksize;
  151.     blkcnt64_t st_blocks;
  152.     char    st_fstype[_ST_FSTYPSZ];
  153.     int    st_aclcnt;
  154.     lid_t    st_level;
  155.     ulong_t    st_flags;    /* contains MLD flag */
  156.     lid_t    st_cmwlevel;
  157.     long    st_pad4[4];    /* expansion area */
  158. } stat64_t;
  159.  
  160. #elif defined(_STYPES) /* SVID 2 structure; no LFS mapping */
  161.  
  162. typedef struct stat {
  163.     o_dev_t    st_dev;
  164.     o_ino_t    st_ino;
  165.     o_mode_t st_mode;
  166.     o_nlink_t st_nlink;
  167.     o_uid_t    st_uid;
  168.     o_gid_t    st_gid;
  169.     o_dev_t    st_rdev;
  170.     off32_t    st_size;
  171.     time_t    st_atime;
  172.     time_t    st_mtime;
  173.     time_t    st_ctime;
  174. } stat_t;
  175.  
  176. #else /*!_STYPES && !_KERNEL*/
  177.  
  178. #ifdef _EFTSAFE
  179. #undef stat
  180. #undef stat32
  181. #undef stat64
  182. #endif
  183.  
  184. /*
  185.  * Application versions of all stat structures.
  186.  * SVID 2, and SVID 4+ "Native", 32-bit, 64-bit.
  187.  */
  188.  
  189. typedef struct
  190. #if !defined(_XOPEN_SOURCE) && !defined(_POSIX_SOURCE) \
  191.     && !defined(_POSIX_C_SOURCE)
  192.     o_stat
  193. #endif
  194. {
  195.     o_dev_t    st_dev;
  196.     o_ino_t    st_ino;
  197.     o_mode_t st_mode;
  198.     o_nlink_t st_nlink;
  199.     o_uid_t    st_uid;
  200.     o_gid_t    st_gid;
  201.     o_dev_t    st_rdev;
  202.     off32_t    st_size;
  203.     time_t    st_atime;
  204.     time_t    st_mtime;
  205.     time_t    st_ctime;
  206. } o_stat_t;
  207.  
  208. typedef struct stat
  209. {
  210.     dev_t    st_dev;
  211.     long    st_pad1[3];    /* reserved for network id */
  212.     n_ino_t    st_ino;
  213.     mode_t    st_mode;
  214.     nlink_t st_nlink;
  215.     uid_t     st_uid;
  216.     gid_t     st_gid;
  217.     dev_t    st_rdev;
  218.     long    st_pad2[2];    /* dev and off_t expansion */
  219.     n_off_t    st_size;
  220.     long    st_pad3;    /* future off_t expansion */
  221.         union {
  222.         time_t    st__sec; /* compatible: time in seconds */
  223.         timestruc_t    st__tim; /* secs+nanosecs; first is time_t */
  224.         }       st_atim,        /* time of last access */
  225.                 st_mtim,        /* time of last data modification */
  226.                 st_ctim;        /* time of last file status change */
  227.     long    st_blksize;
  228.     n_blkcnt_t st_blocks;
  229.     char    st_fstype[_ST_FSTYPSZ];
  230.     int    st_aclcnt;
  231.     level_t    st_level;
  232.     ulong_t    st_flags;    /* contains MLD flag */
  233.     level_t    st_cmwlevel;
  234.     long    st_pad4[4];    /* expansion area */
  235. } stat_t;
  236.  
  237. typedef struct
  238. #if defined(_LARGEFILE64_SOURCE) || defined(_FILE_OFFSET_BITS) \
  239.     || !defined(_XOPEN_SOURCE) && !defined(_POSIX_SOURCE) \
  240.         && !defined(_POSIX_C_SOURCE)
  241.     stat32
  242. #endif
  243. {
  244.     dev_t    st_dev;
  245.     long    st_pad1[3];    /* reserved for network id */
  246.     ino32_t    st_ino;
  247.     mode_t    st_mode;
  248.     nlink_t st_nlink;
  249.     uid_t     st_uid;
  250.     gid_t     st_gid;
  251.     dev_t    st_rdev;
  252.     long    st_pad2[2];    /* dev and off_t expansion */
  253.     off32_t    st_size;
  254.     long    st_pad3;    /* future off_t expansion */
  255.         union {
  256.         time_t    st__sec; /* compatible: time in seconds */
  257.         timestruc_t    st__tim; /* secs+nanosecs; first is time_t */
  258.         }       st_atim,        /* time of last access */
  259.                 st_mtim,        /* time of last data modification */
  260.                 st_ctim;        /* time of last file status change */
  261.     long    st_blksize;
  262.     blkcnt32_t st_blocks;
  263.     char    st_fstype[_ST_FSTYPSZ];
  264.     int    st_aclcnt;
  265.     level_t    st_level;
  266.     ulong_t    st_flags;    /* contains MLD flag */
  267.     level_t    st_cmwlevel;
  268.     long    st_pad4[4];    /* expansion area */
  269. } stat32_t;
  270.  
  271. typedef struct
  272. #if defined(_LARGEFILE64_SOURCE) || defined(_FILE_OFFSET_BITS) \
  273.     || !defined(_XOPEN_SOURCE) && !defined(_POSIX_SOURCE) \
  274.         && !defined(_POSIX_C_SOURCE)
  275.     stat64
  276. #endif
  277. {
  278.     dev_t    st_dev;
  279.     long    st_pad1[3];    /* reserved for network id */
  280.     ino64_t    st_ino;
  281.     mode_t    st_mode;
  282.     nlink_t st_nlink;
  283.     uid_t     st_uid;
  284.     gid_t     st_gid;
  285.     dev_t    st_rdev;
  286.     long    st_pad2[2];    /* dev and off_t expansion */
  287.     off64_t    st_size;    /* st_pad3 removed for SUN compatibility */
  288.         union {
  289.         time_t    st__sec; /* compatible: time in seconds */
  290.         timestruc_t    st__tim; /* secs+nanosecs; first is time_t */
  291.         }       st_atim,        /* time of last access */
  292.                 st_mtim,        /* time of last data modification */
  293.                 st_ctim;        /* time of last file status change */
  294.     long    st_blksize;
  295.     blkcnt64_t st_blocks;
  296.     char    st_fstype[_ST_FSTYPSZ];
  297.     int    st_aclcnt;
  298.     level_t    st_level;
  299.     ulong_t    st_flags;    /* contains MLD flag */
  300.     level_t    st_cmwlevel;
  301.     long    st_pad4[4];    /* expansion area */
  302. } stat64_t;
  303.  
  304. #define st_atime    st_atim.st__sec
  305. #define st_mtime    st_mtim.st__sec
  306. #define st_ctime    st_ctim.st__sec
  307.  
  308. #endif /*_KERNEL*/
  309.  
  310. /* MODE MASKS */
  311.  
  312. #define    S_IFMT        0xF000    /* type of file */
  313. #define S_IAMB        0x1FF    /* access mode bits */
  314. #define    S_IFIFO        0x1000    /* fifo */
  315. #define    S_IFCHR        0x2000    /* character special */
  316. #define    S_IFDIR        0x4000    /* directory */
  317. #define    S_IFNAM        0x5000  /* obsolete XENIX special named file */
  318. #define        S_INSEM 0x1    /* obsolete XENIX semaphore subtype of IFNAM */
  319. #define        S_INSHD 0x2    /* obsolete XENIX shared data subtype of IFNAM */
  320.  
  321. #define    S_IFBLK        0x6000    /* block special */
  322. #define    S_IFREG        0x8000    /* regular */
  323. #define    S_IFLNK        0xA000    /* symbolic link */
  324. #define    S_IFSOCK    0xC000    /* socket */
  325.  
  326. #define    S_ISUID        0x800    /* set user id on execution */
  327. #define    S_ISGID        0x400    /* set group id on execution */
  328.  
  329. #define    S_ISVTX        0x200    /* save swapped text even after use */
  330.  
  331. #define    S_IREAD        00400    /* read permission, owner */
  332. #define    S_IWRITE    00200    /* write permission, owner */
  333. #define    S_IEXEC        00100    /* execute/search permission, owner */
  334. #define    S_ENFMT        S_ISGID    /* record locking enforcement flag */
  335.  
  336. #define    S_IRWXU    00700        /* read, write, execute: owner */
  337. #define    S_IRUSR    00400        /* read permission: owner */
  338. #define    S_IWUSR    00200        /* write permission: owner */
  339. #define    S_IXUSR    00100        /* execute permission: owner */
  340. #define    S_IRWXG    00070        /* read, write, execute: group */
  341. #define    S_IRGRP    00040        /* read permission: group */
  342. #define    S_IWGRP    00020        /* write permission: group */
  343. #define    S_IXGRP    00010        /* execute permission: group */
  344. #define    S_IRWXO    00007        /* read, write, execute: other */
  345. #define    S_IROTH    00004        /* read permission: other */
  346. #define    S_IWOTH    00002        /* write permission: other */
  347. #define    S_IXOTH    00001        /* execute permission: other */
  348.  
  349. #define S_ISFIFO(mode)    ((mode&0xF000) == 0x1000)
  350. #define S_ISCHR(mode)    ((mode&0xF000) == 0x2000)
  351. #define S_ISDIR(mode)    ((mode&0xF000) == 0x4000)
  352. #define S_ISBLK(mode)    ((mode&0xF000) == 0x6000)
  353. #define S_ISREG(mode)    ((mode&0xF000) == 0x8000) 
  354. #define S_ISSOCK(mode)    ((mode&0xF000) == 0xc000) 
  355. #define S_ISLNK(mode)    ((mode&0xF000) == 0xA000) 
  356.  
  357. /* FLAGS MASKS */
  358.  
  359. #define    _S_ISMLD    0x1        /* denotes an multi-level directory */
  360. #define    _S_ISMOUNTED    0x2        /* denotes a mounted b|c device node */
  361.  
  362. #define    S_ISMLD        _S_ISMLD
  363.  
  364. /* a version number is included in the SVR4 stat and mknod interfaces. */
  365.  
  366. #define _R3_MKNOD_VER    1    /* SVR3.0 mknod */
  367. #define _MKNOD_VER    2    /* current version of mknod */
  368. #define _R3_STAT_VER    1    /* SVR3.0 stat */
  369. #define _STAT_VER    2    /* "native" SVR4.0 version of stat */
  370. #define _STAT32_VER    3    /* 32-bit version */
  371. #define _STAT64_VER    4    /* 64-bit version */
  372.  
  373. #ifndef _KERNEL
  374.  
  375. #ifdef __cplusplus
  376. extern "C" {
  377. #endif
  378.  
  379. extern int    chmod(const char *, mode_t);
  380. extern int    mkdir(const char *, mode_t);
  381. extern int    mkfifo(const char *, mode_t);
  382. extern mode_t    umask(mode_t);
  383. #if defined(_STYPES) || defined(_EFTSAFE)
  384. extern int    fstat(int, stat_t *);
  385. extern int    stat(const char *, stat_t *);
  386. #endif /*defined(_STYPES) || defined(_EFTSAFE)*/
  387.  
  388. #if defined(_XOPEN_SOURCE) && _XOPEN_SOURCE_EXTENDED - 0 >= 1 \
  389.     || !defined(_XOPEN_SOURCE) && !defined(_POSIX_SOURCE) \
  390.         && !defined(_POSIX_C_SOURCE)
  391. extern int    fchmod(int, mode_t);
  392. #if defined(_STYPES) || defined(_EFTSAFE)
  393. extern int    lstat(const char *, stat_t *);
  394. extern int    mknod(const char *, mode_t, dev_t);
  395. #endif /*defined(_STYPES) || defined(_EFTSAFE)*/
  396. #endif /*defined(_XOPEN_SOURCE) && ...*/
  397.  
  398. #ifndef _STYPES
  399.  
  400. #if defined(_LARGEFILE64_SOURCE) || defined(_FILE_OFFSET_BITS) \
  401.     || !defined(_XOPEN_SOURCE) && !defined(_POSIX_SOURCE) \
  402.         && !defined(_POSIX_C_SOURCE)
  403. extern int    fstat32(int, stat32_t *);
  404. extern int    lstat32(const char *, stat32_t *);
  405. extern int    stat32(const char *, stat32_t *);
  406. extern int    fstat64(int, stat64_t *);
  407. extern int    lstat64(const char *, stat64_t *);
  408. extern int    stat64(const char *, stat64_t *);
  409. #endif
  410.  
  411. /*
  412.  * NOTE: Application software should NOT program 
  413.  * to the _x* interfaces.
  414.  */
  415. extern int    _fxstat(int, int, stat_t *);
  416. extern int    _lxstat(int, const char *, stat_t *);
  417. extern int    _xmknod(int, const char *, mode_t, dev_t);
  418. extern int    _xstat(int, const char *, stat_t *);
  419.  
  420. #if defined(_XOPEN_SOURCE) && _XOPEN_SOURCE_EXTENDED - 0 >= 1 \
  421.     || !defined(_XOPEN_SOURCE) && !defined(_POSIX_SOURCE) \
  422.         && !defined(_POSIX_C_SOURCE)
  423. #ifdef _EFTSAFE
  424. #undef mknod
  425. #define mknod(p,m,d)    _xmknod(_MKNOD_VER,p,m,d)
  426. #else /*!_EFTSAFE*/
  427. static int
  428. mknod(const char *__p, mode_t __m, dev_t __d)
  429. {
  430.     return _xmknod(_MKNOD_VER, __p, __m, __d);
  431. }
  432. #endif /*_EFTSAFE*/
  433. #endif /*defined(_XOPEN_SOURCE) && ...*/
  434.  
  435. #ifndef _FILE_OFFSET_BITS
  436.  
  437. #ifdef _EFTSAFE
  438. #undef fstat
  439. #define fstat(f,s)    _fxstat(_STAT_VER,f,s)
  440. #undef stat
  441. #define stat(p,s)    _xstat(_STAT_VER,p,s)
  442. #else /*!_EFTSAFE*/
  443. static int
  444. fstat(int __f, stat_t *__s)
  445. {
  446.     return _fxstat(_STAT_VER, __f, __s);
  447. }
  448. static int
  449. stat(const char *__p, stat_t *__s)
  450. {
  451.     return _xstat(_STAT_VER, __p, __s);
  452. }
  453. #endif /*_EFTSAFE*/
  454.  
  455. #if defined(_XOPEN_SOURCE) && _XOPEN_SOURCE_EXTENDED - 0 >= 1 \
  456.     || !defined(_XOPEN_SOURCE) && !defined(_POSIX_SOURCE) \
  457.         && !defined(_POSIX_C_SOURCE)
  458. #ifdef _EFTSAFE
  459. #undef lstat
  460. #define lstat(p,s)    _lxstat(_STAT_VER,p,s)
  461. #else /*!_EFTSAFE*/
  462. static int
  463. lstat(const char *__p, stat_t *__s)
  464. {
  465.     return _lxstat(_STAT_VER, __p, __s);
  466. }
  467. #endif /*_EFTSAFE*/
  468. #endif /*defined(_XOPEN_SOURCE) && ...*/
  469.  
  470. #if defined(_LARGEFILE64_SOURCE) \
  471.     || !defined(_XOPEN_SOURCE) && !defined(_POSIX_SOURCE) \
  472.         && !defined(_POSIX_C_SOURCE)
  473. #ifdef _EFTSAFE
  474.  
  475. #undef fstat32
  476. #define fstat32(f,s)    _fxstat(_STAT32_VER,f,(stat_t *)(s))
  477. #undef lstat32
  478. #define lstat32(p,s)    _lxstat(_STAT32_VER,p,(stat_t *)(s))
  479. #undef stat32
  480. #define stat32(p,s)    _xstat(_STAT32_VER,p,(stat_t *)(s))
  481.  
  482. #undef fstat64
  483. #define fstat64(f,s)    _fxstat(_STAT64_VER,f,(stat_t *)(s))
  484. #undef lstat64
  485. #define lstat64(p,s)    _lxstat(_STAT64_VER,p,(stat_t *)(s))
  486. #undef stat64
  487. #define stat64(p,s)    _xstat(_STAT64_VER,p,(stat_t *)(s))
  488.  
  489. #endif /*_EFTSAFE*/
  490. #endif /*defined(_LARGEFILE64_SOURCE) || ...*/
  491.  
  492. #elif _FILE_OFFSET_BITS - 0 == 32
  493.  
  494. #undef fstat
  495. #define fstat    fstat32
  496. #undef lstat
  497. #define lstat    lstat32
  498. #undef stat
  499. #define stat    stat32
  500.  
  501. #elif _FILE_OFFSET_BITS - 0 == 64
  502.  
  503. #undef fstat
  504. #define fstat    fstat64
  505. #undef lstat
  506. #define lstat    lstat64
  507. #undef stat
  508. #define stat    stat64
  509.  
  510. #else
  511.  
  512. #error "_FILE_OFFSET_BITS, if defined, must be 32 or 64"
  513.  
  514. #endif /*_FILE_OFFSET_BITS*/
  515.  
  516. #endif /*_STYPES*/
  517.  
  518. #ifdef __cplusplus
  519. }
  520. #endif
  521.  
  522. #endif /*_KERNEL*/
  523.  
  524. #endif /*_FS_STAT_H*/
  525.