OpenCore  1.0.4
OpenCore Bootloader
Loading...
Searching...
No Matches
Position.c
Go to the documentation of this file.
1
9#include "NTFS.h"
10#include "Driver.h"
11
12EFI_STATUS
13EFIAPI
15 IN EFI_FILE_PROTOCOL *This,
16 OUT UINT64 *Position
17 )
18{
19 EFI_NTFS_FILE *File;
20
21 ASSERT (This != NULL);
22 ASSERT (Position != NULL);
23
24 File = (EFI_NTFS_FILE *)This;
25
26 *Position = File->IsDir ? File->DirIndex : File->Offset;
27
28 return EFI_SUCCESS;
29}
30
31EFI_STATUS
32EFIAPI
34 IN EFI_FILE_PROTOCOL *This,
35 IN UINT64 Position
36 )
37{
38 EFI_NTFS_FILE *File;
39 UINT64 FileSize;
40
41 ASSERT (This != NULL);
42
43 File = (EFI_NTFS_FILE *)This;
44
45 if (File->IsDir) {
46 if (Position != 0) {
47 return EFI_INVALID_PARAMETER;
48 }
49
50 File->DirIndex = 0;
51 return EFI_SUCCESS;
52 }
53
54 FileSize = File->RootFile.DataAttributeSize;
55
56 if (Position == 0xFFFFFFFFFFFFFFFFULL) {
57 Position = FileSize;
58 } else if (Position > FileSize) {
59 DEBUG ((DEBUG_INFO, "NTFS: '%s': Cannot seek to #%Lx of %Lx\n", File->Path, Position, FileSize));
60 return EFI_UNSUPPORTED;
61 }
62
63 File->Offset = Position;
64
65 return EFI_SUCCESS;
66}
EFI_STATUS EFIAPI FileSetPosition(IN EFI_FILE_PROTOCOL *This, IN UINT64 Position)
Definition Position.c:33
EFI_STATUS EFIAPI FileGetPosition(IN EFI_FILE_PROTOCOL *This, OUT UINT64 *Position)
Definition Position.c:14
#define ASSERT(x)
Definition coder.h:55
NTFS_FILE RootFile
Definition Driver.h:634
BOOLEAN IsDir
Definition Driver.h:628
CHAR16 * Path
Definition Driver.h:630
UINT64 DirIndex
Definition Driver.h:629
UINT64 Offset
Definition Driver.h:632
UINT64 DataAttributeSize
Definition Driver.h:616