Home | History | Annotate | Download | only in sys
      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