home *** CD-ROM | disk | FTP | other *** search
/ NeXTSTEP 3.2 (Developer) / NS_dev_3.2.iso / NextDeveloper / Headers / bsd / sys / stat.h < prev    next >
Text File  |  1993-10-19  |  7KB  |  242 lines

  1. /* 
  2.  * Mach Operating System
  3.  * Copyright (c) 1989 Carnegie-Mellon University
  4.  * Copyright (c) 1988 Carnegie-Mellon University
  5.  * Copyright (c) 1987 Carnegie-Mellon University
  6.  * All rights reserved.  The CMU software License Agreement specifies
  7.  * the terms and conditions for use and redistribution.
  8.  */
  9. /*
  10.  * HISTORY
  11.  * $Log:    stat.h,v $
  12.  *  7-Jan-93  Mac Gillon (mgillon) at NeXT
  13.  *    Integrated POSIX support
  14.  *
  15.  * 22-Feb-90  Gregg Kellogg (gk) at NeXT
  16.  *    Added back in STAT_BSIZE, STAT_BSHIFT, btosb, and sbtob
  17.  *
  18.  * Revision 2.5  89/04/22  15:32:24  gm0w
  19.  *     Removed MACH_VFS changes.
  20.  *     [89/04/14            gm0w]
  21.  * 
  22.  * Revision 2.4  89/03/09  22:07:51  rpd
  23.  *     More cleanup.
  24.  * 
  25.  * Revision 2.3  89/02/25  17:56:28  gm0w
  26.  *     Made items previously conditional on CMUCS and MACH_VFS
  27.  *     be unconditional.
  28.  *     [89/02/14            mrt]
  29.  * 
  30.  * Revision 2.2  89/01/18  01:19:13  jsb
  31.  *     Vnode support: define S_IFIFO.
  32.  *     [89/01/13            jsb]
  33.  *
  34.  * 06-Jan-88  Jay Kistler (jjk) at Carnegie Mellon University
  35.  *    Made file reentrant.  Added declarations for __STDC__.
  36.  *
  37.  * 11-Aug-87  Peter King (king) at NeXT
  38.  *    SUN_VFS: Added S_IFIFO for nfs routines (nfs_subr.c)
  39.  *
  40.  * 11-Dec-86  Jonathan J. Chew (jjc) at Carnegie-Mellon University
  41.  *    Added a variation of the stat structure that explicitly puts
  42.  *    in padding where the Vax and RT compilers implicitly put it.
  43.  *    This is for the Sun which does not align long fields on a long
  44.  *    boundary.
  45.  *
  46.  * 25-Jan-86  Avadis Tevanian (avie) at Carnegie-Mellon University
  47.  *    Upgraded to 4.3.
  48.  *
  49.  */
  50. /*
  51.  * Copyright (c) 1982, 1986 Regents of the University of California.
  52.  * All rights reserved.  The Berkeley software License Agreement
  53.  * specifies the terms and conditions for redistribution.
  54.  *
  55.  *    @(#)stat.h    7.1 (Berkeley) 6/4/86
  56.  */
  57.  
  58. #ifndef    _SYS_STAT_H_
  59. #define _SYS_STAT_H_
  60.  
  61. #ifndef KERNEL
  62.     #include <standards.h>
  63. #endif
  64.  
  65. #import <sys/types.h>
  66.  
  67. #if defined(_POSIX_SOURCE) || defined(_NEXT_SOURCE)
  68.     struct    stat
  69.     {
  70.         dev_t    st_dev;        /* File device number */
  71.         ino_t    st_ino;        /* File serial number */
  72.     #if defined(_POSIX_SOURCE)    
  73.         mode_t    st_mode;    /* File type and access */
  74.                     /* permissions */
  75.         nlink_t    st_nlink;    /* File link count */
  76.     #else
  77.         unsigned short st_mode;    
  78.         short st_nlink;    
  79.     #endif  /* _POSIX_SOURCE */
  80.         uid_t    st_uid;        /* File owner's user ID */
  81.         gid_t    st_gid;        /* File owner's group ID */
  82.         dev_t    st_rdev;
  83.         off_t    st_size;    /* File size in bytes */
  84.                     /* (for regular file only) */
  85.         time_t    st_atime;    /* Time of last file access */
  86.         int    st_spare1;
  87.         time_t    st_mtime;    /* Time of last file */
  88.                     /* modification */
  89.         int    st_spare2;
  90.         time_t    st_ctime;    /* Time of last file status */
  91.                     /* change */
  92.         int    st_spare3;
  93.         long    st_blksize;
  94.         long    st_blocks;
  95.         long    st_spare4[2];
  96.         };
  97. #endif /* _POSIX_SOURCE || _NEXT_SOURCE */
  98.  
  99. #ifdef    sun
  100. /*
  101.  *    Explicitly padded stat structure
  102.  */
  103. struct    padded_stat
  104. {
  105.     dev_t    st_dev;
  106.     short    st_shortpad1;    /* pad so next field starts on long bound. */
  107.     ino_t    st_ino;
  108.     unsigned short st_mode;
  109.     short    st_nlink;
  110.     uid_t    st_uid;
  111.     gid_t    st_gid;
  112.     dev_t    st_rdev;
  113.     short    st_shortpad2;    /* pad so next field starts on long bound. */
  114.     off_t    st_size;
  115.     time_t    st_atime;
  116.     int    st_spare1;
  117.     time_t    st_mtime;
  118.     int    st_spare2;
  119.     time_t    st_ctime;
  120.     int    st_spare3;
  121.     long    st_blksize;
  122.     long    st_blocks;
  123.     long    st_spare4[2];
  124. };
  125. #endif    sun
  126.  
  127. #if defined(_POSIX_SOURCE) || defined(_NEXT_SOURCE)
  128.     #define    _S_IFMT        0170000        /* type of file */
  129.     #define       _S_IFDIR    0040000        /* directory */
  130.     #define       _S_IFCHR    0020000        /* character special */
  131.     #define       _S_IFBLK    0060000        /* block special */
  132.     #define       _S_IFREG    0100000        /* regular */
  133.     #define       _S_IFLNK    0120000        /* symbolic link */
  134.     #define       _S_IFSOCK    0140000        /* socket */
  135.     #define       _S_IFIFO    0010000        /* fifo (SUN_VFS) */
  136.     #define    _S_IRUSR    0000400        /* read permission, */
  137.                         /* owner */
  138.     #define    _S_IWUSR    0000200        /* write permission, */
  139.                         /* owner */
  140.     #define    _S_IXUSR    0000100        /* execute/search */
  141.                         /* permission, owner */
  142.  
  143.     #define    S_ISGID        0002000        /* set group id on */
  144.                         /* execution */
  145.     #define    S_ISUID        0004000        /* set user id on */
  146.                         /* execution */
  147. #endif /* _POSIX_SOURCE || _NEXT_SOURCE */
  148.  
  149. #ifdef _POSIX_SOURCE
  150.     #define S_IRUSR    _S_IRUSR    /* read permission, owner */
  151.     #define S_IRGRP    0000040        /* read permission, group */
  152.     #define S_IROTH    0000004        /* read permission, other */
  153.     #define S_IWUSR    _S_IWUSR    /* write permission, owner */
  154.     #define S_IWGRP    0000020        /* write permission, group */
  155.     #define S_IWOTH    0000002        /* write permission, other */
  156.     #define S_IXUSR    _S_IXUSR    /* execute/search permission, */
  157.                     /* owner */
  158.     #define S_IXGRP    0000010        /* execute/search permission, */
  159.                     /* group */
  160.     #define S_IXOTH    0000001        /* execute/search permission, */
  161.                     /* other */
  162.     #define S_IRWXU    0000700        /* read, write, execute */
  163.                     /* permissions, owner */
  164.     #define S_IRWXG    0000070        /* read, write, execute */
  165.                     /* permissions, group */
  166.     #define S_IRWXO    0000007        /* read, write, execute */
  167.                     /* permissions, other */
  168.  
  169.     #define S_ISBLK(mode)    (((mode) & (_S_IFMT)) == (_S_IFBLK))
  170.     #define S_ISCHR(mode)    (((mode) & (_S_IFMT)) == (_S_IFCHR))
  171.     #define S_ISDIR(mode)    (((mode) & (_S_IFMT)) == (_S_IFDIR))
  172.     #define S_ISFIFO(mode)    (((mode) & (_S_IFMT)) == (_S_IFIFO))
  173.     #define S_ISREG(mode)    (((mode) & (_S_IFMT)) == (_S_IFREG))
  174. #endif /* _POSIX_SOURCE */
  175.  
  176.  
  177. #ifdef _NEXT_SOURCE
  178.     #define    S_IFMT        _S_IFMT        /* type of file */
  179.     #define        S_IFDIR    _S_IFDIR    /* directory */
  180.     #define        S_IFCHR    _S_IFCHR    /* character special */
  181.     #define        S_IFBLK    _S_IFBLK    /* block special */
  182.     #define        S_IFREG    _S_IFREG    /* regular */
  183.     #define        S_IFLNK    _S_IFLNK    /* symbolic link */
  184.     #define        S_IFSOCK    _S_IFSOCK    /* socket */
  185.     #define        S_IFIFO    _S_IFIFO    /* fifo (SUN_VFS) */
  186.     #define    S_ISVTX        0001000        /* save swapped text */
  187.                         /* even after use */
  188.     #define    S_IREAD        _S_IRUSR    /* read permission, */
  189.                         /* owner */
  190.     #define    S_IWRITE     _S_IWUSR    /* write permission, */
  191.                         /* owner */
  192.     #define    S_IEXEC        _S_IXUSR    /* execute/search */
  193.                         /* permission, owner */
  194.  
  195.     #define    STAT_BSIZE    512    /* Size of blocks reported in */
  196.                     /* st_blocks */
  197.     #define    STAT_BSHIFT    9    /* log2(STAT_BSIZE) */
  198.  
  199.     #define    btosb(bytes)    ((unsigned)(bytes) >> STAT_BSHIFT)
  200.                 /* calculates (bytes / STAT_BSIZE) */
  201.     #define sbtob(db)    ((unsigned)(db) << STAT_BSHIFT)
  202.                 /* calculates (db * STAT_BSIZE) */
  203. #endif /* _NEXT_SOURCE */
  204.  
  205. #ifndef KERNEL
  206.     #ifdef _NEXT_SOURCE
  207.         #ifdef __STDC__
  208.             extern int lstat(const char *, struct stat *);
  209.         #else
  210.             extern int lstat();
  211.         #endif /* __STDC__ */
  212.     #endif /* _NEXT_SOURCE */
  213.  
  214.     #ifdef _POSIX_SOURCE
  215.         #ifdef __STDC__
  216.             extern int chmod(const char *path, mode_t mode);
  217.             extern int mkdir(const char *path, mode_t mode);
  218.             extern int mkfifo(const char *path, mode_t mode);
  219.             extern mode_t umask(mode_t cmask);
  220.         #else
  221.             extern int chmod();
  222.             extern int mkdir();
  223.             extern int mkfifo();
  224.             extern mode_t umask();
  225.         #endif /* __STDC__ */
  226.     #endif /* _POSIX_SOURCE */
  227.  
  228.     #if defined(_POSIX_SOURCE) || defined(_NEXT_SOURCE)
  229.         #ifdef __STDC__
  230.             extern int fstat(int fildes, struct stat *buf);
  231.             extern int stat(const char *path,
  232.                 struct stat *buf);
  233.         #else
  234.             extern int fstat();
  235.             extern int stat();
  236.         #endif /* __STDC__ */
  237.     #endif /* _POSIX_SOURCE || _NEXT_SOURCE */
  238. #endif /* !KERNEL */
  239. #endif    _SYS_STAT_H_
  240.  
  241.  
  242.