.examples
.github
alerting
client
config
controller
core
docs
jsonpath
metrics
pattern
security
storage
test
util
vendor
github.com
golang.org
x
crypto
image
mod
net
oauth2
sync
sys
execabs
internal
unix
windows
aliases.go
dll_windows.go
empty.s
env_windows.go
eventlog.go
exec_windows.go
memory_windows.go
mkerrors.bash
mkknownfolderids.bash
mksyscall.go
race.go
race0.go
security_windows.go
service.go
setupapierrors_windows.go
str.go
syscall.go
syscall_windows.go
types_windows.go
types_windows_386.go
types_windows_amd64.go
types_windows_arm.go
types_windows_arm64.go
zerrors_windows.go
zknownfolderids_windows.go
zsyscall_windows.go
AUTHORS
CONTRIBUTORS
LICENSE
PATENTS
tools
xerrors
google.golang.org
gopkg.in
lukechampine.com
modernc.org
modules.txt
watchdog
web
.dockerignore
.gitattributes
.gitignore
Dockerfile
LICENSE
Makefile
README.md
config.yaml
go.mod
go.sum
main.go
113 lines
3.3 KiB
Go
113 lines
3.3 KiB
Go
// Copyright 2009 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.
|
|
|
|
// +build windows
|
|
|
|
// Package windows contains an interface to the low-level operating system
|
|
// primitives. OS details vary depending on the underlying system, and
|
|
// by default, godoc will display the OS-specific documentation for the current
|
|
// system. If you want godoc to display syscall documentation for another
|
|
// system, set $GOOS and $GOARCH to the desired system. For example, if
|
|
// you want to view documentation for freebsd/arm on linux/amd64, set $GOOS
|
|
// to freebsd and $GOARCH to arm.
|
|
//
|
|
// The primary use of this package is inside other packages that provide a more
|
|
// portable interface to the system, such as "os", "time" and "net". Use
|
|
// those packages rather than this one if you can.
|
|
//
|
|
// For details of the functions and data types in this package consult
|
|
// the manuals for the appropriate operating system.
|
|
//
|
|
// These calls return err == nil to indicate success; otherwise
|
|
// err represents an operating system error describing the failure and
|
|
// holds a value of type syscall.Errno.
|
|
package windows // import "golang.org/x/sys/windows"
|
|
|
|
import (
|
|
"bytes"
|
|
"strings"
|
|
"syscall"
|
|
"unsafe"
|
|
|
|
"golang.org/x/sys/internal/unsafeheader"
|
|
)
|
|
|
|
// ByteSliceFromString returns a NUL-terminated slice of bytes
|
|
// containing the text of s. If s contains a NUL byte at any
|
|
// location, it returns (nil, syscall.EINVAL).
|
|
func ByteSliceFromString(s string) ([]byte, error) {
|
|
if strings.IndexByte(s, 0) != -1 {
|
|
return nil, syscall.EINVAL
|
|
}
|
|
a := make([]byte, len(s)+1)
|
|
copy(a, s)
|
|
return a, nil
|
|
}
|
|
|
|
// BytePtrFromString returns a pointer to a NUL-terminated array of
|
|
// bytes containing the text of s. If s contains a NUL byte at any
|
|
// location, it returns (nil, syscall.EINVAL).
|
|
func BytePtrFromString(s string) (*byte, error) {
|
|
a, err := ByteSliceFromString(s)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return &a[0], nil
|
|
}
|
|
|
|
// ByteSliceToString returns a string form of the text represented by the slice s, with a terminating NUL and any
|
|
// bytes after the NUL removed.
|
|
func ByteSliceToString(s []byte) string {
|
|
if i := bytes.IndexByte(s, 0); i != -1 {
|
|
s = s[:i]
|
|
}
|
|
return string(s)
|
|
}
|
|
|
|
// BytePtrToString takes a pointer to a sequence of text and returns the corresponding string.
|
|
// If the pointer is nil, it returns the empty string. It assumes that the text sequence is terminated
|
|
// at a zero byte; if the zero byte is not present, the program may crash.
|
|
func BytePtrToString(p *byte) string {
|
|
if p == nil {
|
|
return ""
|
|
}
|
|
if *p == 0 {
|
|
return ""
|
|
}
|
|
|
|
// Find NUL terminator.
|
|
n := 0
|
|
for ptr := unsafe.Pointer(p); *(*byte)(ptr) != 0; n++ {
|
|
ptr = unsafe.Pointer(uintptr(ptr) + 1)
|
|
}
|
|
|
|
var s []byte
|
|
h := (*unsafeheader.Slice)(unsafe.Pointer(&s))
|
|
h.Data = unsafe.Pointer(p)
|
|
h.Len = n
|
|
h.Cap = n
|
|
|
|
return string(s)
|
|
}
|
|
|
|
// Single-word zero for use when we need a valid pointer to 0 bytes.
|
|
// See mksyscall.pl.
|
|
var _zero uintptr
|
|
|
|
func (ts *Timespec) Unix() (sec int64, nsec int64) {
|
|
return int64(ts.Sec), int64(ts.Nsec)
|
|
}
|
|
|
|
func (tv *Timeval) Unix() (sec int64, nsec int64) {
|
|
return int64(tv.Sec), int64(tv.Usec) * 1000
|
|
}
|
|
|
|
func (ts *Timespec) Nano() int64 {
|
|
return int64(ts.Sec)*1e9 + int64(ts.Nsec)
|
|
}
|
|
|
|
func (tv *Timeval) Nano() int64 {
|
|
return int64(tv.Sec)*1e9 + int64(tv.Usec)*1000
|
|
}
|