home *** CD-ROM | disk | FTP | other *** search
- /*
- * Copyright (c) 1998 The Santa Cruz Operation, Inc.. All Rights Reserved.
- *
- * THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF THE
- * SANTA CRUZ OPERATION INC.
- *
- * The copyright notice above does not evidence any actual or intended
- * publication of such source code.
- */
-
- #ifndef _FS_STAT_H /* wrapper symbol for kernel use */
- #define _FS_STAT_H /* subject to change without notice */
- #define _SYS_STAT_H /* SVR4.0COMPAT */
- #ident "@(#)kern:fs/stat.h 1.16.5.2"
-
- #ifdef _KERNEL_HEADERS
-
- #include <util/types.h> /* REQUIRED */
- #include <svc/time.h> /* REQUIRED */
-
- #elif defined(_KERNEL) || defined(_KMEMUSER)
-
- #include <sys/types.h> /* REQUIRED */
- #include <sys/time.h> /* REQUIRED */
-
- #elif defined(_XOPEN_SOURCE) && _XOPEN_SOURCE_EXTENDED - 0 >= 1
-
- #include <sys/types.h>
-
- #ifndef _TIMESTRUC_T
- #define _TIMESTRUC_T
-
- typedef struct
- #if defined(_POSIX_TIMERS) || _POSIX_C_SOURCE - 0 >= 199309 \
- || !defined(_XOPEN_SOURCE) && !defined(_POSIX_SOURCE) \
- && !defined(_POSIX_C_SOURCE)
- #ifndef _TIMESPEC
- #define _TIMESPEC
- timespec
- #endif
- #endif /*defined(_POSIX_TIMERS) || ...*/
- {
- #ifdef tv_sec
- time_t __tv_sec; /* seconds */
- #else
- time_t tv_sec; /* seconds */
- #endif
- #ifdef tv_nsec
- long __tv_nsec; /* and nanoseconds */
- #else
- long tv_nsec; /* and nanoseconds */
- #endif
- } timestruc_t;
-
- #endif /*_TIMESTRUC_T*/
-
- #else
-
- #include <sys/types.h>
- #include <sys/time.h>
-
- #endif /*_KERNEL_HEADERS*/
-
- #define _ST_FSTYPSZ 16 /* array size for file system type name */
-
- /*
- * stat structure, used by stat(2) and fstat(2)
- */
-
- #ifdef _KERNEL
-
- struct stat {
- o_dev_t st_dev;
- o_ino_t st_ino;
- o_mode_t st_mode;
- o_nlink_t st_nlink;
- o_uid_t st_uid;
- o_gid_t st_gid;
- o_dev_t st_rdev;
- off32_t st_size;
- time_t st_atime;
- time_t st_mtime;
- time_t st_ctime;
- };
-
- typedef struct xstat {
- dev_t st_dev;
- long st_pad1[3]; /* reserve for dev expansion, sysid def. */
- n_ino_t st_ino;
- mode_t st_mode;
- nlink_t st_nlink;
- uid_t st_uid;
- gid_t st_gid;
- dev_t st_rdev;
- long st_pad2[2]; /* dev and off_t expansion */
- n_off_t st_size;
- long st_pad3; /* reserve pad for future off_t expansion */
- timestruc_t st_atime;
- timestruc_t st_mtime;
- timestruc_t st_ctime;
- long st_blksize;
- n_blkcnt_t st_blocks;
- char st_fstype[_ST_FSTYPSZ];
- int st_aclcnt;
- lid_t st_level;
- ulong_t st_flags; /* contains MLD flag */
- lid_t st_cmwlevel;
- long st_pad4[4]; /* expansion area */
- } stat_t;
-
- typedef struct xstat32 {
- dev_t st_dev;
- long st_pad1[3]; /* reserve for dev expansion, sysid def. */
- ino32_t st_ino;
- mode_t st_mode;
- nlink_t st_nlink;
- uid_t st_uid;
- gid_t st_gid;
- dev_t st_rdev;
- long st_pad2[2]; /* dev and off_t expansion */
- off32_t st_size;
- long st_pad3; /* reserve pad for future off_t expansion */
- timestruc_t st_atime;
- timestruc_t st_mtime;
- timestruc_t st_ctime;
- long st_blksize;
- blkcnt32_t st_blocks;
- char st_fstype[_ST_FSTYPSZ];
- int st_aclcnt;
- lid_t st_level;
- ulong_t st_flags; /* contains MLD flag */
- lid_t st_cmwlevel;
- long st_pad4[4]; /* expansion area */
- } stat32_t;
-
- typedef struct xstat64 {
- dev_t st_dev;
- long st_pad1[3]; /* reserve for dev expansion, sysid def. */
- ino64_t st_ino;
- mode_t st_mode;
- nlink_t st_nlink;
- uid_t st_uid;
- gid_t st_gid;
- dev_t st_rdev;
- long st_pad2[2]; /* dev and off_t expansion */
- off64_t st_size; /* st_pad3 removed for SUN compatibility */
- timestruc_t st_atime;
- timestruc_t st_mtime;
- timestruc_t st_ctime;
- long st_blksize;
- blkcnt64_t st_blocks;
- char st_fstype[_ST_FSTYPSZ];
- int st_aclcnt;
- lid_t st_level;
- ulong_t st_flags; /* contains MLD flag */
- lid_t st_cmwlevel;
- long st_pad4[4]; /* expansion area */
- } stat64_t;
-
- #elif defined(_STYPES) /* SVID 2 structure; no LFS mapping */
-
- typedef struct stat {
- o_dev_t st_dev;
- o_ino_t st_ino;
- o_mode_t st_mode;
- o_nlink_t st_nlink;
- o_uid_t st_uid;
- o_gid_t st_gid;
- o_dev_t st_rdev;
- off32_t st_size;
- time_t st_atime;
- time_t st_mtime;
- time_t st_ctime;
- } stat_t;
-
- #else /*!_STYPES && !_KERNEL*/
-
- #ifdef _EFTSAFE
- #undef stat
- #undef stat32
- #undef stat64
- #endif
-
- /*
- * Application versions of all stat structures.
- * SVID 2, and SVID 4+ "Native", 32-bit, 64-bit.
- */
-
- typedef struct
- #if !defined(_XOPEN_SOURCE) && !defined(_POSIX_SOURCE) \
- && !defined(_POSIX_C_SOURCE)
- o_stat
- #endif
- {
- o_dev_t st_dev;
- o_ino_t st_ino;
- o_mode_t st_mode;
- o_nlink_t st_nlink;
- o_uid_t st_uid;
- o_gid_t st_gid;
- o_dev_t st_rdev;
- off32_t st_size;
- time_t st_atime;
- time_t st_mtime;
- time_t st_ctime;
- } o_stat_t;
-
- typedef struct stat
- {
- dev_t st_dev;
- long st_pad1[3]; /* reserved for network id */
- n_ino_t st_ino;
- mode_t st_mode;
- nlink_t st_nlink;
- uid_t st_uid;
- gid_t st_gid;
- dev_t st_rdev;
- long st_pad2[2]; /* dev and off_t expansion */
- n_off_t st_size;
- long st_pad3; /* future off_t expansion */
- union {
- time_t st__sec; /* compatible: time in seconds */
- timestruc_t st__tim; /* secs+nanosecs; first is time_t */
- } st_atim, /* time of last access */
- st_mtim, /* time of last data modification */
- st_ctim; /* time of last file status change */
- long st_blksize;
- n_blkcnt_t st_blocks;
- char st_fstype[_ST_FSTYPSZ];
- int st_aclcnt;
- level_t st_level;
- ulong_t st_flags; /* contains MLD flag */
- level_t st_cmwlevel;
- long st_pad4[4]; /* expansion area */
- } stat_t;
-
- typedef struct
- #if defined(_LARGEFILE64_SOURCE) || defined(_FILE_OFFSET_BITS) \
- || !defined(_XOPEN_SOURCE) && !defined(_POSIX_SOURCE) \
- && !defined(_POSIX_C_SOURCE)
- stat32
- #endif
- {
- dev_t st_dev;
- long st_pad1[3]; /* reserved for network id */
- ino32_t st_ino;
- mode_t st_mode;
- nlink_t st_nlink;
- uid_t st_uid;
- gid_t st_gid;
- dev_t st_rdev;
- long st_pad2[2]; /* dev and off_t expansion */
- off32_t st_size;
- long st_pad3; /* future off_t expansion */
- union {
- time_t st__sec; /* compatible: time in seconds */
- timestruc_t st__tim; /* secs+nanosecs; first is time_t */
- } st_atim, /* time of last access */
- st_mtim, /* time of last data modification */
- st_ctim; /* time of last file status change */
- long st_blksize;
- blkcnt32_t st_blocks;
- char st_fstype[_ST_FSTYPSZ];
- int st_aclcnt;
- level_t st_level;
- ulong_t st_flags; /* contains MLD flag */
- level_t st_cmwlevel;
- long st_pad4[4]; /* expansion area */
- } stat32_t;
-
- typedef struct
- #if defined(_LARGEFILE64_SOURCE) || defined(_FILE_OFFSET_BITS) \
- || !defined(_XOPEN_SOURCE) && !defined(_POSIX_SOURCE) \
- && !defined(_POSIX_C_SOURCE)
- stat64
- #endif
- {
- dev_t st_dev;
- long st_pad1[3]; /* reserved for network id */
- ino64_t st_ino;
- mode_t st_mode;
- nlink_t st_nlink;
- uid_t st_uid;
- gid_t st_gid;
- dev_t st_rdev;
- long st_pad2[2]; /* dev and off_t expansion */
- off64_t st_size; /* st_pad3 removed for SUN compatibility */
- union {
- time_t st__sec; /* compatible: time in seconds */
- timestruc_t st__tim; /* secs+nanosecs; first is time_t */
- } st_atim, /* time of last access */
- st_mtim, /* time of last data modification */
- st_ctim; /* time of last file status change */
- long st_blksize;
- blkcnt64_t st_blocks;
- char st_fstype[_ST_FSTYPSZ];
- int st_aclcnt;
- level_t st_level;
- ulong_t st_flags; /* contains MLD flag */
- level_t st_cmwlevel;
- long st_pad4[4]; /* expansion area */
- } stat64_t;
-
- #define st_atime st_atim.st__sec
- #define st_mtime st_mtim.st__sec
- #define st_ctime st_ctim.st__sec
-
- #endif /*_KERNEL*/
-
- /* MODE MASKS */
-
- #define S_IFMT 0xF000 /* type of file */
- #define S_IAMB 0x1FF /* access mode bits */
- #define S_IFIFO 0x1000 /* fifo */
- #define S_IFCHR 0x2000 /* character special */
- #define S_IFDIR 0x4000 /* directory */
- #define S_IFNAM 0x5000 /* obsolete XENIX special named file */
- #define S_INSEM 0x1 /* obsolete XENIX semaphore subtype of IFNAM */
- #define S_INSHD 0x2 /* obsolete XENIX shared data subtype of IFNAM */
-
- #define S_IFBLK 0x6000 /* block special */
- #define S_IFREG 0x8000 /* regular */
- #define S_IFLNK 0xA000 /* symbolic link */
- #define S_IFSOCK 0xC000 /* socket */
-
- #define S_ISUID 0x800 /* set user id on execution */
- #define S_ISGID 0x400 /* set group id on execution */
-
- #define S_ISVTX 0x200 /* save swapped text even after use */
-
- #define S_IREAD 00400 /* read permission, owner */
- #define S_IWRITE 00200 /* write permission, owner */
- #define S_IEXEC 00100 /* execute/search permission, owner */
- #define S_ENFMT S_ISGID /* record locking enforcement flag */
-
- #define S_IRWXU 00700 /* read, write, execute: owner */
- #define S_IRUSR 00400 /* read permission: owner */
- #define S_IWUSR 00200 /* write permission: owner */
- #define S_IXUSR 00100 /* execute permission: owner */
- #define S_IRWXG 00070 /* read, write, execute: group */
- #define S_IRGRP 00040 /* read permission: group */
- #define S_IWGRP 00020 /* write permission: group */
- #define S_IXGRP 00010 /* execute permission: group */
- #define S_IRWXO 00007 /* read, write, execute: other */
- #define S_IROTH 00004 /* read permission: other */
- #define S_IWOTH 00002 /* write permission: other */
- #define S_IXOTH 00001 /* execute permission: other */
-
- #define S_ISFIFO(mode) ((mode&0xF000) == 0x1000)
- #define S_ISCHR(mode) ((mode&0xF000) == 0x2000)
- #define S_ISDIR(mode) ((mode&0xF000) == 0x4000)
- #define S_ISBLK(mode) ((mode&0xF000) == 0x6000)
- #define S_ISREG(mode) ((mode&0xF000) == 0x8000)
- #define S_ISSOCK(mode) ((mode&0xF000) == 0xc000)
- #define S_ISLNK(mode) ((mode&0xF000) == 0xA000)
-
- /* FLAGS MASKS */
-
- #define _S_ISMLD 0x1 /* denotes an multi-level directory */
- #define _S_ISMOUNTED 0x2 /* denotes a mounted b|c device node */
-
- #define S_ISMLD _S_ISMLD
-
- /* a version number is included in the SVR4 stat and mknod interfaces. */
-
- #define _R3_MKNOD_VER 1 /* SVR3.0 mknod */
- #define _MKNOD_VER 2 /* current version of mknod */
- #define _R3_STAT_VER 1 /* SVR3.0 stat */
- #define _STAT_VER 2 /* "native" SVR4.0 version of stat */
- #define _STAT32_VER 3 /* 32-bit version */
- #define _STAT64_VER 4 /* 64-bit version */
-
- #ifndef _KERNEL
-
- #ifdef __cplusplus
- extern "C" {
- #endif
-
- extern int chmod(const char *, mode_t);
- extern int mkdir(const char *, mode_t);
- extern int mkfifo(const char *, mode_t);
- extern mode_t umask(mode_t);
- #if defined(_STYPES) || defined(_EFTSAFE)
- extern int fstat(int, stat_t *);
- extern int stat(const char *, stat_t *);
- #endif /*defined(_STYPES) || defined(_EFTSAFE)*/
-
- #if defined(_XOPEN_SOURCE) && _XOPEN_SOURCE_EXTENDED - 0 >= 1 \
- || !defined(_XOPEN_SOURCE) && !defined(_POSIX_SOURCE) \
- && !defined(_POSIX_C_SOURCE)
- extern int fchmod(int, mode_t);
- #if defined(_STYPES) || defined(_EFTSAFE)
- extern int lstat(const char *, stat_t *);
- extern int mknod(const char *, mode_t, dev_t);
- #endif /*defined(_STYPES) || defined(_EFTSAFE)*/
- #endif /*defined(_XOPEN_SOURCE) && ...*/
-
- #ifndef _STYPES
-
- #if defined(_LARGEFILE64_SOURCE) || defined(_FILE_OFFSET_BITS) \
- || !defined(_XOPEN_SOURCE) && !defined(_POSIX_SOURCE) \
- && !defined(_POSIX_C_SOURCE)
- extern int fstat32(int, stat32_t *);
- extern int lstat32(const char *, stat32_t *);
- extern int stat32(const char *, stat32_t *);
- extern int fstat64(int, stat64_t *);
- extern int lstat64(const char *, stat64_t *);
- extern int stat64(const char *, stat64_t *);
- #endif
-
- /*
- * NOTE: Application software should NOT program
- * to the _x* interfaces.
- */
- extern int _fxstat(int, int, stat_t *);
- extern int _lxstat(int, const char *, stat_t *);
- extern int _xmknod(int, const char *, mode_t, dev_t);
- extern int _xstat(int, const char *, stat_t *);
-
- #if defined(_XOPEN_SOURCE) && _XOPEN_SOURCE_EXTENDED - 0 >= 1 \
- || !defined(_XOPEN_SOURCE) && !defined(_POSIX_SOURCE) \
- && !defined(_POSIX_C_SOURCE)
- #ifdef _EFTSAFE
- #undef mknod
- #define mknod(p,m,d) _xmknod(_MKNOD_VER,p,m,d)
- #else /*!_EFTSAFE*/
- static int
- mknod(const char *__p, mode_t __m, dev_t __d)
- {
- return _xmknod(_MKNOD_VER, __p, __m, __d);
- }
- #endif /*_EFTSAFE*/
- #endif /*defined(_XOPEN_SOURCE) && ...*/
-
- #ifndef _FILE_OFFSET_BITS
-
- #ifdef _EFTSAFE
- #undef fstat
- #define fstat(f,s) _fxstat(_STAT_VER,f,s)
- #undef stat
- #define stat(p,s) _xstat(_STAT_VER,p,s)
- #else /*!_EFTSAFE*/
- static int
- fstat(int __f, stat_t *__s)
- {
- return _fxstat(_STAT_VER, __f, __s);
- }
- static int
- stat(const char *__p, stat_t *__s)
- {
- return _xstat(_STAT_VER, __p, __s);
- }
- #endif /*_EFTSAFE*/
-
- #if defined(_XOPEN_SOURCE) && _XOPEN_SOURCE_EXTENDED - 0 >= 1 \
- || !defined(_XOPEN_SOURCE) && !defined(_POSIX_SOURCE) \
- && !defined(_POSIX_C_SOURCE)
- #ifdef _EFTSAFE
- #undef lstat
- #define lstat(p,s) _lxstat(_STAT_VER,p,s)
- #else /*!_EFTSAFE*/
- static int
- lstat(const char *__p, stat_t *__s)
- {
- return _lxstat(_STAT_VER, __p, __s);
- }
- #endif /*_EFTSAFE*/
- #endif /*defined(_XOPEN_SOURCE) && ...*/
-
- #if defined(_LARGEFILE64_SOURCE) \
- || !defined(_XOPEN_SOURCE) && !defined(_POSIX_SOURCE) \
- && !defined(_POSIX_C_SOURCE)
- #ifdef _EFTSAFE
-
- #undef fstat32
- #define fstat32(f,s) _fxstat(_STAT32_VER,f,(stat_t *)(s))
- #undef lstat32
- #define lstat32(p,s) _lxstat(_STAT32_VER,p,(stat_t *)(s))
- #undef stat32
- #define stat32(p,s) _xstat(_STAT32_VER,p,(stat_t *)(s))
-
- #undef fstat64
- #define fstat64(f,s) _fxstat(_STAT64_VER,f,(stat_t *)(s))
- #undef lstat64
- #define lstat64(p,s) _lxstat(_STAT64_VER,p,(stat_t *)(s))
- #undef stat64
- #define stat64(p,s) _xstat(_STAT64_VER,p,(stat_t *)(s))
-
- #endif /*_EFTSAFE*/
- #endif /*defined(_LARGEFILE64_SOURCE) || ...*/
-
- #elif _FILE_OFFSET_BITS - 0 == 32
-
- #undef fstat
- #define fstat fstat32
- #undef lstat
- #define lstat lstat32
- #undef stat
- #define stat stat32
-
- #elif _FILE_OFFSET_BITS - 0 == 64
-
- #undef fstat
- #define fstat fstat64
- #undef lstat
- #define lstat lstat64
- #undef stat
- #define stat stat64
-
- #else
-
- #error "_FILE_OFFSET_BITS, if defined, must be 32 or 64"
-
- #endif /*_FILE_OFFSET_BITS*/
-
- #endif /*_STYPES*/
-
- #ifdef __cplusplus
- }
- #endif
-
- #endif /*_KERNEL*/
-
- #endif /*_FS_STAT_H*/
-