/*++

Copyright (c) 2014 Minoca Corp. All Rights Reserved

Module Name:

    fileinfo.h

Abstract:

    This header contains definitions for EFI File information.

Author:

    Evan Green 13-Mar-2014

--*/

//
// ------------------------------------------------------------------- Includes
//

//
// --------------------------------------------------------------------- Macros
//

//
// The file name field of the EFI_FILE_INFO data structure is variable length.
// Whenever code needs to know the size of the EFI_FILE_INFO data structure, it
// needs to be the size of the data structure without the file name field.
// The following macro computes this size correctly no matter how big the file
// name array is declared. This is required to make the EFI_FILE_INFO data
// structure ANSI compilant.
//

#define SIZE_OF_EFI_FILE_INFO OFFSET_OF(EFI_FILE_INFO, FileName)

//
// ---------------------------------------------------------------- Definitions
//

#define EFI_FILE_INFO_ID                                    \
    {                                                       \
        0x9576E92, 0x6D3F, 0x11D2,                          \
        {0x8E, 0x39, 0x00, 0xA0, 0xC9, 0x69, 0x72, 0x3B}    \
    }

//
// ------------------------------------------------------ Data Type Definitions
//

/*++

Structure Description:

    This structure defines EFI file information.

Members:

    Size - Stores the size of the EFI_FILE_INFO structure, including the
        null-terminated file name string.

    FileSize - Stores the size of the file in bytes.

    PhysicalSize - Stores the amount of physical space the file consumes on the
        file system volume.

    CreateTime - Stores the time the file was created.

    LastAccessTime - Stores the time when the file was last accessed.

    ModificationTime - Stores the time when the file's contents were last
        modified.

    Attribute - Stores the attribute bits for the file.

    FileName - Stores the null-terminated name of the file.

--*/

typedef struct {
    UINT64 Size;
    UINT64 FileSize;
    UINT64 PhysicalSize;
    EFI_TIME CreateTime;
    EFI_TIME LastAccessTime;
    EFI_TIME ModificationTime;
    UINT64 Attribute;
    CHAR16 FileName[1];
} EFI_FILE_INFO;

//
// -------------------------------------------------------------------- Globals
//

//
// -------------------------------------------------------- Function Prototypes
//
