OpenCore  1.0.6
OpenCore Bootloader
Loading...
Searching...
No Matches
Cache.c
Go to the documentation of this file.
1
6#include "NTFS.h"
7#include "Helper.h"
8
9#define FNVHASH_PRIME (0x100000001B3ULL)
10#define FNVHASH_OFFSET (0xCBF29CE484222325ULL)
11
12STATIC
13UINT64
15 IN CONST CHAR16 *Str
16 )
17{
18 UINT64 Hash;
19 UINT64 Char;
20
21 ASSERT (Str != NULL);
22
24 while ((Char = (UINT64)*Str) != 0) {
25 Hash = Hash ^ (Char & 0x0FF);
27
28 Char = Char >> 8;
29 Hash = Hash ^ (Char & 0x0FF);
31
32 ++Str;
33 }
34
35 return Hash;
36}
37
38EFI_STATUS
40 IN EFI_FS *Fs
41 )
42{
43 ASSERT (Fs != NULL);
44
45 Fs->CFIData = AllocateZeroPool (MINIMUM_INFO_LENGTH);
46 if (Fs->CFIData == NULL) {
47 return EFI_OUT_OF_RESOURCES;
48 }
49
50 //
51 // Set init state
52 //
53 Fs->CFIDataSize = 0;
54
55 return EFI_SUCCESS;
56}
57
58VOID
60 IN EFI_FS *Fs
61 )
62{
63 ASSERT (Fs != NULL);
64
65 if (Fs->CFIData != NULL) {
66 FreePool (Fs->CFIData);
67 Fs->CFIData = NULL;
68 }
69}
70
71VOID
73 IN EFI_FS *Fs,
74 IN CONST CHAR16 *Path,
75 IN UINTN Size,
76 IN INT64 DirIndex
77 )
78{
79 ASSERT (Fs != NULL);
80 ASSERT (Path != NULL);
81
82 Fs->CFIHash = FnvHash (Path);
83 Fs->CFIDataSize = Size;
84 Fs->CFIDirIndex = DirIndex;
85}
86
87INTN
89 IN EFI_FS *Fs,
90 IN CONST CHAR16 *Path,
91 IN UINTN Size,
92 IN INT64 DirIndex,
93 OUT VOID *Buffer
94 )
95{
96 UINT64 Hash;
97
98 ASSERT (Fs != NULL);
99 ASSERT (Path != NULL);
100
101 if (Fs->CFIDataSize == 0) {
102 return 0;
103 }
104
105 Hash = FnvHash (Path);
106 if ((Hash == Fs->CFIHash) && (DirIndex == Fs->CFIDirIndex)) {
107 if (Size < Fs->CFIDataSize) {
108 return -1;
109 }
110
111 CopyMem (Buffer, Fs->CFIData, Fs->CFIDataSize);
112 ZeroMem (Fs->CFIData, Fs->CFIDataSize);
113 Fs->CFIDataSize = 0;
114 return 1;
115 }
116
117 ZeroMem (Fs->CFIData, Fs->CFIDataSize);
118 Fs->CFIDataSize = 0;
119 return 0;
120}
#define FNVHASH_OFFSET
Definition Cache.c:10
INTN NtfsCfiPop(IN EFI_FS *Fs, IN CONST CHAR16 *Path, IN UINTN Size, IN INT64 DirIndex, OUT VOID *Buffer)
Definition Cache.c:88
VOID NtfsCfiFree(IN EFI_FS *Fs)
Definition Cache.c:59
STATIC UINT64 FnvHash(IN CONST CHAR16 *Str)
Definition Cache.c:14
EFI_STATUS NtfsCfiInit(IN EFI_FS *Fs)
Definition Cache.c:39
VOID NtfsCfiPush(IN EFI_FS *Fs, IN CONST CHAR16 *Path, IN UINTN Size, IN INT64 DirIndex)
Definition Cache.c:72
#define FNVHASH_PRIME
Definition Cache.c:9
#define MINIMUM_INFO_LENGTH
Definition Driver.h:17
DMG_SIZE_DEVICE_PATH Size
OC_TYPING_BUFFER_ENTRY Buffer[OC_TYPING_BUFFER_SIZE]
Definition OcTypingLib.h:42
VOID *EFIAPI CopyMem(OUT VOID *DestinationBuffer, IN CONST VOID *SourceBuffer, IN UINTN Length)
VOID *EFIAPI ZeroMem(OUT VOID *Buffer, IN UINTN Length)
#define ASSERT(x)
Definition coder.h:55
struct Hash Hash