mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
The minimum bootstrap version for Go ≥ 1.20 is Go 1.17. That version supports the new style //go:build lines. Thus the old style //+build lines can be dropped in this part of the tree as well. Leave the //+build lines in cmd/dist which will ensure the minimum Go version during bootstrap. As suggested by Cherry during review of CL 430496 For #44505 Change-Id: If53c0b02cacbfb055a33e73cfd38578dfd3aa340 Reviewed-on: https://go-review.googlesource.com/c/go/+/436915 TryBot-Result: Gopher Robot <gobot@golang.org> Reviewed-by: Cherry Mui <cherryyz@google.com> Run-TryBot: Tobias Klauser <tobias.klauser@gmail.com> Auto-Submit: Tobias Klauser <tobias.klauser@gmail.com> Reviewed-by: Than McIntosh <thanm@google.com>
45 lines
1.1 KiB
Go
45 lines
1.1 KiB
Go
// Copyright 2018 The Go Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style
|
|
// license that can be found in the LICENSE file.
|
|
|
|
//go:build darwin || dragonfly || freebsd || linux || netbsd || openbsd || (solaris && go1.20)
|
|
|
|
package base
|
|
|
|
import (
|
|
"internal/unsafeheader"
|
|
"os"
|
|
"runtime"
|
|
"syscall"
|
|
"unsafe"
|
|
)
|
|
|
|
// TODO(mdempsky): Is there a higher-level abstraction that still
|
|
// works well for iimport?
|
|
|
|
// mapFile returns length bytes from the file starting at the
|
|
// specified offset as a string.
|
|
func MapFile(f *os.File, offset, length int64) (string, error) {
|
|
// POSIX mmap: "The implementation may require that off is a
|
|
// multiple of the page size."
|
|
x := offset & int64(os.Getpagesize()-1)
|
|
offset -= x
|
|
length += x
|
|
|
|
buf, err := syscall.Mmap(int(f.Fd()), offset, int(length), syscall.PROT_READ, syscall.MAP_SHARED)
|
|
runtime.KeepAlive(f)
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
|
|
buf = buf[x:]
|
|
pSlice := (*unsafeheader.Slice)(unsafe.Pointer(&buf))
|
|
|
|
var res string
|
|
pString := (*unsafeheader.String)(unsafe.Pointer(&res))
|
|
|
|
pString.Data = pSlice.Data
|
|
pString.Len = pSlice.Len
|
|
|
|
return res, nil
|
|
}
|