]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Universal/Disk/UdfDxe/Udf.h
MdeModulePkg: Apply uncrustify changes
[mirror_edk2.git] / MdeModulePkg / Universal / Disk / UdfDxe / Udf.h
index 641e0ae267c47a519e10e9cde8eea1f0c142ebc5..8c0d55109317d3666773d613dfa7bef8d96a6f31 100644 (file)
@@ -2,14 +2,9 @@
   UDF/ECMA-167 file system driver.\r
 \r
   Copyright (C) 2014-2017 Paulo Alcantara <pcacjr@zytor.com>\r
+  Copyright (c) 2018, Intel Corporation. All rights reserved.<BR>\r
 \r
-  This program and the accompanying materials are licensed and made available\r
-  under the terms and conditions of the BSD License which accompanies this\r
-  distribution.  The full text of the license may be found at\r
-  http://opensource.org/licenses/bsd-license.php\r
-\r
-  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, WITHOUT\r
-  WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+  SPDX-License-Identifier: BSD-2-Clause-Patent\r
 **/\r
 \r
 #ifndef _UDF_H_\r
     { 0x89, 0x56, 0x73, 0xCD, 0xA3, 0x26, 0xCD, 0x0A }  \\r
   }\r
 \r
-#define UDF_DEFAULT_LV_NUM 0\r
-\r
-#define IS_PVD(_Pointer) \\r
-  ((BOOLEAN)(_GET_TAG_ID (_Pointer) == 1))\r
-#define IS_PD(_Pointer) \\r
-  ((BOOLEAN)(_GET_TAG_ID (_Pointer) == 5))\r
-#define IS_LVD(_Pointer) \\r
-  ((BOOLEAN)(_GET_TAG_ID (_Pointer) == 6))\r
-#define IS_TD(_Pointer) \\r
-  ((BOOLEAN)(_GET_TAG_ID (_Pointer) == 8))\r
-#define IS_FSD(_Pointer) \\r
-  ((BOOLEAN)(_GET_TAG_ID (_Pointer) == 256))\r
-#define IS_FE(_Pointer) \\r
-  ((BOOLEAN)(_GET_TAG_ID (_Pointer) == 261))\r
-#define IS_EFE(_Pointer) \\r
-  ((BOOLEAN)(_GET_TAG_ID (_Pointer) == 266))\r
-#define IS_FID(_Pointer) \\r
-  ((BOOLEAN)(_GET_TAG_ID (_Pointer) == 257))\r
-#define IS_AED(_Pointer) \\r
-  ((BOOLEAN)(_GET_TAG_ID (_Pointer) == 258))\r
-#define IS_LVID(_Pointer) \\r
-  ((BOOLEAN)(_GET_TAG_ID (_Pointer) == 9))\r
-\r
-#define _GET_FILETYPE(_Pointer) \\r
-  (IS_FE (_Pointer) ? \\r
-   (((UDF_FILE_ENTRY *)(_Pointer))->IcbTag.FileType) \\r
-   : \\r
-   (((UDF_EXTENDED_FILE_ENTRY *)(_Pointer))->IcbTag.FileType))\r
-\r
-#define IS_FE_DIRECTORY(_Pointer) \\r
-  ((BOOLEAN)(_GET_FILETYPE (_Pointer) == 4))\r
-#define IS_FE_STANDARD_FILE(_Pointer) \\r
-  ((BOOLEAN)(_GET_FILETYPE (_Pointer) == 5))\r
-#define IS_FE_SYMLINK(_Pointer) \\r
-  ((BOOLEAN)(_GET_FILETYPE (_Pointer) == 12))\r
+#define FE_ICB_FILE_TYPE(_Ptr)                                      \\r
+  (UDF_FILE_ENTRY_TYPE)(                                            \\r
+    ((UDF_DESCRIPTOR_TAG *)(_Ptr))->TagIdentifier == UdfFileEntry ? \\r
+    ((UDF_FILE_ENTRY *)(_Ptr))->IcbTag.FileType :                   \\r
+    ((UDF_EXTENDED_FILE_ENTRY *)(_Ptr))->IcbTag.FileType)\r
+\r
+typedef enum {\r
+  UdfFileEntryDirectory    = 4,\r
+  UdfFileEntryStandardFile = 5,\r
+  UdfFileEntrySymlink      = 12,\r
+} UDF_FILE_ENTRY_TYPE;\r
 \r
 #define HIDDEN_FILE     (1 << 0)\r
 #define DIRECTORY_FILE  (1 << 1)\r
 #define DELETED_FILE    (1 << 2)\r
 #define PARENT_FILE     (1 << 3)\r
 \r
