about summary refs log tree commit diff
path: root/vendor/modernc.org/memory/mmap_windows.go
diff options
context:
space:
mode:
authorEmile <git@emile.space>2024-08-16 19:50:26 +0200
committerEmile <git@emile.space>2024-08-16 19:50:26 +0200
commit1a57267a17c2fc17fb6e104846fabc3e363c326c (patch)
tree1e574e3a80622086dc3c81ff9cba65ef7049b1a9 /vendor/modernc.org/memory/mmap_windows.go
initial commit
Diffstat (limited to 'vendor/modernc.org/memory/mmap_windows.go')
-rw-r--r--vendor/modernc.org/memory/mmap_windows.go49
1 files changed, 49 insertions, 0 deletions
diff --git a/vendor/modernc.org/memory/mmap_windows.go b/vendor/modernc.org/memory/mmap_windows.go
new file mode 100644
index 0000000..3c40203
--- /dev/null
+++ b/vendor/modernc.org/memory/mmap_windows.go
@@ -0,0 +1,49 @@
+// Copyright 2017 The Memory Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package memory // import "modernc.org/memory"
+
+import (
+	"os"
+	"syscall"
+)
+
+const (
+	_MEM_COMMIT   = 0x1000
+	_MEM_RESERVE  = 0x2000
+	_MEM_DECOMMIT = 0x4000
+	_MEM_RELEASE  = 0x8000
+
+	_PAGE_READWRITE = 0x0004
+	_PAGE_NOACCESS  = 0x0001
+)
+
+const pageSizeLog = 16
+
+var (
+	modkernel32      = syscall.NewLazyDLL("kernel32.dll")
+	osPageMask       = osPageSize - 1
+	osPageSize       = os.Getpagesize()
+	procVirtualAlloc = modkernel32.NewProc("VirtualAlloc")
+	procVirtualFree  = modkernel32.NewProc("VirtualFree")
+)
+
+// pageSize aligned.
+func mmap(size int) (uintptr, int, error) {
+	size = roundup(size, pageSize)
+	addr, _, err := procVirtualAlloc.Call(0, uintptr(size), _MEM_COMMIT|_MEM_RESERVE, _PAGE_READWRITE)
+	if err.(syscall.Errno) != 0 || addr == 0 {
+		return addr, size, err
+	}
+	return addr, size, nil
+}
+
+func unmap(addr uintptr, size int) error {
+	r, _, err := procVirtualFree.Call(addr, 0, _MEM_RELEASE)
+	if r == 0 {
+		return err
+	}
+
+	return nil
+}