BSD 4_4_Lite2 release
[unix-history] / usr / src / sys / sys / stat.h
index 9304bb4..c471bdc 100644 (file)
 /*-
 /*-
- * Copyright (c) 1982, 1986, 1989 The Regents of the University of California.
- * All rights reserved.
+ * Copyright (c) 1982, 1986, 1989, 1993
+ *     The Regents of the University of California.  All rights reserved.
+ * (c) UNIX System Laboratories, Inc.
+ * All or some portions of this file are derived from material licensed
+ * to the University of California by American Telephone and Telegraph
+ * Co. or Unix System Laboratories, Inc. and are reproduced herein with
+ * the permission of UNIX System Laboratories, Inc.
  *
  *
- * %sccs.include.redist.c%
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ *    must display the following acknowledgement:
+ *     This product includes software developed by the University of
+ *     California, Berkeley and its contributors.
+ * 4. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
  *
  *
- *     @(#)stat.h      7.20 (Berkeley) %G%
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ *     @(#)stat.h      8.12 (Berkeley) 6/16/95
  */
 
  */
 
+#ifndef _SYS_STAT_H_
+#define        _SYS_STAT_H_
+
 #include <sys/time.h>
 
 #include <sys/time.h>
 
+#ifndef _POSIX_SOURCE
 struct ostat {
 struct ostat {
-       unsigned short  st_dev;         /* inode's device */
-       ino_t   st_ino;                 /* inode's number */
-       mode_t  st_mode;                /* inode protection mode */
-       nlink_t st_nlink;               /* number of hard links */
-       unsigned short  st_uid;         /* user ID of the file's owner */
-       unsigned short  st_gid;         /* group ID of the file's group */
-       unsigned short  st_rdev;        /* device type */
-       long    st_size;                /* file size, in bytes */
+       u_int16_t st_dev;               /* inode's device */
+       ino_t     st_ino;               /* inode's number */
+       mode_t    st_mode;              /* inode protection mode */
+       nlink_t   st_nlink;             /* number of hard links */
+       u_int16_t st_uid;               /* user ID of the file's owner */
+       u_int16_t st_gid;               /* group ID of the file's group */
+       u_int16_t st_rdev;              /* device type */
+       int32_t   st_size;              /* file size, in bytes */
        struct  timespec st_atimespec;  /* time of last access */
        struct  timespec st_mtimespec;  /* time of last data modification */
        struct  timespec st_ctimespec;  /* time of last file status change */
        struct  timespec st_atimespec;  /* time of last access */
        struct  timespec st_mtimespec;  /* time of last data modification */
        struct  timespec st_ctimespec;  /* time of last file status change */
-       long    st_blksize;             /* optimal blocksize for I/O */
-       long    st_blocks;              /* blocks allocated for file */
-       unsigned long   st_flags;       /* user defined flags for file */
-       unsigned long   st_gen;         /* file generation number */
+       int32_t   st_blksize;           /* optimal blocksize for I/O */
+       int32_t   st_blocks;            /* blocks allocated for file */
+       u_int32_t st_flags;             /* user defined flags for file */
+       u_int32_t st_gen;               /* file generation number */
 };
 };
+#endif /* !_POSIX_SOURCE */
 
 struct stat {
 
 struct stat {
-       dev_t   st_dev;                 /* inode's device */
-       ino_t   st_ino;                 /* inode's number */
-       mode_t  st_mode;                /* inode protection mode */
-       nlink_t st_nlink;               /* number of hard links */
-       uid_t   st_uid;                 /* user ID of the file's owner */
-       gid_t   st_gid;                 /* group ID of the file's group */
-       dev_t   st_rdev;                /* device type */
+       dev_t     st_dev;               /* inode's device */
+       ino_t     st_ino;               /* inode's number */
+       mode_t    st_mode;              /* inode protection mode */
+       nlink_t   st_nlink;             /* number of hard links */
+       uid_t     st_uid;               /* user ID of the file's owner */
+       gid_t     st_gid;               /* group ID of the file's group */
+       dev_t     st_rdev;              /* device type */
+#ifndef _POSIX_SOURCE
        struct  timespec st_atimespec;  /* time of last access */
        struct  timespec st_mtimespec;  /* time of last data modification */
        struct  timespec st_ctimespec;  /* time of last file status change */
        struct  timespec st_atimespec;  /* time of last access */
        struct  timespec st_mtimespec;  /* time of last data modification */
        struct  timespec st_ctimespec;  /* time of last file status change */
-       off_t   st_size;                /* file size, in bytes */
-       quad_t  st_blocks;              /* blocks allocated for file */
-       unsigned long   st_blksize;     /* optimal blocksize for I/O */
-       unsigned long   st_flags;       /* user defined flags for file */
-       unsigned long   st_gen;         /* file generation number */
-       long    st_lspare;
-       quad_t  st_qspare[2];
+#else
+       time_t    st_atime;             /* time of last access */
+       long      st_atimensec;         /* nsec of last access */
+       time_t    st_mtime;             /* time of last data modification */
+       long      st_mtimensec;         /* nsec of last data modification */
+       time_t    st_ctime;             /* time of last file status change */
+       long      st_ctimensec;         /* nsec of last file status change */
+#endif
+       off_t     st_size;              /* file size, in bytes */
+       int64_t   st_blocks;            /* blocks allocated for file */
+       u_int32_t st_blksize;           /* optimal blocksize for I/O */
+       u_int32_t st_flags;             /* user defined flags for file */
+       u_int32_t st_gen;               /* file generation number */
+       int32_t   st_lspare;
+       int64_t   st_qspare[2];
 };
 };
