xref: /386bsd/usr/src/kernel/include/sys/stat.h (revision a2142627)
1 /*-
2  * Copyright (c) 1982, 1986, 1989 The Regents of the University of California.
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions
7  * are met:
8  * 1. Redistributions of source code must retain the above copyright
9  *    notice, this list of conditions and the following disclaimer.
10  * 2. Redistributions in binary form must reproduce the above copyright
11  *    notice, this list of conditions and the following disclaimer in the
12  *    documentation and/or other materials provided with the distribution.
13  * 3. All advertising materials mentioning features or use of this software
14  *    must display the following acknowledgement:
15  *	This product includes software developed by the University of
16  *	California, Berkeley and its contributors.
17  * 4. Neither the name of the University nor the names of its contributors
18  *    may be used to endorse or promote products derived from this software
19  *    without specific prior written permission.
20  *
21  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
22  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
23  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
24  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
25  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
26  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
27  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
28  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
29  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
30  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
31  * SUCH DAMAGE.
32  *
33  *	@(#)stat.h	7.11 (Berkeley) 3/3/91
34  */
35 
36 #ifndef _SYS_STAT_H_
37 #define _SYS_STAT_H_
38 
39 struct stat
40 {
41 	dev_t	st_dev;			/* inode's device */
42 	ino_t	st_ino;			/* inode's number */
43 	mode_t	st_mode;		/* inode protection mode */
44 	nlink_t	st_nlink;		/* number of hard links */
45 	uid_t	st_uid;			/* user ID of the file's owner */
46 	gid_t	st_gid;			/* group ID of the file's group */
47 	dev_t	st_rdev;		/* device type */
48 	off_t	st_size;		/* file size, in bytes */
49 	time_t	st_atime;		/* time of last access */
50 	long	st_spare1;
51 	time_t	st_mtime;		/* time of last data modification */
52 	long	st_spare2;
53 	time_t	st_ctime;		/* time of last file status change */
54 	long	st_spare3;
55 	long	st_blksize;		/* optimal blocksize for I/O */
56 	long	st_blocks;		/* blocks allocated for file */
57 	u_long	st_flags;		/* user defined flags for file */
58 	u_long	st_gen;			/* file generation number */
59 };
60 
61 #define	S_ISUID	0004000			/* set user id on execution */
62 #define	S_ISGID	0002000			/* set group id on execution */
63 #ifndef _POSIX_SOURCE
64 #define	S_ISTXT	0001000			/* sticky bit */
65 #endif
66 
67 #define	S_IRWXU	0000700			/* RWX mask for owner */
68 #define	S_IRUSR	0000400			/* R for owner */
69 #define	S_IWUSR	0000200			/* W for owner */
70 #define	S_IXUSR	0000100			/* X for owner */
71 
72 #ifndef _POSIX_SOURCE
73 #define	S_IREAD		S_IRUSR
74 #define	S_IWRITE	S_IWUSR
75 #define	S_IEXEC		S_IXUSR
76 #endif
77 
78 #define	S_IRWXG	0000070			/* RWX mask for group */
79 #define	S_IRGRP	0000040			/* R for group */
80 #define	S_IWGRP	0000020			/* W for group */
81 #define	S_IXGRP	0000010			/* X for group */
82 
83 #define	S_IRWXO	0000007			/* RWX mask for other */
84 #define	S_IROTH	0000004			/* R for other */
85 #define	S_IWOTH	0000002			/* W for other */
86 #define	S_IXOTH	0000001			/* X for other */
87 
88 #ifndef _POSIX_SOURCE
89 #define	S_IFMT	 0170000		/* type of file */
90 #define	S_IFIFO	 0010000		/* named pipe (fifo) */
91 #define	S_IFCHR	 0020000		/* character special */
92 #define	S_IFDIR	 0040000		/* directory */
93 #define	S_IFBLK	 0060000		/* block special */
94 #define	S_IFREG	 0100000		/* regular */
95 #define	S_IFLNK	 0120000		/* symbolic link */
96 #define	S_IFSOCK 0140000		/* socket */
97 
98 #define	S_ISVTX	 0001000		/* save swapped text even after use */
99 
100 #define S_BLKSIZE	512		/* block size used in the stat struct */
101 
102 					/* 0666 */
103 #define	DEFFILEMODE	(S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH)
104 #define	CMASK		(S_IWGRP|S_IWOTH) /* default file mask */
105 #endif
106 
107 #define	S_ISDIR(m)	((m & 0170000) == 0040000)	/* directory */
108 #define	S_ISCHR(m)	((m & 0170000) == 0020000)	/* char special */
109 #define	S_ISBLK(m)	((m & 0170000) == 0060000)	/* block special */
110 #define	S_ISREG(m)	((m & 0170000) == 0100000)	/* regular file */
111 #define	S_ISFIFO(m)	((m & 0170000) == 0010000)	/* fifo */
112 #ifndef _POSIX_SOURCE
113 #define	S_ISLNK(m)	((m & 0170000) == 0120000)	/* symbolic link */
114 #define	S_ISSOCK(m)	((m & 0170000) == 0140000)	/* socket */
115 #endif
116 
117 #ifndef KERNEL
118 #include <sys/cdefs.h>
119 
120 __BEGIN_DECLS
121 mode_t	umask __P((mode_t));
122 int	chmod __P((const char *, mode_t));
123 int	fstat __P((int, struct stat *));
124 int	mkdir __P((const char *, mode_t));
125 int	mkfifo __P((const char *, mode_t));
126 int	stat __P((const char *, struct stat *));
127 #ifndef _POSIX_SOURCE
128 int	fchmod __P((int, mode_t));
129 int	lstat __P((const char *, struct stat *));
130 #endif /* not POSIX */
131 __END_DECLS
132 #endif
133 #endif
134