]> git.proxmox.com Git - mirror_edk2.git/blame - StdLib/Include/sys/stat.h
Add Socket Libraries.
[mirror_edk2.git] / StdLib / Include / sys / stat.h
CommitLineData
2aa62f2b 1/** @file\r
2\r
53e1e5c6 3 Copyright (c) 2010 - 2011, Intel Corporation. All rights reserved.<BR>\r
2aa62f2b 4 This program and the accompanying materials are licensed and made\r
5 available under the terms and conditions of the BSD License that\r
6 accompanies this distribution. The full text of the license may be found at\r
7 http://opensource.org/licenses/bsd-license.php.\r
8\r
9 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
10 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
11\r
12 Copyright (c) 1982, 1986, 1989, 1993\r
13 The Regents of the University of California. All rights reserved.\r
14 (c) UNIX System Laboratories, Inc.\r
15 All or some portions of this file are derived from material licensed\r
16 to the University of California by American Telephone and Telegraph\r
17 Co. or Unix System Laboratories, Inc. and are reproduced herein with\r
18 the permission of UNIX System Laboratories, Inc.\r
19\r
20 Redistribution and use in source and binary forms, with or without\r
21 modification, are permitted provided that the following conditions\r
22 are met:\r
23 1. Redistributions of source code must retain the above copyright\r
24 notice, this list of conditions and the following disclaimer.\r
25 2. Redistributions in binary form must reproduce the above copyright\r
26 notice, this list of conditions and the following disclaimer in the\r
27 documentation and/or other materials provided with the distribution.\r
28 3. Neither the name of the University nor the names of its contributors\r
29 may be used to endorse or promote products derived from this software\r
30 without specific prior written permission.\r
31\r
32 THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND\r
33 ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r
34 IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r
35 ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE\r
36 FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r
37 DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\r
38 OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\r
39 HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\r
40 LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\r
41 OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\r
42 SUCH DAMAGE.\r
43\r
44 stat.h 8.12 (Berkeley) 8/17/94\r
45 NetBSD: stat.h,v 1.54 2006/02/24 22:01:30 thorpej Exp\r
46 */\r
47#ifndef _SYS_STAT_H_\r
48#define _SYS_STAT_H_\r
49\r
50#include <sys/featuretest.h>\r
51#include <sys/types.h> /* XXX */\r
52#include <sys/time.h>\r
53\r
54struct stat {\r
55 off_t st_size; /* file size, in bytes */\r
56 off_t st_physsize; /* physical space the file consumes */\r
53e1e5c6 57 off_t st_curpos; /* current position within the file, or XY coord. for Console */\r
2aa62f2b 58 dtime_t st_birthtime; /* time of creation */\r
59 dtime_t st_atime; /* time of last access */\r
60 dtime_t st_mtime; /* time of last data modification */\r
61 mode_t st_mode; /* file attributes */\r
62\r
63 blksize_t st_blksize; /* optimal blocksize for I/O */\r
64#if 0\r
65 uint32_t st_flags; /* user defined flags for file */\r
66 blkcnt_t st_blocks; /* blocks allocated for file */\r
67 ino_t st_ino; /* inode's number */\r
68 time_t st_ctime; /* time of last file status change */\r
69 nlink_t st_nlink; /* number of hard links */\r
70 uid_t st_uid; /* user ID of the file's owner */\r
71 gid_t st_gid; /* group ID of the file's group */\r
72 dev_t st_dev; /* inode's device */\r
73 dev_t st_rdev; /* device type */\r
74 uint32_t st_gen; /* file generation number */\r
75#endif\r
76 uint32_t st_spare[1];\r
77};\r
78\r
79#if 0\r
80#define st_atime st_atimespec.tv_sec\r
81#define st_atimensec st_atimespec.tv_nsec\r
82#define st_mtime st_mtimespec.tv_sec\r
83#define st_mtimensec st_mtimespec.tv_nsec\r
84#define st_ctime st_ctimespec.tv_sec\r
85#define st_ctimensec st_ctimespec.tv_nsec\r
86#define st_birthtime st_birthtimespec.tv_sec\r
87#define st_birthtimensec st_birthtimespec.tv_nsec\r
88#endif\r
89\r
90#define S_ISUID 0004000 /* set user id on execution */\r
91#define S_ISGID 0002000 /* set group id on execution */\r
92#define S_ISTXT 0001000 /* sticky bit */\r
93\r
94#define S_IRWXU 0000700 /* RWX mask for owner */\r
95#define S_IRUSR 0000400 /* R for owner */\r
96#define S_IWUSR 0000200 /* W for owner */\r
97#define S_IXUSR 0000100 /* X for owner */\r
98\r
99#define S_IREAD S_IRUSR\r
100#define S_IWRITE S_IWUSR\r
101#define S_IEXEC S_IXUSR\r
102\r
103#define S_IRWXG 0000070 /* RWX mask for group */\r
104#define S_IRGRP 0000040 /* R for group */\r
105#define S_IWGRP 0000020 /* W for group */\r
106#define S_IXGRP 0000010 /* X for group */\r
107\r
108#define S_IRWXO 0000007 /* RWX mask for other */\r
109#define S_IROTH 0000004 /* R for other */\r
110#define S_IWOTH 0000002 /* W for other */\r
111#define S_IXOTH 0000001 /* X for other */\r
112\r
113/* The Octal access modes, above, fall into the Hex mask 0x00000FFF.\r
114 Traditionally, the remainder of the flags are specified in Octal\r
115 but they are expressed in Hex here for modern clarity.\r
116*/\r
53e1e5c6 117#define _S_IFMT 0x000FF000 /* type-of-file mask */\r
118#define _S_IFIFO 0x00001000 /* named pipe (fifo) */\r
2aa62f2b 119#define _S_IFCHR 0x00002000 /* character special */\r
120#define _S_IFDIR 0x00004000 /* directory */\r
121#define _S_IFBLK 0x00006000 /* block special */\r
122#define _S_IFREG 0x00008000 /* regular */\r
123#define _S_IFSOCK 0x0000C000 /* socket */\r
124#define _S_ITTY 0x00010000 /* File connects to a TTY device */\r
125#define _S_IWTTY 0x00020000 /* TTY receives Wide characters */\r
53e1e5c6 126#define _S_ICONSOLE 0x00030000 /* UEFI Console Device */\r
2aa62f2b 127\r
128/* UEFI specific (FAT file system) File attributes.\r
53e1e5c6 129 Specified in Hexadecimal instead of Octal.\r
2aa62f2b 130 These bits correspond to the xx portion of _S_IFMT\r
131*/\r
132#define S_IREADONLY 0x00100000 // Read Only File\r
133#define S_IHIDDEN 0x00200000 // Hidden File\r
134#define S_ISYSTEM 0x00400000 // System File\r
135#define S_IDIRECTORY 0x01000000 // Directory\r
136#define S_IARCHIVE 0x02000000 // Archive Bit\r
137#define S_IROFS 0x08000000 /* Read Only File System */\r
138\r
53e1e5c6 139#define S_EFIONLY 0xF0000000 /* Flags only used by the EFI system calls. */\r
140\r
2aa62f2b 141#define S_EFISHIFT 20 // LS bit of the UEFI attributes\r
142\r
2aa62f2b 143//#define _S_IFLNK 0120000 /* symbolic link */\r
144//#define _S_IFWHT 0160000 /* whiteout */\r
145//#define _S_ARCH1 0200000 /* Archive state 1, ls -l shows 'a' */\r
146//#define _S_ARCH2 0400000 /* Archive state 2, ls -l shows 'A' */\r
147//#define _S_ISVTX 0001000 /* ???? save swapped text even after use */\r
148\r
149\r
150#define S_IFMT _S_IFMT\r
151#define S_IFBLK _S_IFBLK\r
152#define S_IFREG _S_IFREG\r
53e1e5c6 153#define S_IFIFO _S_IFIFO\r
154#define S_IFCHR _S_IFCHR\r
155#define S_IFDIR _S_IFDIR\r
2aa62f2b 156//#define S_IFLNK _S_IFLNK\r
157//#define S_ISVTX _S_ISVTX\r
53e1e5c6 158#define S_IFSOCK _S_IFSOCK\r
2aa62f2b 159//#define S_IFWHT _S_IFWHT\r
160\r
161//#define S_ARCH1 _S_ARCH1\r
162//#define S_ARCH2 _S_ARCH2\r
163\r
164#define S_ISDIR(m) ((m & _S_IFMT) == _S_IFDIR) /* directory */\r
165#define S_ISCHR(m) ((m & _S_IFMT) == _S_IFCHR) /* char special */\r
166#define S_ISREG(m) ((m & _S_IFMT) == _S_IFREG) /* regular file */\r
167#define S_ISBLK(m) ((m & _S_IFMT) == _S_IFBLK) /* block special */\r
168#define S_ISSOCK(m) ((m & _S_IFMT) == _S_IFSOCK) /* socket */\r
169\r
53e1e5c6 170#define S_ISFIFO(m) ((m & _S_IFMT) == _S_IFIFO) /* fifo */\r
2aa62f2b 171//#define S_ISLNK(m) ((m & _S_IFMT) == _S_IFLNK) /* symbolic link */\r
172//#define S_ISWHT(m) ((m & _S_IFMT) == _S_IFWHT) /* whiteout */\r
173\r
174/* The following three macros have been changed to reflect\r
175 access permissions that better reflect the UEFI FAT file system.\r
176 UEFI only supports Read or Read+Write instead of the *nix\r
177 rwx paradigm. Thus, using 0777 is the closest analog.\r
178*/\r
179#define ACCESSPERMS (S_IRWXU|S_IRWXG|S_IRWXO) /* 0777 */\r
180#define ALLPERMS (S_IRWXU|S_IRWXG|S_IRWXO) /* 0777 */\r
181#define DEFFILEMODE (S_IRWXU|S_IRWXG|S_IRWXO) /* 0777 */\r
182\r
183#define S_BLKSIZE 512 /* block size used in the stat struct */\r
184\r
185/*\r
186 * Definitions of flags stored in file flags word.\r
187 *\r
188 * Super-user and owner changeable flags.\r
189 */\r
190#define UF_SETTABLE 0x0000ffff /* mask of owner changeable flags */\r
191#define UF_NODUMP 0x00000001 /* do not dump file */\r
192#define UF_IMMUTABLE 0x00000002 /* file may not be changed */\r
193#define UF_APPEND 0x00000004 /* writes to file may only append */\r
194/* UF_NOUNLINK 0x00000010 [NOT IMPLEMENTED] */\r
195/*\r
196 * Super-user changeable flags.\r
197 */\r
198#define SF_SETTABLE 0xffff0000 /* mask of superuser changeable flags */\r
199#define SF_ARCHIVED 0x00010000 /* file is archived */\r
200#define SF_IMMUTABLE 0x00020000 /* file may not be changed */\r
201#define SF_APPEND 0x00040000 /* writes to file may only append */\r
202/* SF_NOUNLINK 0x00100000 [NOT IMPLEMENTED] */\r
203\r
204#include <sys/EfiCdefs.h>\r
205\r
206__BEGIN_DECLS\r
207#ifndef __STAT_SYSCALLS_DECLARED\r
208 #define __STAT_SYSCALLS_DECLARED\r
209 extern int mkdir (const char *, mode_t);\r
210 extern int fstat (int, struct stat *);\r
211 extern int lstat (const char *, struct stat *);\r
212 extern int stat (const char *, void *);\r
d7ce7006 213 extern int chmod (const char *, mode_t);\r
2aa62f2b 214#endif // __STAT_SYSCALLS_DECLARED\r
215__END_DECLS\r
216\r
217#endif /* !_SYS_STAT_H_ */\r