-#define _GET_FILE_CHARS(_Pointer) \\r
-  (((UDF_FILE_IDENTIFIER_DESCRIPTOR *)(_Pointer))->FileCharacteristics)\r
-\r
-#define IS_FID_HIDDEN_FILE(_Pointer) \\r
-  ((BOOLEAN)(_GET_FILE_CHARS (_Pointer) & HIDDEN_FILE))\r
-#define IS_FID_DIRECTORY_FILE(_Pointer) \\r
-  ((BOOLEAN)(_GET_FILE_CHARS (_Pointer) & DIRECTORY_FILE))\r
-#define IS_FID_DELETED_FILE(_Pointer) \\r
-  ((BOOLEAN)(_GET_FILE_CHARS (_Pointer) & DELETED_FILE))\r
-#define IS_FID_PARENT_FILE(_Pointer) \\r
-  ((BOOLEAN)(_GET_FILE_CHARS (_Pointer) & PARENT_FILE))\r
-#define IS_FID_NORMAL_FILE(_Pointer) \\r
-  ((BOOLEAN)(!IS_FID_DIRECTORY_FILE (_Pointer) && \\r
-         !IS_FID_PARENT_FILE (_Pointer)))\r
+#define IS_FID_HIDDEN_FILE(_Fid) \\r
+  (BOOLEAN)((_Fid)->FileCharacteristics & HIDDEN_FILE)\r
+#define IS_FID_DIRECTORY_FILE(_Fid) \\r
+  (BOOLEAN)((_Fid)->FileCharacteristics & DIRECTORY_FILE)\r
+#define IS_FID_DELETED_FILE(_Fid) \\r
+  (BOOLEAN)((_Fid)->FileCharacteristics & DELETED_FILE)\r
+#define IS_FID_PARENT_FILE(_Fid) \\r
+  (BOOLEAN)((_Fid)->FileCharacteristics & PARENT_FILE)\r
+#define IS_FID_NORMAL_FILE(_Fid) \\r
+  (BOOLEAN)(!IS_FID_DIRECTORY_FILE (_Fid) && \\r
+            !IS_FID_PARENT_FILE (_Fid))\r
 \r
 typedef enum {\r
-  SHORT_ADS_SEQUENCE,\r
-  LONG_ADS_SEQUENCE,\r
-  EXTENDED_ADS_SEQUENCE,\r
-  INLINE_DATA\r
+  ShortAdsSequence,\r
+  LongAdsSequence,\r
+  ExtendedAdsSequence,\r
+  InlineData\r
 } UDF_FE_RECORDING_FLAGS;\r
 \r
 #define GET_FE_RECORDING_FLAGS(_Fe) \\r
@@ -118,26 +86,26 @@ typedef enum {
                   sizeof (UDF_DESCRIPTOR_TAG)))->Flags & 0x07)\r
 \r
 typedef enum {\r
-  EXTENT_RECORDED_AND_ALLOCATED,\r
-  EXTENT_NOT_RECORDED_BUT_ALLOCATED,\r
-  EXTENT_NOT_RECORDED_NOT_ALLOCATED,\r
-  EXTENT_IS_NEXT_EXTENT,\r
+  ExtentRecordedAndAllocated,\r
+  ExtentNotRecordedButAllocated,\r
+  ExtentNotRecordedNotAllocated,\r
+  ExtentIsNextExtent,\r
 } UDF_EXTENT_FLAGS;\r
 \r
 #define AD_LENGTH(_RecFlags) \\r
