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