Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Daryl McDaniel <daryl.mcdaniel@intel.com> Reviewed-by: Jaben Carsey <jcarsey@intel.com> git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@13735 6f19259b-4bc3-4df7-8a09-765794883524
		
			
				
	
	
		
			205 lines
		
	
	
		
			8.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			205 lines
		
	
	
		
			8.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/** @file
 | 
						|
 | 
						|
    Copyright (c) 2010 - 2012, Intel Corporation. All rights reserved.<BR>
 | 
						|
    This program and the accompanying materials are licensed and made
 | 
						|
    available under  the terms and conditions of the BSD License that
 | 
						|
    accompanies this distribution. The full text of the license may be found at
 | 
						|
    http://opensource.org/licenses/bsd-license.
 | 
						|
 | 
						|
    THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
 | 
						|
    WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
 | 
						|
 | 
						|
    Copyright (c) 1982, 1986, 1989, 1993
 | 
						|
     The Regents of the University of California.  All rights reserved.
 | 
						|
    (c) UNIX System Laboratories, Inc.
 | 
						|
    All or some portions of this file are derived from material licensed
 | 
						|
    to the University of California by American Telephone and Telegraph
 | 
						|
    Co. or Unix System Laboratories, Inc. and are reproduced herein with
 | 
						|
    the permission of UNIX System Laboratories, Inc.
 | 
						|
 | 
						|
    Redistribution and use in source and binary forms, with or without
 | 
						|
    modification, are permitted provided that the following conditions
 | 
						|
    are met:
 | 
						|
    1. Redistributions of source code must retain the above copyright
 | 
						|
       notice, this list of conditions and the following disclaimer.
 | 
						|
    2. Redistributions in binary form must reproduce the above copyright
 | 
						|
       notice, this list of conditions and the following disclaimer in the
 | 
						|
       documentation and/or other materials provided with the distribution.
 | 
						|
    3. Neither the name of the University nor the names of its contributors
 | 
						|
       may be used to endorse or promote products derived from this software
 | 
						|
       without specific prior written permission.
 | 
						|
 | 
						|
    THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
 | 
						|
    ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
						|
    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 | 
						|
    ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
 | 
						|
    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 | 
						|
    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 | 
						|
    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 | 
						|
    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 | 
						|
    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 | 
						|
    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 | 
						|
    SUCH DAMAGE.
 | 
						|
 | 
						|
    stat.h  8.12 (Berkeley) 8/17/94
 | 
						|
    NetBSD: stat.h,v 1.54 2006/02/24 22:01:30 thorpej Exp
 | 
						|
 */
 | 
						|
#ifndef _SYS_STAT_H_
 | 
						|
#define _SYS_STAT_H_
 | 
						|
 | 
						|
#include  <sys/featuretest.h>
 | 
						|
#include  <sys/types.h>
 | 
						|
#include  <sys/time.h>
 | 
						|
 | 
						|
struct stat {
 | 
						|
  off_t           st_size;          ///< file size, in bytes
 | 
						|
  off_t           st_physsize;      ///< physical space the file consumes
 | 
						|
  off_t           st_curpos;        ///< current position within the file, or XY coord. for Console
 | 
						|
  dtime_t         st_birthtime;     ///< time of creation
 | 
						|
  dtime_t         st_atime;         ///< time of last access
 | 
						|
  dtime_t         st_mtime;         ///< time of last data modification
 | 
						|
  mode_t          st_mode;          ///< file attributes
 | 
						|
 | 
						|
  blksize_t       st_blksize;       ///< optimal blocksize for I/O
 | 
						|
  uint32_t        st_spare[1];
 | 
						|
};
 | 
						|
 | 
						|
#define S_ISUID       0004000     ///< set user id on execution
 | 
						|
#define S_ISGID       0002000     ///< set group id on execution
 | 
						|
#define S_ISTXT       0001000     ///< sticky bit
 | 
						|
 | 
						|
#define S_IRWXU       0000700     ///< RWX mask for owner
 | 
						|
#define S_IRUSR       0000400     ///< R for owner
 | 
						|