-  ((_RecFlags) == SHORT_ADS_SEQUENCE ? \\r
+  ((_RecFlags) == ShortAdsSequence ? \\r
    ((UINT64)(sizeof (UDF_SHORT_ALLOCATION_DESCRIPTOR))) : \\r
    ((UINT64)(sizeof (UDF_LONG_ALLOCATION_DESCRIPTOR))))\r
 \r
 #define GET_EXTENT_FLAGS(_RecFlags, _Ad) \\r
-  ((_RecFlags) == SHORT_ADS_SEQUENCE ? \\r
+  ((_RecFlags) == ShortAdsSequence ? \\r
    ((UDF_EXTENT_FLAGS)((((UDF_SHORT_ALLOCATION_DESCRIPTOR *)(_Ad))->ExtentLength >> \\r
             30) & 0x3)) : \\r
    ((UDF_EXTENT_FLAGS)((((UDF_LONG_ALLOCATION_DESCRIPTOR *)(_Ad))->ExtentLength >> \\r
             30) & 0x3)))\r
 \r
 #define GET_EXTENT_LENGTH(_RecFlags, _Ad) \\r
-  ((_RecFlags) == SHORT_ADS_SEQUENCE ? \\r
+  ((_RecFlags) == ShortAdsSequence ? \\r
    ((UINT32)((((UDF_SHORT_ALLOCATION_DESCRIPTOR *)(_Ad))->ExtentLength & \\r
           ~0xC0000000UL))) : \\r
    ((UINT32)((((UDF_LONG_ALLOCATION_DESCRIPTOR *)(_Ad))->ExtentLength & \\r
@@ -152,235 +120,191 @@ typedef enum {
 #define IS_VALID_COMPRESSION_ID(_CompId) \\r
   ((BOOLEAN)((_CompId) == 8 || (_CompId) == 16))\r
 \r
-#define LV_BLOCK_SIZE(_Vol, _LvNum) \\r
-  (_Vol)->LogicalVolDescs[(_LvNum)]->LogicalBlockSize\r
-\r
-#define UDF_STANDARD_IDENTIFIER_LENGTH   5\r
-\r
-#define LV_UDF_REVISION(_Lv) \\r
-  *(UINT16 *)(UINTN)(_Lv)->DomainIdentifier.IdentifierSuffix\r
+#define UDF_STANDARD_IDENTIFIER_LENGTH  5\r
 \r
 #pragma pack(1)\r
 \r
 typedef struct {\r
-  UINT8 StandardIdentifier[UDF_STANDARD_IDENTIFIER_LENGTH];\r
+  UINT8    StandardIdentifier[UDF_STANDARD_IDENTIFIER_LENGTH];\r
 } UDF_STANDARD_IDENTIFIER;\r
 \r
 #pragma pack()\r
 \r
 typedef enum {\r
-  READ_FILE_GET_FILESIZE,\r
-  READ_FILE_ALLOCATE_AND_READ,\r
-  READ_FILE_SEEK_AND_READ,\r
+  ReadFileGetFileSize,\r
+  ReadFileAllocateAndRead,\r
+  ReadFileSeekAndRead,\r
 } UDF_READ_FILE_FLAGS;\r
 \r
 typedef struct {\r
-  VOID                 *FileData;\r
-  UDF_READ_FILE_FLAGS  Flags;\r
-  UINT64               FileDataSize;\r
-  UINT64               FilePosition;\r
-  UINT64               FileSize;\r
-  UINT64               ReadLength;\r
+  VOID                   *FileData;\r
+  UDF_READ_FILE_FLAGS    Flags;\r
+  UINT64                 FileDataSize;\r
+  UINT64                 FilePosition;\r
+  UINT64                 FileSize;\r
+  UINT64                 ReadLength;\r
 } UDF_READ_FILE_INFO;\r
 \r
 #pragma pack(1)\r
 \r
 typedef struct {\r
-  UINT8           CharacterSetType;\r
-  UINT8           CharacterSetInfo[63];\r
-} UDF_CHAR_SPEC;\r
-\r
-typedef struct {\r
-  UINT8           Flags;\r
-  UINT8           Identifier[23];\r
-  UINT8           IdentifierSuffix[8];\r
-} UDF_ENTITY_ID;\r
-\r
-typedef struct {\r
-  UINT16          TypeAndTimezone;\r
-  INT16           Year;\r
-  UINT8           Month;\r
-  UINT8           Day;\r
-  UINT8           Hour;\r
-  UINT8           Minute;\r
-  UINT8           Second;\r
-  UINT8           Centiseconds;\r
-  UINT8           HundredsOfMicroseconds;\r
-  UINT8           Microseconds;\r
+  UINT16    TypeAndTimezone;\r
+  INT16     Year;\r
+  UINT8     Month;\r
+  UINT8     Day;\r
+  UINT8     Hour;\r
+  UINT8     Minute;\r
+  UINT8     Second;\r
+  UINT8     Centiseconds;\r
+  UINT8     HundredsOfMicroseconds;\r
+  UINT8     Microseconds;\r
 } UDF_TIMESTAMP;\r
 \r
 typedef struct {\r
-  UINT32        LogicalBlockNumber;\r
-  UINT16        PartitionReferenceNumber;\r
-} UDF_LB_ADDR;\r
-\r
-typedef struct {\r
-  UINT32                           ExtentLength;\r
-  UDF_LB_ADDR                      ExtentLocation;\r
-  UINT8                            ImplementationUse[6];\r
-} UDF_LONG_ALLOCATION_DESCRIPTOR;\r
-\r
-typedef struct {\r
-  UDF_DESCRIPTOR_TAG                 DescriptorTag;\r
-  UINT32                             PrevAllocationExtentDescriptor;\r
-  UINT32                             LengthOfAllocationDescriptors;\r
+  UDF_DESCRIPTOR_TAG    DescriptorTag;\r
+  UINT32                PrevAllocationExtentDescriptor;\r
+  UINT32                LengthOfAllocationDescriptors;\r
 } UDF_ALLOCATION_EXTENT_DESCRIPTOR;\r
 \r
 typedef struct {\r
-  UINT8                   StructureType;\r
-  UINT8                   StandardIdentifier[UDF_STANDARD_IDENTIFIER_LENGTH];\r
-  UINT8                   StructureVersion;\r
-  UINT8                   Reserved;\r
-  UINT8                   StructureData[2040];\r
+  UINT8    StructureType;\r
+  UINT8    StandardIdentifier[UDF_STANDARD_IDENTIFIER_LENGTH];\r
+  UINT8    StructureVersion;\r
+  UINT8    Reserved;\r
+  UINT8    StructureData[2040];\r
 } UDF_VOLUME_DESCRIPTOR;\r
 \r
 typedef struct {\r
-  UDF_DESCRIPTOR_TAG         DescriptorTag;\r
-  UINT32                     VolumeDescriptorSequenceNumber;\r
-  UINT16                     PartitionFlags;\r
-  UINT16                     PartitionNumber;\r
-  UDF_ENTITY_ID              PartitionContents;\r
-  UINT8                      PartitionContentsUse[128];\r
-  UINT32                     AccessType;\r
-  UINT32                     PartitionStartingLocation;\r
-  UINT32                     PartitionLength;\r
-  UDF_ENTITY_ID              ImplementationIdentifier;\r
-  UINT8                      ImplementationUse[128];\r
-  UINT8                      Reserved[156];\r
-} UDF_PARTITION_DESCRIPTOR;\r
-\r
-typedef struct {\r
-  UDF_DESCRIPTOR_TAG              DescriptorTag;\r
-  UINT32                          VolumeDescriptorSequenceNumber;\r
-  UDF_CHAR_SPEC                   DescriptorCharacterSet;\r
-  UINT8                           LogicalVolumeIdentifier[128];\r
-  UINT32                          LogicalBlockSize;\r
-  UDF_ENTITY_ID                   DomainIdentifier;\r
-  UDF_LONG_ALLOCATION_DESCRIPTOR  LogicalVolumeContentsUse;\r
-  UINT32                          MapTableLength;\r
-  UINT32                          NumberOfPartitionMaps;\r
-  UDF_ENTITY_ID                   ImplementationIdentifier;\r
-  UINT8                           ImplementationUse[128];\r
-  UDF_EXTENT_AD                   IntegritySequenceExtent;\r
-  UINT8                           PartitionMaps[6];\r
-} UDF_LOGICAL_VOLUME_DESCRIPTOR;\r
+  UDF_DESCRIPTOR_TAG    DescriptorTag;\r
+  UDF_TIMESTAMP         RecordingDateTime;\r
+  UINT32                IntegrityType;\r
+  UDF_EXTENT_AD         NextIntegrityExtent;\r
+  UINT8                 LogicalVolumeContentsUse[32];\r
+  UINT32                NumberOfPartitions;\r
+  UINT32                LengthOfImplementationUse;\r
+  UINT8                 Data[0];\r
+} UDF_LOGICAL_VOLUME_INTEGRITY;\r
 \r
 typedef struct {\r
-  UDF_DESCRIPTOR_TAG             DescriptorTag;\r
-  UDF_TIMESTAMP                  RecordingDateTime;\r
-  UINT32                         IntegrityType;\r
-  UDF_EXTENT_AD                  NextIntegrityExtent;\r
-  UINT8                          LogicalVolumeContentsUse[32];\r
-  UINT32                         NumberOfPartitions;\r
-  UINT32                         LengthOfImplementationUse;\r
-  UINT8                          Data[0];\r
-} UDF_LOGICAL_VOLUME_INTEGRITY;\r
+  UDF_DESCRIPTOR_TAG    DescriptorTag;\r
+  UINT32                VolumeDescriptorSequenceNumber;\r
+  UINT16                PartitionFlags;\r
+  UINT16                PartitionNumber;\r
+  UDF_ENTITY_ID         PartitionContents;\r
+  UINT8                 PartitionContentsUse[128];\r
+  UINT32                AccessType;\r
+  UINT32                PartitionStartingLocation;\r
+  UINT32                PartitionLength;\r
+  UDF_ENTITY_ID         ImplementationIdentifier;\r
+  UINT8                 ImplementationUse[128];\r
+  UINT8                 Reserved[156];\r
+} UDF_PARTITION_DESCRIPTOR;\r
 \r
 typedef struct {\r
-  UDF_DESCRIPTOR_TAG              DescriptorTag;\r
-  UDF_TIMESTAMP                   RecordingDateAndTime;\r
-  UINT16                          InterchangeLevel;\r
-  UINT16                          MaximumInterchangeLevel;\r
-  UINT32                          CharacterSetList;\r
-  UINT32                          MaximumCharacterSetList;\r
-  UINT32                          FileSetNumber;\r
-  UINT32                          FileSetDescriptorNumber;\r
-  UDF_CHAR_SPEC                   LogicalVolumeIdentifierCharacterSet;\r
-  UINT8                           LogicalVolumeIdentifier[128];\r
-  UDF_CHAR_SPEC                   FileSetCharacterSet;\r
-  UINT8                           FileSetIdentifier[32];\r
-  UINT8                           CopyrightFileIdentifier[32];\r
-  UINT8                           AbstractFileIdentifier[32];\r
-  UDF_LONG_ALLOCATION_DESCRIPTOR  RootDirectoryIcb;\r
-  UDF_ENTITY_ID                   DomainIdentifier;\r
-  UDF_LONG_ALLOCATION_DESCRIPTOR  NextExtent;\r
-  UDF_LONG_ALLOCATION_DESCRIPTOR  SystemStreamDirectoryIcb;\r
-  UINT8                           Reserved[32];\r
+  UDF_DESCRIPTOR_TAG                DescriptorTag;\r
+  UDF_TIMESTAMP                     RecordingDateAndTime;\r
+  UINT16                            InterchangeLevel;\r
+  UINT16                            MaximumInterchangeLevel;\r
+  UINT32                            CharacterSetList;\r
+  UINT32                            MaximumCharacterSetList;\r
+  UINT32                            FileSetNumber;\r
+  UINT32                            FileSetDescriptorNumber;\r
+  UDF_CHAR_SPEC                     LogicalVolumeIdentifierCharacterSet;\r
+  UINT8                             LogicalVolumeIdentifier[128];\r
+  UDF_CHAR_SPEC                     FileSetCharacterSet;\r
+  UINT8                             FileSetIdentifier[32];\r
+  UINT8                             CopyrightFileIdentifier[32];\r
+  UINT8                             AbstractFileIdentifier[32];\r
+  UDF_LONG_ALLOCATION_DESCRIPTOR    RootDirectoryIcb;\r
+  UDF_ENTITY_ID                     DomainIdentifier;\r
+  UDF_LONG_ALLOCATION_DESCRIPTOR    NextExtent;\r
+  UDF_LONG_ALLOCATION_DESCRIPTOR    SystemStreamDirectoryIcb;\r
+  UINT8                             Reserved[32];\r
 } UDF_FILE_SET_DESCRIPTOR;\r
 \r
 typedef struct {\r
-  UINT32                            ExtentLength;\r
-  UINT32                            ExtentPosition;\r
+  UINT32    ExtentLength;\r
+  UINT32    ExtentPosition;\r
 } UDF_SHORT_ALLOCATION_DESCRIPTOR;\r
 \r
 typedef struct {\r
-  UDF_DESCRIPTOR_TAG               DescriptorTag;\r
-  UINT16                           FileVersionNumber;\r
-  UINT8                            FileCharacteristics;\r
-  UINT8                            LengthOfFileIdentifier;\r
-  UDF_LONG_ALLOCATION_DESCRIPTOR   Icb;\r
-  UINT16                           LengthOfImplementationUse;\r
-  UINT8                            Data[0];\r
+  UDF_DESCRIPTOR_TAG                DescriptorTag;\r
+  UINT16                            FileVersionNumber;\r
+  UINT8                             FileCharacteristics;\r
+  UINT8                             LengthOfFileIdentifier;\r
+  UDF_LONG_ALLOCATION_DESCRIPTOR    Icb;\r
+  UINT16                            LengthOfImplementationUse;\r
+  UINT8                             Data[0];\r
 } UDF_FILE_IDENTIFIER_DESCRIPTOR;\r
 \r
 typedef struct {\r
-  UINT32        PriorRecordNumberOfDirectEntries;\r
-  UINT16        StrategyType;\r
-  UINT16        StrategyParameter;\r
-  UINT16        MaximumNumberOfEntries;\r
-  UINT8         Reserved;\r
-  UINT8         FileType;\r
-  UDF_LB_ADDR   ParentIcbLocation;\r
-  UINT16        Flags;\r
+  UINT32         PriorRecordNumberOfDirectEntries;\r
+  UINT16         StrategyType;\r
+  UINT16         StrategyParameter;\r
+  UINT16         MaximumNumberOfEntries;\r
+  UINT8          Reserved;\r
+  UINT8          FileType;\r
+  UDF_LB_ADDR    ParentIcbLocation;\r
+  UINT16         Flags;\r
 } UDF_ICB_TAG;\r
 \r
 typedef struct {\r
-  UDF_DESCRIPTOR_TAG              DescriptorTag;\r
-  UDF_ICB_TAG                     IcbTag;\r
-  UINT32                          Uid;\r
-  UINT32                          Gid;\r
-  UINT32                          Permissions;\r
-  UINT16                          FileLinkCount;\r
-  UINT8                           RecordFormat;\r
-  UINT8                           RecordDisplayAttributes;\r
-  UINT32                          RecordLength;\r
-  UINT64                          InformationLength;\r
-  UINT64                          LogicalBlocksRecorded;\r
-  UDF_TIMESTAMP                   AccessTime;\r
-  UDF_TIMESTAMP                   ModificationTime;\r
-  UDF_TIMESTAMP                   AttributeTime;\r
-  UINT32                          CheckPoint;\r
-  UDF_LONG_ALLOCATION_DESCRIPTOR  ExtendedAttributeIcb;\r
-  UDF_ENTITY_ID                   ImplementationIdentifier;\r
-  UINT64                          UniqueId;\r
-  UINT32                          LengthOfExtendedAttributes;\r
-  UINT32                          LengthOfAllocationDescriptors;\r
-  UINT8                           Data[0]; // L_EA + L_AD\r
+  UDF_DESCRIPTOR_TAG                DescriptorTag;\r
+  UDF_ICB_TAG                       IcbTag;\r
+  UINT32                            Uid;\r
+  UINT32                            Gid;\r
+  UINT32                            Permissions;\r
+  UINT16                            FileLinkCount;\r
+  UINT8                             RecordFormat;\r
+  UINT8                             RecordDisplayAttributes;\r
+  UINT32                            RecordLength;\r
+  UINT64                            InformationLength;\r
+  UINT64                            LogicalBlocksRecorded;\r
+  UDF_TIMESTAMP                     AccessTime;\r
+  UDF_TIMESTAMP                     ModificationTime;\r
+  UDF_TIMESTAMP                     AttributeTime;\r
+  UINT32                            CheckPoint;\r
+  UDF_LONG_ALLOCATION_DESCRIPTOR    ExtendedAttributeIcb;\r
+  UDF_ENTITY_ID                     ImplementationIdentifier;\r
+  UINT64                            UniqueId;\r
+  UINT32                            LengthOfExtendedAttributes;\r
+  UINT32                            LengthOfAllocationDescriptors;\r
+  UINT8                             Data[0]; // L_EA + L_AD\r
 } UDF_FILE_ENTRY;\r
 \r
 typedef struct {\r
-  UDF_DESCRIPTOR_TAG              DescriptorTag;\r
-  UDF_ICB_TAG                     IcbTag;\r
-  UINT32                          Uid;\r
-  UINT32                          Gid;\r
-  UINT32                          Permissions;\r
-  UINT16                          FileLinkCount;\r
-  UINT8                           RecordFormat;\r
-  UINT8                           RecordDisplayAttributes;\r
-  UINT32                          RecordLength;\r
-  UINT64                          InformationLength;\r
-  UINT64                          ObjectSize;\r
-  UINT64                          LogicalBlocksRecorded;\r
-  UDF_TIMESTAMP                   AccessTime;\r
-  UDF_TIMESTAMP                   ModificationTime;\r
-  UDF_TIMESTAMP                   CreationTime;\r
-  UDF_TIMESTAMP                   AttributeTime;\r
-  UINT32                          CheckPoint;\r
-  UINT32                          Reserved;\r
-  UDF_LONG_ALLOCATION_DESCRIPTOR  ExtendedAttributeIcb;\r
-  UDF_LONG_ALLOCATION_DESCRIPTOR  StreamDirectoryIcb;\r
-  UDF_ENTITY_ID                   ImplementationIdentifier;\r
-  UINT64                          UniqueId;\r
-  UINT32                          LengthOfExtendedAttributes;\r
-  UINT32                          LengthOfAllocationDescriptors;\r
-  UINT8                           Data[0]; // L_EA + L_AD\r
+  UDF_DESCRIPTOR_TAG                DescriptorTag;\r
+  UDF_ICB_TAG                       IcbTag;\r
+  UINT32                            Uid;\r
+  UINT32                            Gid;\r
+  UINT32                            Permissions;\r
+  UINT16                            FileLinkCount;\r
+  UINT8                             RecordFormat;\r
+  UINT8                             RecordDisplayAttributes;\r
+  UINT32                            RecordLength;\r
+  UINT64                            InformationLength;\r
+  UINT64                            ObjectSize;\r
+  UINT64                            LogicalBlocksRecorded;\r
+  UDF_TIMESTAMP                     AccessTime;\r
+  UDF_TIMESTAMP                     ModificationTime;\r
+  UDF_TIMESTAMP                     CreationTime;\r
+  UDF_TIMESTAMP                     AttributeTime;\r
+  UINT32                            CheckPoint;\r
+  UINT32                            Reserved;\r
+  UDF_LONG_ALLOCATION_DESCRIPTOR    ExtendedAttributeIcb;\r
+  UDF_LONG_ALLOCATION_DESCRIPTOR    StreamDirectoryIcb;\r
+  UDF_ENTITY_ID                     ImplementationIdentifier;\r
+  UINT64                            UniqueId;\r
+  UINT32                            LengthOfExtendedAttributes;\r
+  UINT32                            LengthOfAllocationDescriptors;\r
+  UINT8                             Data[0]; // L_EA + L_AD\r
 } UDF_EXTENDED_FILE_ENTRY;\r
 \r
 typedef struct {\r
-  UINT8                ComponentType;\r
-  UINT8                LengthOfComponentIdentifier;\r
-  UINT16               ComponentFileVersionNumber;\r
-  UINT8                ComponentIdentifier[0];\r
+  UINT8     ComponentType;\r
+  UINT8     LengthOfComponentIdentifier;\r
+  UINT16    ComponentFileVersionNumber;\r
+  UINT8     ComponentIdentifier[0];\r
 } UDF_PATH_COMPONENT;\r
 \r
 #pragma pack()\r
@@ -389,27 +313,25 @@ typedef struct {
 // UDF filesystem driver's private data\r
 //\r
 typedef struct {\r
-  UDF_LOGICAL_VOLUME_DESCRIPTOR  **LogicalVolDescs;\r
-  UINTN                          LogicalVolDescsNo;\r
-  UDF_PARTITION_DESCRIPTOR       **PartitionDescs;\r
-  UINTN                          PartitionDescsNo;\r
-  UDF_FILE_SET_DESCRIPTOR        **FileSetDescs;\r
-  UINTN                          FileSetDescsNo;\r
-  UINTN                          FileEntrySize;\r
+  UINT64                           MainVdsStartLocation;\r
+  UDF_LOGICAL_VOLUME_DESCRIPTOR    LogicalVolDesc;\r
+  UDF_PARTITION_DESCRIPTOR         PartitionDesc;\r
+  UDF_FILE_SET_DESCRIPTOR          FileSetDesc;\r
+  UINTN                            FileEntrySize;\r
 } UDF_VOLUME_INFO;\r
 \r
 typedef struct {\r
-  VOID                            *FileEntry;\r
-  UDF_FILE_IDENTIFIER_DESCRIPTOR  *FileIdentifierDesc;\r
+  VOID                              *FileEntry;\r
+  UDF_FILE_IDENTIFIER_DESCRIPTOR    *FileIdentifierDesc;\r
 } UDF_FILE_INFO;\r
 \r
 typedef struct {\r
-  VOID                      *DirectoryData;\r
-  UINT64                    DirectoryLength;\r
-  UINT64                    FidOffset;\r
+  VOID      *DirectoryData;\r
+  UINT64    DirectoryLength;\r
+  UINT64    FidOffset;\r
 } UDF_READ_DIRECTORY_INFO;\r
 \r
-#define PRIVATE_UDF_FILE_DATA_SIGNATURE SIGNATURE_32 ('U', 'd', 'f', 'f')\r
+#define PRIVATE_UDF_FILE_DATA_SIGNATURE  SIGNATURE_32 ('U', 'd', 'f', 'f')\r
 \r
 #define PRIVATE_UDF_FILE_DATA_FROM_THIS(a) \\r
   CR ( \\r
@@ -420,20 +342,20 @@ typedef struct {
       )\r
 \r
 typedef struct {\r
-  UINTN                            Signature;\r
-  BOOLEAN                          IsRootDirectory;\r
-  UDF_FILE_INFO                    *Root;\r
-  UDF_FILE_INFO                    File;\r
-  UDF_READ_DIRECTORY_INFO          ReadDirInfo;\r
-  EFI_SIMPLE_FILE_SYSTEM_PROTOCOL  *SimpleFs;\r
-  EFI_FILE_PROTOCOL                FileIo;\r
-  CHAR16                           AbsoluteFileName[UDF_PATH_LENGTH];\r
-  CHAR16                           FileName[UDF_FILENAME_LENGTH];\r
-  UINT64                           FileSize;\r
-  UINT64                           FilePosition;\r
+  UINTN                              Signature;\r
+  BOOLEAN                            IsRootDirectory;\r
+  UDF_FILE_INFO                      *Root;\r
+  UDF_FILE_INFO                      File;\r
+  UDF_READ_DIRECTORY_INFO            ReadDirInfo;\r
+  EFI_SIMPLE_FILE_SYSTEM_PROTOCOL    *SimpleFs;\r
+  EFI_FILE_PROTOCOL                  FileIo;\r
+  CHAR16                             AbsoluteFileName[UDF_PATH_LENGTH];\r
+  CHAR16                             FileName[UDF_FILENAME_LENGTH];\r
+  UINT64                             FileSize;\r
+  UINT64                             FilePosition;\r
 } PRIVATE_UDF_FILE_DATA;\r
 \r
-#define PRIVATE_UDF_SIMPLE_FS_DATA_SIGNATURE SIGNATURE_32 ('U', 'd', 'f', 's')\r
+#define PRIVATE_UDF_SIMPLE_FS_DATA_SIGNATURE  SIGNATURE_32 ('U', 'd', 'f', 's')\r
 \r
 #define PRIVATE_UDF_SIMPLE_FS_DATA_FROM_THIS(a) \\r
   CR ( \\r
@@ -444,14 +366,14 @@ typedef struct {
       )\r
 \r
 typedef struct {\r
-  UINTN                            Signature;\r
-  EFI_BLOCK_IO_PROTOCOL            *BlockIo;\r
-  EFI_DISK_IO_PROTOCOL             *DiskIo;\r
-  EFI_SIMPLE_FILE_SYSTEM_PROTOCOL  SimpleFs;\r
-  UDF_VOLUME_INFO                  Volume;\r
-  UDF_FILE_INFO                    Root;\r
-  UINTN                            OpenFiles;\r
-  EFI_HANDLE                       Handle;\r
+  UINTN                              Signature;\r
+  EFI_BLOCK_IO_PROTOCOL              *BlockIo;\r
+  EFI_DISK_IO_PROTOCOL               *DiskIo;\r
+  EFI_SIMPLE_FILE_SYSTEM_PROTOCOL    SimpleFs;\r
+  UDF_VOLUME_INFO                    Volume;\r
+  UDF_FILE_INFO                      Root;\r
+  UINTN                              OpenFiles;\r
+  EFI_HANDLE                         Handle;\r
 } PRIVATE_UDF_SIMPLE_FS_DATA;\r
 \r
 //\r
@@ -550,7 +472,7 @@ UdfRead (
 EFI_STATUS\r
 EFIAPI\r
 UdfClose (\r
-  IN EFI_FILE_PROTOCOL *This\r
+  IN EFI_FILE_PROTOCOL  *This\r
   );\r
 \r
 /**\r
@@ -632,9 +554,16 @@ UdfSetPosition (
 /**\r
   Get information about a file.\r
 \r
+  @attention This is boundary function that may receive untrusted input.\r
+  @attention The input is from FileSystem.\r
+\r
+  The File Set Descriptor is external input, so this routine will do basic\r
+  validation for File Set Descriptor and report status.\r
+\r
   @param  This            Protocol instance pointer.\r
   @param  InformationType Type of information to return in Buffer.\r
-  @param  BufferSize      On input size of buffer, on output amount of data in buffer.\r
+  @param  BufferSize      On input size of buffer, on output amount of data in\r
+                          buffer.\r
   @param  Buffer          The buffer to return data.\r
 \r
   @retval EFI_SUCCESS          Data was returned.\r
@@ -644,7 +573,8 @@ UdfSetPosition (
   @retval EFI_VOLUME_CORRUPTED The file system structures are corrupted.\r
   @retval EFI_WRITE_PROTECTED  The device is write protected.\r
   @retval EFI_ACCESS_DENIED    The file was open for read only.\r
-  @retval EFI_BUFFER_TOO_SMALL Buffer was too small; required size returned in BufferSize.\r
+  @retval EFI_BUFFER_TOO_SMALL Buffer was too small; required size returned in\r
+                               BufferSize.\r
 \r
 **/\r
 EFI_STATUS\r
@@ -700,7 +630,7 @@ UdfSetInfo (
 EFI_STATUS\r
 EFIAPI\r
 UdfFlush (\r
-  IN EFI_FILE_PROTOCOL *This\r
+  IN EFI_FILE_PROTOCOL  *This\r
   );\r
 \r
 /**\r
@@ -842,21 +772,38 @@ ReadDirectoryEntry (
   Get a filename (encoded in OSTA-compressed format) from a File Identifier\r
   Descriptor on an UDF volume.\r
 \r
+  @attention This is boundary function that may receive untrusted input.\r
+  @attention The input is from FileSystem.\r
+\r
+  The File Identifier Descriptor is external input, so this routine will do\r
+  basic validation for File Identifier Descriptor and report status.\r
+\r
   @param[in]   FileIdentifierDesc  File Identifier Descriptor pointer.\r
+  @param[in]   CharMax             The maximum number of FileName Unicode char,\r
+                                   including terminating null char.\r
   @param[out]  FileName            Decoded filename.\r
 \r
   @retval EFI_SUCCESS           Filename decoded and read.\r
   @retval EFI_VOLUME_CORRUPTED  The file system structures are corrupted.\r
+  @retval EFI_BUFFER_TOO_SMALL  The string buffer FileName cannot hold the\r
+                                decoded filename.\r
 **/\r
 EFI_STATUS\r
 GetFileNameFromFid (\r
   IN   UDF_FILE_IDENTIFIER_DESCRIPTOR  *FileIdentifierDesc,\r
+  IN   UINTN                           CharMax,\r
   OUT  CHAR16                          *FileName\r
   );\r
 \r
 /**\r
   Resolve a symlink file on an UDF volume.\r
 \r
+  @attention This is boundary function that may receive untrusted input.\r
+  @attention The input is from FileSystem.\r
+\r
+  The Path Component is external input, so this routine will do basic\r
+  validation for Path Component and report status.\r
+\r
   @param[in]   BlockIo        BlockIo interface.\r
   @param[in]   DiskIo         DiskIo interface.\r
   @param[in]   Volume         UDF volume information structure.\r
@@ -883,17 +830,6 @@ ResolveSymlink (
   OUT  UDF_FILE_INFO          *File\r
   );\r
 \r
-/**\r
-  Clean up in-memory UDF volume information.\r
-\r
-  @param[in] Volume Volume information pointer.\r
-\r
-**/\r
-VOID\r
-CleanupVolumeInformation (\r
-  IN UDF_VOLUME_INFO *Volume\r
-  );\r
-\r
 /**\r
   Clean up in-memory UDF file information.\r
 \r
@@ -902,7 +838,7 @@ CleanupVolumeInformation (
 **/\r
 VOID\r
 CleanupFileInformation (\r
-  IN UDF_FILE_INFO *File\r
+  IN UDF_FILE_INFO  *File\r
   );\r
 \r
 /**\r
@@ -958,9 +894,43 @@ SetFileInfo (
   OUT     VOID           *Buffer\r
   );\r
 \r
+/**\r
+  Get volume label of an UDF volume.\r
+\r
+  @attention This is boundary function that may receive untrusted input.\r
+  @attention The input is from FileSystem.\r
+\r
+  The File Set Descriptor is external input, so this routine will do basic\r
+  validation for File Set Descriptor and report status.\r
+\r
+  @param[in]   Volume   Volume information pointer.\r
+  @param[in]   CharMax  The maximum number of Unicode char in String,\r
+                        including terminating null char.\r
+  @param[out]  String   String buffer pointer to store the volume label.\r
+\r
+  @retval EFI_SUCCESS           Volume label is returned.\r
+  @retval EFI_VOLUME_CORRUPTED  The file system structures are corrupted.\r
+  @retval EFI_BUFFER_TOO_SMALL  The string buffer String cannot hold the\r
+                                volume label.\r
+\r
+**/\r
+EFI_STATUS\r
+GetVolumeLabel (\r
+  IN   UDF_VOLUME_INFO  *Volume,\r
+  IN   UINTN            CharMax,\r
+  OUT  CHAR16           *String\r
+  );\r
+\r
 /**\r
   Get volume and free space size information of an UDF volume.\r
 \r
+  @attention This is boundary function that may receive untrusted input.\r
+  @attention The input is from FileSystem.\r
+\r
+  The Logical Volume Descriptor and the Logical Volume Integrity Descriptor are\r
+  external inputs, so this routine will do basic validation for both descriptors\r
+  and report status.\r
+\r
   @param[in]   BlockIo        BlockIo interface.\r
   @param[in]   DiskIo         DiskIo interface.\r
   @param[in]   Volume         UDF volume information structure.\r
@@ -1043,7 +1013,7 @@ SupportUdfFileSystem (
 **/\r
 CHAR16 *\r
 MangleFileName (\r
-  IN CHAR16        *FileName\r
+  IN CHAR16  *FileName\r
   );\r
 \r
 /**\r
@@ -1108,15 +1078,16 @@ UdfDriverBindingStart (
 EFI_STATUS\r
 EFIAPI\r
 UdfDriverBindingStop (\r
-  IN  EFI_DRIVER_BINDING_PROTOCOL   *This,\r
-  IN  EFI_HANDLE                    ControllerHandle,\r
-  IN  UINTN                         NumberOfChildren,\r
-  IN  EFI_HANDLE                    *ChildHandleBuffer\r
+  IN  EFI_DRIVER_BINDING_PROTOCOL  *This,\r
+  IN  EFI_HANDLE                   ControllerHandle,\r
+  IN  UINTN                        NumberOfChildren,\r
+  IN  EFI_HANDLE                   *ChildHandleBuffer\r
   );\r
 \r
 //\r
 // EFI Component Name Functions\r
 //\r
+\r
 /**\r
   Retrieves a Unicode string that is the user readable name of the driver.\r
 \r