X-Git-Url: https://git.rrq.au/?a=blobdiff_plain;f=lsp-misc%2Fmmap.lsp;h=bb3f3be044cad613731cd029e86e495725c83bb4;hb=4ec2385eae5c542c723ba17c0bb0682d71dcbf4e;hp=639b1c9d0ff43d436abdcc9b08d9f8e145c00fa9;hpb=99e9ef6c571e7181bdedc4986242b2e50bdd51ac;p=rrq%2Flsp-utils.git diff --git a/lsp-misc/mmap.lsp b/lsp-misc/mmap.lsp index 639b1c9..bb3f3be 100644 --- a/lsp-misc/mmap.lsp +++ b/lsp-misc/mmap.lsp @@ -28,19 +28,26 @@ "int" ; int whence ) +(import LIBC "msync" "int" + "void*" ; void *addr + "long" ; size_t length + "int" ; int flags + ) + (constant 'PROT_READ 0x01 + 'PROT_WRITE 0x2 'MAP_SHARED 0x01 'SEEK_END 2 ) ;; Creates a new mapping in the virtual address space of the calling ;; process. -(define (MMap:MMap FD LENGTH (OFFSET 0)) +(define (MMap:MMap FD LENGTH (OFFSET 0) (PROT PROT_READ)) (when (string? FD) (setf FD (open FD "r"))) (let ((D (list (context) nil LENGTH 0 0 FD OFFSET))) (when (< LENGTH) (setf (D 2) (lseek FD 0 SEEK_END))) - (setf (D 1) (mmap 0 (D 2) PROT_READ MAP_SHARED FD OFFSET)) + (setf (D 1) (mmap 0 (D 2) PROT MAP_SHARED FD OFFSET)) D)) (define (Unmap)