#define S_IWUSR       0000200     ///< W for owner
 | 
						|
#define S_IXUSR       0000100     ///< X for owner
 | 
						|
 | 
						|
#define S_IREAD       S_IRUSR
 | 
						|
#define S_IWRITE      S_IWUSR
 | 
						|
#define S_IEXEC       S_IXUSR
 | 
						|
 | 
						|
#define S_IRWXG       0000070     ///< RWX mask for group
 | 
						|
#define S_IRGRP       0000040     ///< R for group
 | 
						|
#define S_IWGRP       0000020     ///< W for group
 | 
						|
#define S_IXGRP       0000010     ///< X for group
 | 
						|
 | 
						|
#define S_IRWXO       0000007     ///< RWX mask for other
 | 
						|
#define S_IROTH       0000004     ///< R for other
 | 
						|
#define S_IWOTH       0000002     ///< W for other
 | 
						|
#define S_IXOTH       0000001     ///< X for other
 | 
						|
 | 
						|
/*  The Octal access modes, above, fall into the Hex mask 0x00000FFF.
 | 
						|
    Traditionally, the remainder of the flags are specified in Octal
 | 
						|
    but they are expressed in Hex here for modern clarity.
 | 
						|
 | 
						|
    The basic file types, specified within 0x0000F000, are mutually exclusive.
 | 
						|
*/
 | 
						|
#define _S_IFMT       0x000FF000   ///< type-of-file mask
 | 
						|
#define _S_IFIFO      0x00001000   ///< named pipe (fifo)
 | 
						|
#define _S_IFCHR      0x00002000   ///< character special device
 | 
						|
#define _S_IFDIR      0x00004000   ///< directory
 | 
						|
#define _S_IFBLK      0x00006000   ///< block special device
 | 
						|
#define _S_IFREG      0x00008000   ///< regular
 | 
						|
#define _S_IFSOCK     0x0000C000   ///< socket
 | 
						|
#define _S_ITTY       0x00010000   ///< File connects to a TTY device
 | 
						|
#define _S_IWTTY      0x00020000   ///< TTY sends and receives Wide characters
 | 
						|
#define _S_ICONSOLE   0x00030000   ///< UEFI Console Device
 | 
						|
 | 
						|
/*  UEFI specific (FAT file system) File attributes.
 | 
						|
    Specified in Hexadecimal instead of Octal.
 | 
						|
    These bits correspond to the xx portion of _S_IFMT
 | 
						|
*/
 | 
						|
#define S_IREADONLY   0x00100000    // Read Only File
 | 
						|
#define S_IHIDDEN     0x00200000    // Hidden File
 | 
						|
#define S_ISYSTEM     0x00400000    // System File
 | 
						|
#define S_IDIRECTORY  0x01000000    // Directory
 | 
						|
#define S_IARCHIVE    0x02000000    // Archive Bit
 | 
						|
#define S_IROFS       0x08000000   ///< Read Only File System
 | 
						|
 | 
						|
#define S_EFIONLY     0xFFF00000  ///< Flags only used by the EFI system calls.
 | 
						|
 | 
						|
#define S_EFISHIFT    20            // LS bit of the UEFI attributes
 | 
						|
 | 
						|
#define S_IFMT   _S_IFMT
 | 
						|
#define S_IFBLK  _S_IFBLK
 | 
						|
#define S_IFREG  _S_IFREG
 | 
						|
#define S_IFIFO  _S_IFIFO
 | 
						|
#define S_IFCHR  _S_IFCHR
 | 
						|
#define S_IFDIR  _S_IFDIR
 | 
						|
#define S_IFSOCK _S_IFSOCK
 | 
						|
 | 
						|
#define S_ISDIR(m)  ((m & _S_IFMT) == _S_IFDIR)   ///< directory
 | 
						|
#define S_ISCHR(m)  ((m & _S_IFMT) == _S_IFCHR)   ///< char special
 | 
						|
#define S_ISREG(m)  ((m & _S_IFMT) == _S_IFREG)   ///< regular file
 | 
						|
#define S_ISBLK(m)  ((m & _S_IFMT) == _S_IFBLK)   ///< block special
 | 
						|
