summaryrefslogtreecommitdiff
path: root/vendor/github.com/tklauser/go-sysconf/sysconf_netbsd.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/tklauser/go-sysconf/sysconf_netbsd.go')
-rw-r--r--vendor/github.com/tklauser/go-sysconf/sysconf_netbsd.go250
1 files changed, 250 insertions, 0 deletions
diff --git a/vendor/github.com/tklauser/go-sysconf/sysconf_netbsd.go b/vendor/github.com/tklauser/go-sysconf/sysconf_netbsd.go
new file mode 100644
index 0000000..325d4a6
--- /dev/null
+++ b/vendor/github.com/tklauser/go-sysconf/sysconf_netbsd.go
@@ -0,0 +1,250 @@
+// Copyright 2018 Tobias Klauser. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package sysconf
+
+import (
+ "sync"
+
+ "golang.org/x/sys/unix"
+)
+
+const (
+ _HOST_NAME_MAX = _MAXHOSTNAMELEN
+ _LOGIN_NAME_MAX = _MAXLOGNAME + 1
+ _SYMLOOP_MAX = _MAXSYMLINKS
+
+ _POSIX2_C_BIND = 1
+ _POSIX2_C_DEV = -1
+ _POSIX2_CHAR_TERM = -1
+ _POSIX2_FORT_DEV = -1
+ _POSIX2_FORT_RUN = -1
+ _POSIX2_LOCALEDEF = -1
+ _POSIX2_SW_DEV = -1
+ _POSIX2_UPE = -1
+)
+
+var (
+ clktck int64
+ clktckOnce sync.Once
+)
+
+func sysconfPOSIX(name int) (int64, error) {
+ // NetBSD does not define all _POSIX_* values used in sysconf_posix.go
+ // The supported ones are handled in sysconf below.
+ return -1, errInvalid
+}
+
+func sysconf(name int) (int64, error) {
+ // NetBSD uses sysctl to get some of these values. For the user.* namespace,
+ // calls get handled by user_sysctl in /usr/src/lib/libc/gen/sysctl.c
+ // Duplicate the relevant values here.
+
+ switch name {
+
+ // 1003.1
+ case SC_ARG_MAX:
+ return sysctl32("kern.argmax"), nil
+ case SC_CHILD_MAX:
+ var rlim unix.Rlimit
+ if err := unix.Getrlimit(unix.RLIMIT_NPROC, &rlim); err == nil {
+ if rlim.Cur != unix.RLIM_INFINITY {
+ return int64(rlim.Cur), nil
+ }
+ }
+ return -1, nil
+ case SC_CLK_TCK:
+ clktckOnce.Do(func() {
+ clktck = -1
+ if ci, err := unix.SysctlClockinfo("kern.clockrate"); err == nil {
+ clktck = int64(ci.Hz)
+ }
+ })
+ return clktck, nil
+ case SC_NGROUPS_MAX:
+ return sysctl32("kern.ngroups"), nil
+ case SC_JOB_CONTROL:
+ return sysctl32("kern.job_control"), nil
+ case SC_OPEN_MAX:
+ var rlim unix.Rlimit
+ if err := unix.Getrlimit(unix.RLIMIT_NOFILE, &rlim); err == nil {
+ return int64(rlim.Cur), nil
+ }
+ return -1, nil
+ case SC_STREAM_MAX:
+ // sysctl("user.stream_max")
+ return _FOPEN_MAX, nil
+ case SC_TZNAME_MAX:
+ // sysctl("user.tzname_max")
+ return _NAME_MAX, nil
+ case SC_SAVED_IDS:
+ return yesno(sysctl32("kern.saved_ids")), nil
+ case SC_VERSION:
+ return sysctl32("kern.posix1version"), nil
+
+ // 1003.1b
+ case SC_FSYNC:
+ return sysctl32("kern.fsync"), nil
+ case SC_SYNCHRONIZED_IO:
+ return sysctl32("kern.synchronized_io"), nil
+ case SC_MAPPED_FILES:
+ return sysctl32("kern.mapped_files"), nil
+ case SC_MEMLOCK:
+ return sysctl32("kern.memlock"), nil
+ case SC_MEMLOCK_RANGE:
+ return sysctl32("kern.memlock_range"), nil
+ case SC_MEMORY_PROTECTION:
+ return sysctl32("kern.memory_protection"), nil
+ case SC_MONOTONIC_CLOCK:
+ return sysctl32("kern.monotonic_clock"), nil
+ case SC_SEMAPHORES:
+ return sysctl32("kern.posix_semaphores"), nil
+ case SC_TIMERS:
+ return sysctl32("kern.posix_timers"), nil
+
+ // 1003.1c
+ case SC_LOGIN_NAME_MAX:
+ return sysctl32("kern.login_name_max"), nil
+ case SC_THREADS:
+ return sysctl32("kern.posix_threads"), nil
+
+ // 1003.1j
+ case SC_BARRIERS:
+ return yesno(sysctl32("kern.posix_barriers")), nil
+ case SC_SPIN_LOCKS:
+ return yesno(sysctl32("kern.posix_spin_locks")), nil
+ case SC_READER_WRITER_LOCKS:
+ return yesno(sysctl32("kern.posix_reader_writer_locks")), nil
+
+ // 1003.2
+ case SC_2_VERSION:
+ // sysctl user.posix2_version
+ return _POSIX2_VERSION, nil
+ case SC_2_C_BIND:
+ // sysctl user.posix2_c_bind
+ return _POSIX2_C_BIND, nil
+ case SC_2_C_DEV:
+ // sysctl user.posix2_c_dev
+ return _POSIX2_C_DEV, nil
+ case SC_2_CHAR_TERM:
+ // sysctl user.posix2_char_term
+ return _POSIX2_CHAR_TERM, nil
+ case SC_2_FORT_DEV:
+ // sysctl user.posix2_fort_dev
+ return _POSIX2_FORT_DEV, nil
+ case SC_2_FORT_RUN:
+ // sysctl user.posix2_fort_run
+ return _POSIX2_FORT_RUN, nil
+ case SC_2_LOCALEDEF:
+ // sysctl user.posix2_localedef
+ return _POSIX2_LOCALEDEF, nil
+ case SC_2_SW_DEV:
+ // sysctl user.posix2_sw_dev
+ return _POSIX2_SW_DEV, nil
+ case SC_2_UPE:
+ // sysctl user.posix2_upe
+ return _POSIX2_UPE, nil
+
+ // XPG 4.2
+ case SC_IOV_MAX:
+ return sysctl32("kern.iov_max"), nil
+ case SC_XOPEN_SHM:
+ return yesno(sysctl32("kern.ipc.sysvshm")), nil
+
+ // 1003.1-2001, XSI Option Group
+ case SC_AIO_LISTIO_MAX:
+ return sysctl32("kern.aio_listio_max"), nil
+ case SC_AIO_MAX:
+ return sysctl32("kern.aio_max"), nil
+ case SC_ASYNCHRONOUS_IO:
+ return yesno(sysctl32("kern.posix_aio")), nil
+ case SC_MESSAGE_PASSING:
+ return yesno(sysctl32("kern.posix_msg")), nil
+ case SC_MQ_OPEN_MAX:
+ return sysctl32("kern.mqueue.mq_open_max"), nil
+ case SC_MQ_PRIO_MAX:
+ return sysctl32("kern.mqueue.mq_prio_max"), nil
+ case SC_PRIORITY_SCHEDULING:
+ return yesno(sysctl32("kern.posix_sched")), nil
+ case SC_ATEXIT_MAX:
+ // sysctl("user.atexit_max")
+ return -1, nil // TODO
+
+ // 1003.1-2001, TSF
+ case SC_GETGR_R_SIZE_MAX:
+ return _GETGR_R_SIZE_MAX, nil
+ case SC_GETPW_R_SIZE_MAX:
+ return _GETPW_R_SIZE_MAX, nil
+
+ // Unsorted
+ case SC_HOST_NAME_MAX:
+ return _MAXHOSTNAMELEN, nil
+ case SC_PASS_MAX:
+ return _PASSWORD_LEN, nil
+ case SC_REGEXP:
+ return _POSIX_REGEXP, nil
+ case SC_SHARED_MEMORY_OBJECTS:
+ return _POSIX_SHARED_MEMORY_OBJECTS, nil
+ case SC_SHELL:
+ return _POSIX_SHELL, nil
+ case SC_SPAWN:
+ return _POSIX_SPAWN, nil
+
+ // Extensions
+ case SC_NPROCESSORS_CONF:
+ return sysctl32("hw.ncpu"), nil
+ case SC_NPROCESSORS_ONLN:
+ return sysctl32("hw.ncpuonline"), nil
+
+ // Linux/Solaris
+ case SC_PHYS_PAGES:
+ return sysctl64("hw.physmem64") / int64(unix.Getpagesize()), nil
+
+ // Native
+ case SC_SCHED_RT_TS:
+ return sysctl32("kern.sched.rtts"), nil
+ case SC_SCHED_PRI_MIN:
+ return sysctl32("kern.sched.pri_min"), nil
+ case SC_SCHED_PRI_MAX:
+ return sysctl32("kern.sched.pri_max"), nil
+ case SC_THREAD_DESTRUCTOR_ITERATIONS:
+ return _POSIX_THREAD_DESTRUCTOR_ITERATIONS, nil
+ case SC_THREAD_KEYS_MAX:
+ return _POSIX_THREAD_KEYS_MAX, nil
+ case SC_THREAD_STACK_MIN:
+ return int64(unix.Getpagesize()), nil
+ case SC_THREAD_THREADS_MAX:
+ return sysctl32("kern.maxproc"), nil
+ case SC_THREAD_ATTR_STACKADDR:
+ return _POSIX_THREAD_ATTR_STACKADDR, nil
+ case SC_THREAD_ATTR_STACKSIZE:
+ return _POSIX_THREAD_ATTR_STACKSIZE, nil
+ case SC_THREAD_SAFE_FUNCTIONS:
+ return _POSIX_THREAD_SAFE_FUNCTIONS, nil
+ case SC_THREAD_PRIO_PROTECT:
+ return _POSIX_THREAD_PRIO_PROTECT, nil
+ case SC_THREAD_PRIORITY_SCHEDULING,
+ SC_THREAD_PRIO_INHERIT,
+ SC_THREAD_PROCESS_SHARED:
+ return -1, nil
+ case SC_TTY_NAME_MAX:
+ return pathconf(_PATH_DEV, _PC_NAME_MAX), nil
+ case SC_TIMER_MAX:
+ return _POSIX_TIMER_MAX, nil
+ case SC_SEM_NSEMS_MAX:
+ return _LONG_MAX, nil
+ case SC_CPUTIME:
+ return _POSIX_CPUTIME, nil
+ case SC_THREAD_CPUTIME:
+ return _POSIX_THREAD_CPUTIME, nil
+ case SC_DELAYTIMER_MAX:
+ return _POSIX_DELAYTIMER_MAX, nil
+ case SC_SIGQUEUE_MAX:
+ return _POSIX_SIGQUEUE_MAX, nil
+ case SC_REALTIME_SIGNALS:
+ return 200112, nil
+ }
+
+ return sysconfGeneric(name)
+}