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_ */
 |