#define S_ISSOCK(m) ((m & _S_IFMT) == _S_IFSOCK)  ///< socket
 | 
						|
 | 
						|
#define S_ISFIFO(m) ((m & _S_IFMT) == _S_IFIFO)   ///< fifo
 | 
						|
 | 
						|
/*  The following three macros have been changed to reflect
 | 
						|
    access permissions that better reflect the UEFI FAT file system.
 | 
						|
    UEFI only supports Read or Read+Write instead of the *nix
 | 
						|
    rwx paradigm.  Thus, using 0777 is the closest analog.
 | 
						|
*/
 | 
						|
#define ACCESSPERMS (S_IRWXU|S_IRWXG|S_IRWXO)     ///< 0777
 | 
						|
#define ALLPERMS  (S_IRWXU|S_IRWXG|S_IRWXO)       ///< 0777
 | 
						|
#define DEFFILEMODE (S_IRWXU|S_IRWXG|S_IRWXO)     ///< 0777
 | 
						|
 | 
						|
#define READ_PERMS  (S_IRUSR | S_IRGRP | S_IROTH)   ///< 0444
 | 
						|
#define WRITE_PERMS (S_IWUSR | S_IWGRP | S_IWOTH)   ///< 0222
 | 
						|
#define EXEC_PERMS  (S_IXUSR | S_IXGRP | S_IXOTH)   ///< 0111
 | 
						|
 | 
						|
#define S_BLKSIZE 512   ///< block size used in the stat struct
 | 
						|
 | 
						|
/*
 | 
						|
 * Definitions of flags stored in file flags word.
 | 
						|
 *
 | 
						|
 * Super-user and owner changeable flags.
 | 
						|
 */
 | 
						|
#define UF_SETTABLE   0x0000ffff  ///< mask of owner changeable flags
 | 
						|
#define UF_NODUMP     0x00000001  ///< do not dump file
 | 
						|
#define UF_IMMUTABLE  0x00000002  ///< file may not be changed
 | 
						|
#define UF_APPEND     0x00000004  ///< writes to file may only append
 | 
						|
/*  UF_NOUNLINK 0x00000010     [NOT IMPLEMENTED] */
 | 
						|
/*
 | 
						|
 * Super-user changeable flags.
 | 
						|
 */
 | 
						|
#define SF_SETTABLE   0xffff0000  ///< mask of superuser changeable flags
 | 
						|
#define SF_ARCHIVED   0x00010000  ///< file is archived
 | 
						|
#define SF_IMMUTABLE  0x00020000  ///< file may not be changed
 | 
						|
#define SF_APPEND     0x00040000  ///< writes to file may only append
 | 
						|
/*  SF_NOUNLINK 0x00100000     [NOT IMPLEMENTED] */
 | 
						|
 | 
						|
#include  <sys/EfiCdefs.h>
 | 
						|
 | 
						|
__BEGIN_DECLS
 | 
						|
#ifndef __STAT_SYSCALLS_DECLARED
 | 
						|
  #define __STAT_SYSCALLS_DECLARED
 | 
						|
 | 
						|
  /**
 | 
						|
  **/
 | 
						|
  mode_t  umask (mode_t);
 | 
						|
 | 
						|
  /**
 | 
						|
  **/
 | 
						|
  int     mkdir (const char *, mode_t);
 | 
						|
 | 
						|
  /**
 | 
						|
  **/
 | 
						|
  int     fstat (int, struct stat *);
 | 
						|
 | 
						|
  /**
 | 
						|
  **/
 | 
						|
  int     lstat (const char *, struct stat *);
 | 
						|
 | 
						|
  /**
 | 
						|
  **/
 | 
						|
  int     stat  (const char *, struct stat *);
 | 
						|
 | 
						|
  /**
 | 
						|
  **/
 | 
						|
  int     chmod (const char *, mode_t);
 | 
						|
#endif  // __STAT_SYSCALLS_DECLARED
 | 
						|
__END_DECLS
 | 
						|
 | 
						|
#endif /* !_SYS_STAT_H_ */
 |