1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
| #pragma once
|
| #include <string>
| #include "File.h"
| #include <map>
| #include "os/Mutex.h"
|
| namespace il2cpp
| {
| namespace os
| {
| // This enum must match the same enum in the Mono code, as it is used on the icall boundary.
| enum MemoryMappedFileAccess
| {
| MMAP_FILE_ACCESS_READ_WRITE = 0,
| MMAP_FILE_ACCESS_READ = 1,
| MMAP_FILE_ACCESS_WRITE = 2,
| MMAP_FILE_ACCESS_COPY_ON_WRITE = 3,
| MMAP_FILE_ACCESS_READ_EXECUTE = 4,
| MMAP_FILE_ACCESS_READ_WRITE_EXECUTE = 5,
| };
|
| // This enum must match the same enum in the Mono code, as it is used on the icall boundary.
| enum MemoryMappedFileError
| {
| NO_MEMORY_MAPPED_FILE_ERROR = 0,
| BAD_CAPACITY_FOR_FILE_BACKED,
| CAPACITY_SMALLER_THAN_FILE_SIZE,
| FILE_NOT_FOUND,
| FILE_ALREADY_EXISTS,
| PATH_TOO_LONG,
| COULD_NOT_OPEN,
| CAPACITY_MUST_BE_POSITIVE,
| INVALID_FILE_MODE,
| COULD_NOT_MAP_MEMORY,
| ACCESS_DENIED,
| CAPACITY_LARGER_THAN_LOGICAL_ADDRESS_SPACE
| };
|
| // This enum must match the same enum in the Mono code, as it is used on the icall boundary.
| enum MemoryMappedFileMode
| {
| FILE_MODE_CREATE_NEW = 1,
| FILE_MODE_CREATE = 2,
| FILE_MODE_OPEN = 3,
| FILE_MODE_OPEN_OR_CREATE = 4,
| FILE_MODE_TRUNCATE = 5,
| FILE_MODE_APPEND = 6,
| };
|
| class MemoryMappedFile
| {
| public:
| typedef void* MemoryMappedFileHandle;
|
| static FileHandle* Create(FileHandle* file, const char* mapName, int32_t mode, int64_t *capacity, MemoryMappedFileAccess access, int32_t options, MemoryMappedFileError* error);
| static MemoryMappedFileHandle View(FileHandle* mappedFileHandle, int64_t* length, int64_t offset, MemoryMappedFileAccess access, int64_t* actualOffset, MemoryMappedFileError* error);
| static void Flush(MemoryMappedFileHandle memoryMappedFileData, int64_t length);
| static bool UnmapView(MemoryMappedFileHandle memoryMappedFileData, int64_t length);
| static bool Close(FileHandle* file);
| static void ConfigureHandleInheritability(FileHandle* file, bool inheritability);
| };
| }
| }
|
|