The type of the time values in a UEFI directory entry are EFI_TIME, not timeval. Signed-off-by: darylm503 Reviewed-by: lgrosenb git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@12651 6f19259b-4bc3-4df7-8a09-765794883524
		
			
				
	
	
		
			145 lines
		
	
	
		
			5.9 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			145 lines
		
	
	
		
			5.9 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/** @file
 | 
						|
  Declarations pertaining to directory entries under the UEFI environment.
 | 
						|
 | 
						|
  The information is based upon the EFI_FILE_INFO structure
 | 
						|
  in MdePkg/Include/Guid/FileInfo.h.
 | 
						|
 | 
						|
  Copyright (c) 2010 - 2011, 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
 | 
						|
  which accompanies this distribution.  The full text of the license may be found at
 | 
						|
  http://opensource.org/licenses/bsd-license.php
 | 
						|
 | 
						|
  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) 1989, 1993
 | 
						|
   The Regents of the University of California.  All rights reserved.
 | 
						|
 | 
						|
  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.
 | 
						|
 | 
						|
   @(#)dirent.h  8.3 (Berkeley) 8/10/94
 | 
						|
   NetBSD: dirent.h,v 1.23 2005/12/26 18:41:36 perry Exp
 | 
						|
**/
 | 
						|
#ifndef _SYS_DIRENT_H_
 | 
						|
#define _SYS_DIRENT_H_
 | 
						|
 | 
						|
#include  <Uefi.h>
 | 
						|
 | 
						|
#include  <sys/featuretest.h>
 | 
						|
#include  <time.h>
 | 
						|
#include  <sys/time.h>
 | 
						|
 | 
						|
#define MAXNAMLEN 511
 | 
						|
 | 
						|
/*
 | 
						|
 * The dirent structure defines the format of directory entries returned by
 | 
						|
 * read(fd, ...) when fd refers to a directory.
 | 
						|
 *
 | 
						|
 * All names are wide characters and are guaranteed to be null terminated.
 | 
						|
 * The maximum length of a name in a directory is MAXNAMLEN.
 | 
						|
 *
 | 
						|
 *  This structure is identical to the EFI_FILE_INFO structure.  A new
 | 
						|
 *  structure is declared because one must be able to refer to it
 | 
						|
 *  as struct dirent.
 | 
						|
 */
 | 
						|
struct dirent {
 | 
						|
  UINT64            Size;               // (d_reclen) Size of this dirent structure instance,
 | 
						|
                                        // including the Null-terminated FileName string.
 | 
						|
  UINT64            FileSize;           // The size of the file in bytes.
 | 
						|
  UINT64            PhysicalSize;       // The amount of physical space the file consumes
 | 
						|
                                        // on the file system volume.
 | 
						|
  EFI_TIME          CreateTime;         // The time the file was created.
 | 
						|
  EFI_TIME          LastAccessTime;     // The time when the file was last accessed.
 | 
						|
  EFI_TIME          ModificationTime;   // The time when the file's contents were last modified.
 | 
						|
  UINT64            Attribute;          // (d_type)   The attribute bits for the file. See below.
 | 
						|
  CHAR16            FileName[1];        // (d_name)   The Null-terminated name of the file.
 | 
						|
};
 | 
						|
 | 
						|
/* For compatibility */
 | 
						|
#define   d_name    FileName
 | 
						|
#define   d_type    Attribute
 | 
						|
#define   d_reclen  Size
 | 
						|
 | 
						|
 | 
						|
/*
 | 
						|
 * File Attributes
 | 
						|
 */
 | 
						|
#define DT_UNKNOWN    0
 | 
						|
#define DT_READ_ONLY  0x0000000000000001
 | 
						|
#define DT_HIDDEN     0x0000000000000002
 | 
						|
#define DT_SYSTEM     0x0000000000000004
 | 
						|
#define DT_RESERVED   0x0000000000000008
 | 
						|
#define DT_DIRECTORY  0x0000000000000010
 | 
						|
#define DT_ARCHIVE    0x0000000000000020
 | 
						|
#define DT_CHR        0x0000000000010000  // File attaches to a character device
 | 
						|
#define DT_BLK        0x0000000000020000  // File attaches to a block device
 | 
						|
#define DT_SOCKET     0x0000000000030000  // File attaches to a socket
 | 
						|
#define DT_VALID_ATTR 0x0000000000030037  // Mask for valid attribute bits
 | 
						|
 | 
						|
/*
 | 
						|
 * The _DIRENT_ALIGN macro returns the alignment of struct dirent.
 | 
						|
 * struct dirent uses 8.
 | 
						|
 */
 | 
						|
#define _DIRENT_ALIGN(dp) (sizeof((dp)->Size) - 1)
 | 
						|
 | 
						|
/*
 | 
						|
 * The _DIRENT_NAMEOFF macro returns the offset of the d_name field in
 | 
						|
 * struct dirent
 | 
						|
 */
 | 
						|
#define _DIRENT_NAMEOFF(dp) \
 | 
						|
    ((char *)(void *)&(dp)->FileName - (char *)(void *)dp)
 | 
						|
 | 
						|
/*
 | 
						|
 * The _DIRENT_RECLEN macro gives the minimum record length which will hold
 | 
						|
 * a name of size "namlen".  This requires the amount of space in struct dirent
 | 
						|
 * without the d_name field, plus enough space for the name with a terminating
 | 
						|
 * null byte (namlen+1), rounded up to a the appropriate byte boundary.
 | 
						|
 */
 | 
						|
#define _DIRENT_RECLEN(dp, namlen) \
 | 
						|
    ((_DIRENT_NAMEOFF(dp) + (namlen) + 1 + _DIRENT_ALIGN(dp)) & \
 | 
						|
    ~_DIRENT_ALIGN(dp))
 | 
						|
 | 
						|
#define _DIRENT_NAMELEN(dp) \
 | 
						|
          ((dp)->Size - _DIRENT_NAMEOFF(dp) - 1)
 | 
						|
 | 
						|
/*
 | 
						|
 * The _DIRENT_SIZE macro returns the minimum record length required for
 | 
						|
 * name name stored in the current record.
 | 
						|
 */
 | 
						|
#define _DIRENT_SIZE(dp) _DIRENT_RECLEN(dp, _DIRENT_NAMELEN(dp))
 | 
						|
 | 
						|
/*
 | 
						|
 * The _DIRENT_NEXT macro advances to the next dirent record.
 | 
						|
 */
 | 
						|
#define _DIRENT_NEXT(dp) ((void *)((char *)(void *)(dp) + (dp)->Size))
 | 
						|
 | 
						|
/*
 | 
						|
 * The _DIRENT_MINSIZE returns the size of an empty (invalid) record.
 | 
						|
 */
 | 
						|
#define _DIRENT_MINSIZE(dp) _DIRENT_RECLEN(dp, 0)
 | 
						|
 | 
						|
#endif  /* !_SYS_DIRENT_H_ */
 |