]> git.proxmox.com Git - mirror_edk2.git/blame - StdLib/Include/sys/stat.h
StdLib: Fix some build problems and obscure bugs.
[mirror_edk2.git] / StdLib / Include / sys / stat.h
CommitLineData
2aa62f2b 1/** @file\r
2\r
0164fc8e 3 Copyright (c) 2010 - 2014, 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
8379337c 7 http://opensource.org/licenses/bsd-license.\r
2aa62f2b 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
8379337c 51#include <sys/types.h>\r
2aa62f2b 52#include <sys/time.h>\r
53\r
54struct stat {\r
8379337c 55 off_t st_size; ///< file size, in bytes\r
56 off_t st_physsize; ///< physical space the file consumes\r
57 off_t st_curpos; ///< current position within the file, or XY coord. for Console\r
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
2aa62f2b 64 uint32_t st_spare[1];\r
65};\r
66\r
8379337c 67#define S_ISUID 0004000 ///< set user id on execution\r
68#define S_ISGID 0002000 ///< set group id on execution\r
69#define S_ISTXT 0001000 ///< sticky bit\r
70\r
71#define S_IRWXU 0000700 ///< RWX mask for owner\r
72#define S_IRUSR 0000400 ///< R for owner\r
73#define S_IWUSR 0000200 ///< W for owner\r
74#define S_IXUSR 0000100 ///< X for owner\r
2aa62f2b 75\r
76#define S_IREAD S_IRUSR\r
77#define S_IWRITE S_IWUSR\r
78#define S_IEXEC S_IXUSR\r
79\r
8379337c 80#define S_IRWXG 0000070 ///< RWX mask for group\r
81#define S_IRGRP 0000040 ///< R for group\r
82#define S_IWGRP 0000020 ///< W for group\r
83#define S_IXGRP 0000010 ///< X for group\r
2aa62f2b 84\r
8379337c 85#define S_IRWXO 0000007 ///< RWX mask for other\r
86#define S_IROTH 0000004 ///< R for other\r
87#define S_IWOTH 0000002 ///< W for other\r
88#define S_IXOTH 0000001 ///< X for other\r
2aa62f2b 89\r
90/* The Octal access modes, above, fall into the Hex mask 0x00000FFF.\r
91 Traditionally, the remainder of the flags are specified in Octal\r
92 but they are expressed in Hex here for modern clarity.\r
a9c12422 93\r
94 The basic file types, specified within 0x0000F000, are mutually exclusive.\r
2aa62f2b 95*/\r
8379337c 96#define _S_IFMT 0x000FF000 ///< type-of-file mask\r
97#define _S_IFIFO 0x00001000 ///< named pipe (fifo)\r
a9c12422 98#define _S_IFCHR 0x00002000 ///< character special device\r
8379337c 99#define _S_IFDIR 0x00004000 ///< directory\r
a9c12422 100#define _S_IFBLK 0x00006000 ///< block special device\r
8379337c 101#define _S_IFREG 0x00008000 ///< regular\r
102#define _S_IFSOCK 0x0000C000 ///< socket\r
103#define _S_ITTY 0x00010000 ///< File connects to a TTY device\r
a9c12422 104#define _S_IWTTY 0x00020000 ///< TTY sends and receives Wide characters\r
8379337c 105#define _S_ICONSOLE 0x00030000 ///< UEFI Console Device\r
2aa62f2b 106\r
107/* UEFI specific (FAT file system) File attributes.\r
53e1e5c6 108 Specified in Hexadecimal instead of Octal.\r
2aa62f2b 109 These bits correspond to the xx portion of _S_IFMT\r
110*/\r
111#define S_IREADONLY 0x00100000 // Read Only File\r
112#define S_IHIDDEN 0x00200000 // Hidden File\r
113#define S_ISYSTEM 0x00400000 // System File\r
114#define S_IDIRECTORY 0x01000000 // Directory\r
115#define S_IARCHIVE 0x02000000 // Archive Bit\r
8379337c 116#define S_IROFS 0x08000000 ///< Read Only File System\r
2aa62f2b 117\r
0c1992fb 118#define S_EFIONLY 0xFFF00000 ///< Flags only used by the EFI system calls.\r
53e1e5c6 119\r
2aa62f2b 120#define S_EFISHIFT 20 // LS bit of the UEFI attributes\r
121\r
0164fc8e 122#define S_IFMT _S_IFMT\r
123#define S_IFIFO _S_IFIFO\r
124#define S_IFCHR _S_IFCHR\r
125#define S_IFDIR _S_IFDIR\r
126#define S_IFBLK _S_IFBLK\r
127#define S_IFREG _S_IFREG\r
128#define S_IFSOCK _S_IFSOCK\r
129#define S_ITTY _S_ITTY\r
130#define S_IWTTY _S_IWTTY\r
131#define S_ICONSOLE _S_ICONSOLE\r
2aa62f2b 132\r
0164fc8e 133#define S_ISFIFO(m) ((m & _S_IFMT) == _S_IFIFO) ///< fifo\r
8379337c 134#define S_ISCHR(m) ((m & _S_IFMT) == _S_IFCHR) ///< char special\r
0164fc8e 135#define S_ISDIR(m) ((m & _S_IFMT) == _S_IFDIR) ///< directory\r
8379337c 136#define S_ISBLK(m) ((m & _S_IFMT) == _S_IFBLK) ///< block special\r
0164fc8e 137#define S_ISREG(m) ((m & _S_IFMT) == _S_IFREG) ///< regular file\r
8379337c 138#define S_ISSOCK(m) ((m & _S_IFMT) == _S_IFSOCK) ///< socket\r
2aa62f2b 139\r
2aa62f2b 140\r
141/* The following three macros have been changed to reflect\r
142 access permissions that better reflect the UEFI FAT file system.\r
143 UEFI only supports Read or Read+Write instead of the *nix\r
144 rwx paradigm. Thus, using 0777 is the closest analog.\r
145*/\r
8379337c 146#define ACCESSPERMS (S_IRWXU|S_IRWXG|S_IRWXO) ///< 0777\r
147#define ALLPERMS (S_IRWXU|S_IRWXG|S_IRWXO) ///< 0777\r
148#define DEFFILEMODE (S_IRWXU|S_IRWXG|S_IRWXO) ///< 0777\r
2aa62f2b 149\r
0c1992fb 150#define READ_PERMS (S_IRUSR | S_IRGRP | S_IROTH) ///< 0444\r
151#define WRITE_PERMS (S_IWUSR | S_IWGRP | S_IWOTH) ///< 0222\r
152#define EXEC_PERMS (S_IXUSR | S_IXGRP | S_IXOTH) ///< 0111\r
153\r
8379337c 154#define S_BLKSIZE 512 ///< block size used in the stat struct\r
2aa62f2b 155\r
156/*\r
157 * Definitions of flags stored in file flags word.\r
158 *\r
159 * Super-user and owner changeable flags.\r
160 */\r
8379337c 161#define UF_SETTABLE 0x0000ffff ///< mask of owner changeable flags\r
162#define UF_NODUMP 0x00000001 ///< do not dump file\r
163#define UF_IMMUTABLE 0x00000002 ///< file may not be changed\r
164#define UF_APPEND 0x00000004 ///< writes to file may only append\r
2aa62f2b 165/* UF_NOUNLINK 0x00000010 [NOT IMPLEMENTED] */\r
166/*\r
167 * Super-user changeable flags.\r
168 */\r
8379337c 169#define SF_SETTABLE 0xffff0000 ///< mask of superuser changeable flags\r
170#define SF_ARCHIVED 0x00010000 ///< file is archived\r
171#define SF_IMMUTABLE 0x00020000 ///< file may not be changed\r
172#define SF_APPEND 0x00040000 ///< writes to file may only append\r
2aa62f2b 173/* SF_NOUNLINK 0x00100000 [NOT IMPLEMENTED] */\r
174\r
175#include <sys/EfiCdefs.h>\r
176\r
177__BEGIN_DECLS\r
178#ifndef __STAT_SYSCALLS_DECLARED\r
179 #define __STAT_SYSCALLS_DECLARED\r
8379337c 180\r
0c1992fb 181 /**\r
182 **/\r
183 mode_t umask (mode_t);\r
184\r
185 /**\r
186 **/\r
187 int mkdir (const char *, mode_t);\r
8379337c 188\r
189 /**\r
190 **/\r
0c1992fb 191 int fstat (int, struct stat *);\r
8379337c 192\r
193 /**\r
194 **/\r
0c1992fb 195 int lstat (const char *, struct stat *);\r
8379337c 196\r
0164fc8e 197/** Obtains information about the file pointed to by path.\r
198\r
199 Opens the file pointed to by path, calls _EFI_FileInfo with the file's handle,\r
200 then closes the file.\r
201\r
202 @param[in] path Path to the file to obtain information about.\r
203 @param[out] statbuf Buffer in which the file status is put.\r
204\r
205 @retval 0 Successful Completion.\r
206 @retval -1 An error has occurred and errno has been set to\r
207 identify the error.\r
208**/\r
0c1992fb 209 int stat (const char *, struct stat *);\r
8379337c 210\r
211 /**\r
212 **/\r
0c1992fb 213 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