+#ifndef _POSIX_SOURCE
 #define st_atime st_atimespec.ts_sec
 #define st_mtime st_mtimespec.ts_sec
 #define st_ctime st_ctimespec.ts_sec
 #define st_atime st_atimespec.ts_sec
 #define st_mtime st_mtimespec.ts_sec
 #define st_ctime st_ctimespec.ts_sec
+#endif
 
 #define        S_ISUID 0004000                 /* set user id on execution */
 #define        S_ISGID 0002000                 /* set group id on execution */
 
 #define        S_ISUID 0004000                 /* set user id on execution */
 #define        S_ISGID 0002000                 /* set group id on execution */
@@ -86,6 +133,7 @@ struct stat {
 #define        S_IFREG  0100000                /* regular */
 #define        S_IFLNK  0120000                /* symbolic link */
 #define        S_IFSOCK 0140000                /* socket */
 #define        S_IFREG  0100000                /* regular */
 #define        S_IFLNK  0120000                /* symbolic link */
 #define        S_IFSOCK 0140000                /* socket */
+#define        S_IFWHT  0160000                /* whiteout */
 #define        S_ISVTX  0001000                /* save swapped text even after use */
 #endif
 
 #define        S_ISVTX  0001000                /* save swapped text even after use */
 #endif
 
@@ -93,13 +141,19 @@ struct stat {
 #define        S_ISCHR(m)      ((m & 0170000) == 0020000)      /* char special */
 #define        S_ISBLK(m)      ((m & 0170000) == 0060000)      /* block special */
 #define        S_ISREG(m)      ((m & 0170000) == 0100000)      /* regular file */
 #define        S_ISCHR(m)      ((m & 0170000) == 0020000)      /* char special */
 #define        S_ISBLK(m)      ((m & 0170000) == 0060000)      /* block special */
 #define        S_ISREG(m)      ((m & 0170000) == 0100000)      /* regular file */
-#define        S_ISFIFO(m)     ((m & 0170000) == 0010000)      /* fifo */
+#define        S_ISFIFO(m)     ((m & 0170000) == 0010000 || \
+                        (m & 0170000) == 0140000)      /* fifo or socket */
 #ifndef _POSIX_SOURCE
 #define        S_ISLNK(m)      ((m & 0170000) == 0120000)      /* symbolic link */
 #ifndef _POSIX_SOURCE
 #define        S_ISLNK(m)      ((m & 0170000) == 0120000)      /* symbolic link */
-#define        S_ISSOCK(m)     ((m & 0170000) == 0140000)      /* socket */
+#define        S_ISSOCK(m)     ((m & 0170000) == 0010000 || \
+                        (m & 0170000) == 0140000)      /* fifo or socket */
+#define        S_ISWHT(m)      ((m & 0170000) == 0160000)      /* whiteout */
 #endif
 
 #ifndef _POSIX_SOURCE
 #endif
 
 #ifndef _POSIX_SOURCE
+#define        ACCESSPERMS     (S_IRWXU|S_IRWXG|S_IRWXO)       /* 0777 */
+                                                       /* 7777 */
+#define        ALLPERMS        (S_ISUID|S_ISGID|S_ISTXT|S_IRWXU|S_IRWXG|S_IRWXO)
                                                        /* 0666 */
 #define        DEFFILEMODE     (S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH)
 
                                                        /* 0666 */
 #define        DEFFILEMODE     (S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH)
 
@@ -114,6 +168,7 @@ struct stat {
 #define        UF_NODUMP       0x00000001      /* do not dump file */
 #define        UF_IMMUTABLE    0x00000002      /* file may not be changed */
 #define        UF_APPEND       0x00000004      /* writes to file may only append */
 #define        UF_NODUMP       0x00000001      /* do not dump file */
 #define        UF_IMMUTABLE    0x00000002      /* file may not be changed */
 #define        UF_APPEND       0x00000004      /* writes to file may only append */
+#define UF_OPAQUE      0x00000008      /* directory is opaque wrt. union */
 /*
  * Super-user changeable flags.
  */
 /*
  * Super-user changeable flags.
  */
@@ -126,6 +181,7 @@ struct stat {
 /*
  * Shorthand abbreviations of above.
  */
 /*
  * Shorthand abbreviations of above.
  */
+#define        OPAQUE          (UF_OPAQUE)
 #define        APPEND          (UF_APPEND | SF_APPEND)
 #define        IMMUTABLE       (UF_IMMUTABLE | SF_IMMUTABLE)
 #endif
 #define        APPEND          (UF_APPEND | SF_APPEND)
 #define        IMMUTABLE       (UF_IMMUTABLE | SF_IMMUTABLE)
 #endif
@@ -149,3 +205,4 @@ int lstat __P((const char *, struct stat *));
 #endif
 __END_DECLS
 #endif
 #endif
 __END_DECLS
 #endif
+#endif /* !_SYS_STAT_H_ */