44 lines
1.1 KiB
Go
44 lines
1.1 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.
|
||
|
|
||
|
package syscall
|
||
|
|
||
|
import (
|
||
|
"sync"
|
||
|
"unsafe"
|
||
|
)
|
||
|
|
||
|
const _SYS_DUP3 = 0
|
||
|
|
||
|
// See version list in https://github.com/DragonFlyBSD/DragonFlyBSD/blob/master/sys/sys/param.h
|
||
|
var (
|
||
|
osreldateOnce sync.Once
|
||
|
osreldate uint32
|
||
|
)
|
||
|
|
||
|
// First __DragonFly_version after September 2019 ABI changes
|
||
|
// http://lists.dragonflybsd.org/pipermail/users/2019-September/358280.html
|
||
|
const _dragonflyABIChangeVersion = 500705
|
||
|
|
||
|
func supportsABI(ver uint32) bool {
|
||
|
osreldateOnce.Do(func() { osreldate, _ = SysctlUint32("kern.osreldate") })
|
||
|
return osreldate >= ver
|
||
|
}
|
||
|
|
||
|
func direntIno(buf []byte) (uint64, bool) {
|
||
|
return readInt(buf, unsafe.Offsetof(Dirent{}.Fileno), unsafe.Sizeof(Dirent{}.Fileno))
|
||
|
}
|
||
|
|
||
|
func direntReclen(buf []byte) (uint64, bool) {
|
||
|
namlen, ok := direntNamlen(buf)
|
||
|
if !ok {
|
||
|
return 0, false
|
||
|
}
|
||
|
return (16 + namlen + 1 + 7) &^ 7, true
|
||
|
}
|
||
|
|
||
|
func direntNamlen(buf []byte) (uint64, bool) {
|
||
|
return readInt(buf, unsafe.Offsetof(Dirent{}.Namlen), unsafe.Sizeof(Dirent{}.Namlen))
|
||
|
}
|