mirror of
https://github.com/golang/sys.git
synced 2026-02-08 11:46:04 +03:00
unix: added solaris mmap, munmap and madvise.
These are needed by boltdb. Change-Id: Ie6afa51dbf6436bb014f53f6b56ee2de6a06827d Reviewed-on: https://go-review.googlesource.com/13720 Reviewed-by: Aram Hăvărneanu <aram@mgk.ro>
This commit is contained in:
committed by
Aram Hăvărneanu
parent
339fc2ca4b
commit
09d970dc3f
@@ -469,6 +469,7 @@ func SendmsgN(fd int, p, oob []byte, to Sockaddr, flags int) (n int, err error)
|
||||
//sys Link(path string, link string) (err error)
|
||||
//sys Listen(s int, backlog int) (err error) = libsocket.listen
|
||||
//sys Lstat(path string, stat *Stat_t) (err error)
|
||||
//sys Madvise(b []byte, advice int) (err error)
|
||||
//sys Mkdir(path string, mode uint32) (err error)
|
||||
//sys Mknod(path string, mode uint32, dev int) (err error)
|
||||
//sys Nanosleep(time *Timespec, leftover *Timespec) (err error)
|
||||
@@ -533,3 +534,17 @@ func writelen(fd int, buf *byte, nbuf int) (n int, err error) {
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
var mapper = &mmapper{
|
||||
active: make(map[*byte][]byte),
|
||||
mmap: mmap,
|
||||
munmap: munmap,
|
||||
}
|
||||
|
||||
func Mmap(fd int, offset int64, length int, prot int, flags int) (data []byte, err error) {
|
||||
return mapper.Mmap(fd, offset, length, prot, flags)
|
||||
}
|
||||
|
||||
func Munmap(b []byte) (err error) {
|
||||
return mapper.Munmap(b)
|
||||
}
|
||||
|
||||
@@ -44,6 +44,7 @@ import (
|
||||
//go:cgo_import_dynamic libc_link link "libc.so"
|
||||
//go:cgo_import_dynamic libsocket_listen listen "libsocket.so"
|
||||
//go:cgo_import_dynamic libc_lstat lstat "libc.so"
|
||||
//go:cgo_import_dynamic libc_madvise madvise "libc.so"
|
||||
//go:cgo_import_dynamic libc_mkdir mkdir "libc.so"
|
||||
//go:cgo_import_dynamic libc_mknod mknod "libc.so"
|
||||
//go:cgo_import_dynamic libc_nanosleep nanosleep "libc.so"
|
||||
@@ -125,6 +126,7 @@ import (
|
||||
//go:linkname procLink libc_link
|
||||
//go:linkname proclisten libsocket_listen
|
||||
//go:linkname procLstat libc_lstat
|
||||
//go:linkname procMadvise libc_madvise
|
||||
//go:linkname procMkdir libc_mkdir
|
||||
//go:linkname procMknod libc_mknod
|
||||
//go:linkname procNanosleep libc_nanosleep
|
||||
@@ -207,6 +209,7 @@ var (
|
||||
procLink,
|
||||
proclisten,
|
||||
procLstat,
|
||||
procMadvise,
|
||||
procMkdir,
|
||||
procMknod,
|
||||
procNanosleep,
|
||||
@@ -578,6 +581,18 @@ func Lstat(path string, stat *Stat_t) (err error) {
|
||||
return
|
||||
}
|
||||
|
||||
func Madvise(b []byte, advice int) (err error) {
|
||||
var _p0 *byte
|
||||
if len(b) > 0 {
|
||||
_p0 = &b[0]
|
||||
}
|
||||
_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procMadvise)), 3, uintptr(unsafe.Pointer(_p0)), uintptr(len(b)), uintptr(advice), 0, 0, 0)
|
||||
if e1 != 0 {
|
||||
err = e1
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
func Mkdir(path string, mode uint32) (err error) {
|
||||
var _p0 *byte
|
||||
_p0, err = BytePtrFromString(path)
|
||||
|
||||
Reference in New Issue
Block a user