Add MemMapFileStream. Fixes in memFiles. (#7944)
* Add MemMapFileStream * Added tests * Fixed bug in memfiles (zero index for string) * Added flush to changelog * Attempt to fix Win's nuances * Fix attempt to fix * Continue... * And again... * Reworked tests (all for win on Win) * Fixes in flush (Win) * Replace fn vars to consts * Added the attempts parameter to the flush * Replace while to for * Move to memfiles * Use Natural instead of uint * Better error messages for append mode. Handle specific cases.
This commit is contained in:
parent
f1d5e9090e
commit
bf5d619a52
5 changed files with 195 additions and 23 deletions
|
|
@ -129,7 +129,6 @@ const
|
|||
PIPE_ACCESS_OUTBOUND* = 2'i32
|
||||
PIPE_NOWAIT* = 0x00000001'i32
|
||||
SYNCHRONIZE* = 0x00100000'i32
|
||||
FILE_FLAG_WRITE_THROUGH* = 0x80000000'i32
|
||||
|
||||
CREATE_NO_WINDOW* = 0x08000000'i32
|
||||
|
||||
|
|
@ -281,15 +280,31 @@ else:
|
|||
importc:"CreateHardLinkA", dynlib: "kernel32", stdcall.}
|
||||
|
||||
const
|
||||
FILE_ATTRIBUTE_ARCHIVE* = 32'i32
|
||||
FILE_ATTRIBUTE_COMPRESSED* = 2048'i32
|
||||
FILE_ATTRIBUTE_NORMAL* = 128'i32
|
||||
FILE_ATTRIBUTE_DIRECTORY* = 16'i32
|
||||
FILE_ATTRIBUTE_HIDDEN* = 2'i32
|
||||
FILE_ATTRIBUTE_READONLY* = 1'i32
|
||||
FILE_ATTRIBUTE_REPARSE_POINT* = 1024'i32
|
||||
FILE_ATTRIBUTE_SYSTEM* = 4'i32
|
||||
FILE_ATTRIBUTE_TEMPORARY* = 256'i32
|
||||
FILE_ATTRIBUTE_READONLY* = 0x00000001'i32
|
||||
FILE_ATTRIBUTE_HIDDEN* = 0x00000002'i32
|
||||
FILE_ATTRIBUTE_SYSTEM* = 0x00000004'i32
|
||||
FILE_ATTRIBUTE_DIRECTORY* = 0x00000010'i32
|
||||
FILE_ATTRIBUTE_ARCHIVE* = 0x00000020'i32
|
||||
FILE_ATTRIBUTE_DEVICE* = 0x00000040'i32
|
||||
FILE_ATTRIBUTE_NORMAL* = 0x00000080'i32
|
||||
FILE_ATTRIBUTE_TEMPORARY* = 0x00000100'i32
|
||||
FILE_ATTRIBUTE_SPARSE_FILE* = 0x00000200'i32
|
||||
FILE_ATTRIBUTE_REPARSE_POINT* = 0x00000400'i32
|
||||
FILE_ATTRIBUTE_COMPRESSED* = 0x00000800'i32
|
||||
FILE_ATTRIBUTE_OFFLINE* = 0x00001000'i32
|
||||
FILE_ATTRIBUTE_NOT_CONTENT_INDEXED* = 0x00002000'i32
|
||||
|
||||
FILE_FLAG_FIRST_PIPE_INSTANCE* = 0x00080000'i32
|
||||
FILE_FLAG_OPEN_NO_RECALL* = 0x00100000'i32
|
||||
FILE_FLAG_OPEN_REPARSE_POINT* = 0x00200000'i32
|
||||
FILE_FLAG_POSIX_SEMANTICS* = 0x01000000'i32
|
||||
FILE_FLAG_BACKUP_SEMANTICS* = 0x02000000'i32
|
||||
FILE_FLAG_DELETE_ON_CLOSE* = 0x04000000'i32
|
||||
FILE_FLAG_SEQUENTIAL_SCAN* = 0x08000000'i32
|
||||
FILE_FLAG_RANDOM_ACCESS* = 0x10000000'i32
|
||||
FILE_FLAG_NO_BUFFERING* = 0x20000000'i32
|
||||
FILE_FLAG_OVERLAPPED* = 0x40000000'i32
|
||||
FILE_FLAG_WRITE_THROUGH* = 0x80000000'i32
|
||||
|
||||
MAX_PATH* = 260
|
||||
|
||||
|
|
@ -683,8 +698,6 @@ const
|
|||
FILE_MAP_WRITE* = 2'i32
|
||||
INVALID_FILE_SIZE* = -1'i32
|
||||
|
||||
FILE_FLAG_BACKUP_SEMANTICS* = 33554432'i32
|
||||
FILE_FLAG_OPEN_REPARSE_POINT* = 0x00200000'i32
|
||||
DUPLICATE_SAME_ACCESS* = 2
|
||||
FILE_READ_DATA* = 0x00000001 # file & pipe
|
||||
FILE_WRITE_DATA* = 0x00000002 # file & pipe
|
||||
|
|
@ -695,6 +708,7 @@ const
|
|||
ERROR_PATH_NOT_FOUND* = 3
|
||||
ERROR_ACCESS_DENIED* = 5
|
||||
ERROR_NO_MORE_FILES* = 18
|
||||
ERROR_LOCK_VIOLATION* = 33
|
||||
ERROR_HANDLE_EOF* = 38
|
||||
ERROR_BAD_ARGUMENTS* = 165
|
||||
|
||||
|
|
@ -763,6 +777,9 @@ when not useWinUnicode:
|
|||
proc unmapViewOfFile*(lpBaseAddress: pointer): WINBOOL {.stdcall,
|
||||
dynlib: "kernel32", importc: "UnmapViewOfFile".}
|
||||
|
||||
proc flushViewOfFile*(lpBaseAddress: pointer, dwNumberOfBytesToFlush: DWORD): WINBOOL {.
|
||||
stdcall, dynlib: "kernel32", importc: "FlushViewOfFile".}
|
||||
|
||||
type
|
||||
OVERLAPPED* {.pure, inheritable.} = object
|
||||
internal*: PULONG
|
||||
|
|
@ -785,7 +802,6 @@ type
|
|||
|
||||
const
|
||||
ERROR_IO_PENDING* = 997 # a.k.a WSA_IO_PENDING
|
||||
FILE_FLAG_OVERLAPPED* = 1073741824
|
||||
WSAECONNABORTED* = 10053
|
||||
WSAEADDRINUSE* = 10048
|
||||
WSAECONNRESET* = 10054
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue