4 Copyright (c) 2005 - 2015, Intel Corporation. All rights reserved.<BR>
5 SPDX-License-Identifier: BSD-2-Clause-Patent
13 Get hash value for long name.
15 @param LongNameString - The long name string to be hashed.
23 IN CHAR16
*LongNameString
27 CHAR16 UpCasedLongFileName
[EFI_PATH_STRING_LENGTH
];
31 ARRAY_SIZE (UpCasedLongFileName
),
33 ARRAY_SIZE (UpCasedLongFileName
) - 1
35 FatStrUpr (UpCasedLongFileName
);
36 gBS
->CalculateCrc32 (UpCasedLongFileName
, StrSize (UpCasedLongFileName
), &HashValue
);
37 return (HashValue
& HASH_TABLE_MASK
);
42 Get hash value for short name.
44 @param ShortNameString - The short name string to be hashed.
52 IN CHAR8
*ShortNameString
57 gBS
->CalculateCrc32 (ShortNameString
, FAT_NAME_LEN
, &HashValue
);
58 return (HashValue
& HASH_TABLE_MASK
);
63 Search the long name hash table for the directory entry.
65 @param ODir - The directory to be searched.
66 @param LongNameString - The long name string to search.
68 @return The previous long name hash node of the directory entry.
72 FatLongNameHashSearch (
74 IN CHAR16
*LongNameString
77 FAT_DIRENT
**PreviousHashNode
;
79 for (PreviousHashNode
= &ODir
->LongNameHashTable
[FatHashLongName (LongNameString
)];
80 *PreviousHashNode
!= NULL
;
81 PreviousHashNode
= &(*PreviousHashNode
)->LongNameForwardLink
84 if (FatStriCmp (LongNameString
, (*PreviousHashNode
)->FileString
) == 0) {
89 return PreviousHashNode
;
94 Search the short name hash table for the directory entry.
96 @param ODir - The directory to be searched.
97 @param ShortNameString - The short name string to search.
99 @return The previous short name hash node of the directory entry.
103 FatShortNameHashSearch (
105 IN CHAR8
*ShortNameString
108 FAT_DIRENT
**PreviousHashNode
;
110 for (PreviousHashNode
= &ODir
->ShortNameHashTable
[FatHashShortName (ShortNameString
)];
111 *PreviousHashNode
!= NULL
;
112 PreviousHashNode
= &(*PreviousHashNode
)->ShortNameForwardLink
115 if (CompareMem (ShortNameString
, (*PreviousHashNode
)->Entry
.FileName
, FAT_NAME_LEN
) == 0) {
120 return PreviousHashNode
;
125 Insert directory entry to hash table.
127 @param ODir - The parent directory.
128 @param DirEnt - The directory entry node.
132 FatInsertToHashTable (
134 IN FAT_DIRENT
*DirEnt
137 FAT_DIRENT
**HashTable
;
138 UINT32 HashTableIndex
;
141 // Insert hash table index for short name
143 HashTableIndex
= FatHashShortName (DirEnt
->Entry
.FileName
);
144 HashTable
= ODir
->ShortNameHashTable
;
145 DirEnt
->ShortNameForwardLink
= HashTable
[HashTableIndex
];
146 HashTable
[HashTableIndex
] = DirEnt
;
148 // Insert hash table index for long name
150 HashTableIndex
= FatHashLongName (DirEnt
->FileString
);
151 HashTable
= ODir
->LongNameHashTable
;
152 DirEnt
->LongNameForwardLink
= HashTable
[HashTableIndex
];
153 HashTable
[HashTableIndex
] = DirEnt
;
158 Delete directory entry from hash table.
160 @param ODir - The parent directory.
161 @param DirEnt - The directory entry node.
165 FatDeleteFromHashTable (
167 IN FAT_DIRENT
*DirEnt
170 *FatShortNameHashSearch (ODir
, DirEnt
->Entry
.FileName
) = DirEnt
->ShortNameForwardLink
;
171 *FatLongNameHashSearch (ODir
, DirEnt
->FileString
) = DirEnt
->LongNameForwardLink
;