]> git.proxmox.com Git - mirror_edk2.git/blame - OvmfPkg/VirtioFsDxe/SimpleFsSetPosition.c
OvmfPkg: Apply uncrustify changes
[mirror_edk2.git] / OvmfPkg / VirtioFsDxe / SimpleFsSetPosition.c
CommitLineData
334c13e1
LE
1/** @file\r
2 EFI_FILE_PROTOCOL.SetPosition() member function for the Virtio Filesystem\r
3 driver.\r
4\r
5 Copyright (C) 2020, Red Hat, Inc.\r
6\r
7 SPDX-License-Identifier: BSD-2-Clause-Patent\r
8**/\r
9\r
b845de89
LE
10#include <Library/MemoryAllocationLib.h> // FreePool()\r
11\r
334c13e1
LE
12#include "VirtioFsDxe.h"\r
13\r
14EFI_STATUS\r
15EFIAPI\r
16VirtioFsSimpleFileSetPosition (\r
ac0a286f
MK
17 IN EFI_FILE_PROTOCOL *This,\r
18 IN UINT64 Position\r
334c13e1
LE
19 )\r
20{\r
ac0a286f
MK
21 VIRTIO_FS_FILE *VirtioFsFile;\r
22 VIRTIO_FS *VirtioFs;\r
23 EFI_STATUS Status;\r
24 VIRTIO_FS_FUSE_ATTRIBUTES_RESPONSE FuseAttr;\r
c4edb49b
LE
25\r
26 VirtioFsFile = VIRTIO_FS_FILE_FROM_SIMPLE_FILE (This);\r
27\r
28 //\r
29 // Directories can only be rewound, per spec.\r
30 //\r
31 if (VirtioFsFile->IsDirectory) {\r
32 if (Position != 0) {\r
33 return EFI_UNSUPPORTED;\r
34 }\r
ac0a286f 35\r
c4edb49b 36 VirtioFsFile->FilePosition = 0;\r
b845de89
LE
37 if (VirtioFsFile->FileInfoArray != NULL) {\r
38 FreePool (VirtioFsFile->FileInfoArray);\r
39 VirtioFsFile->FileInfoArray = NULL;\r
40 }\r
ac0a286f 41\r
b845de89
LE
42 VirtioFsFile->SingleFileInfoSize = 0;\r
43 VirtioFsFile->NumFileInfo = 0;\r
44 VirtioFsFile->NextFileInfo = 0;\r
c4edb49b
LE
45 return EFI_SUCCESS;\r
46 }\r
47\r
48 //\r
49 // Regular file.\r
50 //\r
51 if (Position < MAX_UINT64) {\r
52 //\r
53 // Caller is requesting absolute file position.\r
54 //\r
55 VirtioFsFile->FilePosition = Position;\r
56 return EFI_SUCCESS;\r
57 }\r
58\r
59 //\r
60 // Caller is requesting a seek to EOF.\r
61 //\r
62 VirtioFs = VirtioFsFile->OwnerFs;\r
ac0a286f 63 Status = VirtioFsFuseGetAttr (VirtioFs, VirtioFsFile->NodeId, &FuseAttr);\r
c4edb49b
LE
64 if (EFI_ERROR (Status)) {\r
65 return Status;\r
66 }\r
ac0a286f 67\r
c4edb49b
LE
68 VirtioFsFile->FilePosition = FuseAttr.Size;\r
69 return EFI_SUCCESS;\r
334c13e1 70}\r