aboutsummaryrefslogtreecommitdiffstats
path: root/vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/zc_mmf_unix.go
blob: b6c668ac64802f15712f56e1fc97c0c3e5720f8b (plain) (blame)
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
// +build linux darwin freebsd

package azblob

import (
    "os"
    "syscall"
)

type mmf []byte

func newMMF(file *os.File, writable bool, offset int64, length int) (mmf, error) {
    prot, flags := syscall.PROT_READ, syscall.MAP_SHARED // Assume read-only
    if writable {
        prot, flags = syscall.PROT_READ|syscall.PROT_WRITE, syscall.MAP_SHARED
    }
    addr, err := syscall.Mmap(int(file.Fd()), offset, length, prot, flags)
    return mmf(addr), err
}

func (m *mmf) unmap() {
    err := syscall.Munmap(*m)
    *m = nil
    if err != nil {
        panic(err)
    }
}