libphobos: Merge upstream druntime 9d0c8364, phobos 9d575282e.

Druntime changes:

 - Add platform-specific bindings for stdlib.h and sys/syctl.h.

 - Add darwin bindings for mach/dyld.h.

 - Fix solaris bindings for locale.h (PR98910).

 - Remove deprecated bindings from the module headers.

Phobos changes:

 - Backport platform-specific fixes for std.conv, std.datetime,
   std.exception, std.experimental.allocator, std.file, std.math,
   std.parallelism, std.socket, std.stdio, and std.system.

Reviewed-on: https://github.com/dlang/druntime/pull/3363
	     https://github.com/dlang/phobos/pull/7784

libphobos/ChangeLog:

	PR d/98910
	* libdruntime/MERGE: Merge upstream druntime 9d0c8364.
	* libdruntime/Makefile.am (DRUNTIME_DSOURCES): Add
	  core/internal/attributes.d
	(DRUNTIME_DSOURCES_BIONIC): Add core/sys/bionic/stdlib.d.
	(DRUNTIME_DSOURCES_DARWIN): Add core/sys/darwin/stdlib.d, and
	core/sys/darwin/sys/sysctl.d.
	(DRUNTIME_DSOURCES_DRAGONFLYBSD): Add
	core/sys/dragonflybsd/stdlib.d, and
	core/sys/dragonflybsd/sys/sysctl.d.
	(DRUNTIME_DSOURCES_FREEBSD): Add core/sys/freebsd/stdlib.d, and
	core/sys/freebsd/sys/sysctl.d.
	(DRUNTIME_DSOURCES_NETBSD): Add core/sys/netbsd/stdlib.d, and
	core/sys/netbsd/sys/sysctl.d.
	(DRUNTIME_DSOURCES_OPENBSD): Add core/sys/openbsd/stdlib.d, and
	core/sys/openbsd/sys/sysctl.d.
	(DRUNTIME_DSOURCES_SOLARIS): Add core/sys/solaris/stdlib.d.
	* libdruntime/Makefile.in: Regenerate.
	* src/MERGE: Merge upstream phobos 9d575282e.
This commit is contained in:
Iain Buclaw 2021-02-03 19:01:32 +01:00
parent b52a1dfe12
commit b1a207c6df
35 changed files with 2175 additions and 415 deletions

View File

@ -1,4 +1,4 @@
e4aae28e36c118f13e346a61af6c413aadd8e838
9d0c8364450064d0b6e68da4384f8acd19eb454f
The first line of this file holds the git revision number of the last
merge done from the dlang/druntime repository.

View File

@ -166,7 +166,8 @@ DRUNTIME_CSOURCES = core/stdc/errno_.c
DRUNTIME_DSOURCES = core/atomic.d core/attribute.d core/bitop.d \
core/checkedint.d core/cpuid.d core/demangle.d core/exception.d \
core/internal/abort.d core/internal/arrayop.d core/internal/convert.d \
core/internal/abort.d core/internal/arrayop.d \
core/internal/attributes.d core/internal/convert.d \
core/internal/hash.d core/internal/spinlock.d core/internal/string.d \
core/internal/traits.d core/math.d core/memory.d core/runtime.d \
core/simd.d core/stdc/assert_.d core/stdc/complex.d core/stdc/config.d \
@ -201,8 +202,8 @@ DRUNTIME_DSOURCES_STDCXX = core/stdcpp/exception.d \
core/stdcpp/typeinfo.d
DRUNTIME_DSOURCES_BIONIC = core/sys/bionic/err.d \
core/sys/bionic/fcntl.d core/sys/bionic/string.d \
core/sys/bionic/unistd.d
core/sys/bionic/fcntl.d core/sys/bionic/stdlib.d \
core/sys/bionic/string.d core/sys/bionic/unistd.d
DRUNTIME_DSOURCES_DARWIN = core/sys/darwin/crt_externs.d \
core/sys/darwin/dlfcn.d core/sys/darwin/err.d \
@ -212,32 +213,35 @@ DRUNTIME_DSOURCES_DARWIN = core/sys/darwin/crt_externs.d \
core/sys/darwin/mach/nlist.d core/sys/darwin/mach/port.d \
core/sys/darwin/mach/semaphore.d core/sys/darwin/mach/stab.d \
core/sys/darwin/mach/thread_act.d core/sys/darwin/netinet/in_.d \
core/sys/darwin/pthread.d core/sys/darwin/string.d \
core/sys/darwin/sys/attr.d core/sys/darwin/sys/cdefs.d \
core/sys/darwin/sys/event.d core/sys/darwin/sys/mman.d
core/sys/darwin/pthread.d core/sys/darwin/stdlib.d \
core/sys/darwin/string.d core/sys/darwin/sys/attr.d \
core/sys/darwin/sys/cdefs.d core/sys/darwin/sys/event.d \
core/sys/darwin/sys/mman.d core/sys/darwin/sys/sysctl.d
DRUNTIME_DSOURCES_DRAGONFLYBSD = core/sys/dragonflybsd/dlfcn.d \
core/sys/dragonflybsd/err.d core/sys/dragonflybsd/execinfo.d \
core/sys/dragonflybsd/netinet/in_.d core/sys/dragonflybsd/pthread_np.d \
core/sys/dragonflybsd/string.d core/sys/dragonflybsd/sys/_bitset.d \
core/sys/dragonflybsd/stdlib.d core/sys/dragonflybsd/string.d \
core/sys/dragonflybsd/sys/_bitset.d \
core/sys/dragonflybsd/sys/_cpuset.d core/sys/dragonflybsd/sys/cdefs.d \
core/sys/dragonflybsd/sys/elf.d core/sys/dragonflybsd/sys/elf32.d \
core/sys/dragonflybsd/sys/elf64.d \
core/sys/dragonflybsd/sys/elf_common.d \
core/sys/dragonflybsd/sys/event.d core/sys/dragonflybsd/sys/link_elf.d \
core/sys/dragonflybsd/sys/mman.d core/sys/dragonflybsd/sys/socket.d \
core/sys/dragonflybsd/time.d
core/sys/dragonflybsd/sys/sysctl.d core/sys/dragonflybsd/time.d
DRUNTIME_DSOURCES_FREEBSD = core/sys/freebsd/config.d \
core/sys/freebsd/dlfcn.d core/sys/freebsd/err.d \
core/sys/freebsd/execinfo.d core/sys/freebsd/netinet/in_.d \
core/sys/freebsd/pthread_np.d core/sys/freebsd/string.d \
core/sys/freebsd/sys/_bitset.d core/sys/freebsd/sys/_cpuset.d \
core/sys/freebsd/sys/cdefs.d core/sys/freebsd/sys/elf.d \
core/sys/freebsd/sys/elf32.d core/sys/freebsd/sys/elf64.d \
core/sys/freebsd/sys/elf_common.d core/sys/freebsd/sys/event.d \
core/sys/freebsd/sys/link_elf.d core/sys/freebsd/sys/mman.d \
core/sys/freebsd/sys/mount.d core/sys/freebsd/time.d \
core/sys/freebsd/pthread_np.d core/sys/freebsd/stdlib.d \
core/sys/freebsd/string.d core/sys/freebsd/sys/_bitset.d \
core/sys/freebsd/sys/_cpuset.d core/sys/freebsd/sys/cdefs.d \
core/sys/freebsd/sys/elf.d core/sys/freebsd/sys/elf32.d \
core/sys/freebsd/sys/elf64.d core/sys/freebsd/sys/elf_common.d \
core/sys/freebsd/sys/event.d core/sys/freebsd/sys/link_elf.d \
core/sys/freebsd/sys/mman.d core/sys/freebsd/sys/mount.d \
core/sys/freebsd/sys/sysctl.d core/sys/freebsd/time.d \
core/sys/freebsd/unistd.d
DRUNTIME_DSOURCES_LINUX = core/sys/linux/config.d \
@ -257,18 +261,20 @@ DRUNTIME_DSOURCES_LINUX = core/sys/linux/config.d \
DRUNTIME_DSOURCES_NETBSD = core/sys/netbsd/dlfcn.d \
core/sys/netbsd/err.d core/sys/netbsd/execinfo.d \
core/sys/netbsd/string.d core/sys/netbsd/sys/elf.d \
core/sys/netbsd/sys/elf32.d core/sys/netbsd/sys/elf64.d \
core/sys/netbsd/sys/elf_common.d core/sys/netbsd/sys/event.d \
core/sys/netbsd/sys/featuretest.d core/sys/netbsd/sys/link_elf.d \
core/sys/netbsd/sys/mman.d core/sys/netbsd/time.d
core/sys/netbsd/stdlib.d core/sys/netbsd/string.d \
core/sys/netbsd/sys/elf.d core/sys/netbsd/sys/elf32.d \
core/sys/netbsd/sys/elf64.d core/sys/netbsd/sys/elf_common.d \
core/sys/netbsd/sys/event.d core/sys/netbsd/sys/featuretest.d \
core/sys/netbsd/sys/link_elf.d core/sys/netbsd/sys/mman.d \
core/sys/netbsd/sys/sysctl.d core/sys/netbsd/time.d
DRUNTIME_DSOURCES_OPENBSD = core/sys/openbsd/dlfcn.d \
core/sys/openbsd/err.d core/sys/openbsd/string.d \
core/sys/openbsd/sys/cdefs.d core/sys/openbsd/sys/elf.d \
core/sys/openbsd/sys/elf32.d core/sys/openbsd/sys/elf64.d \
core/sys/openbsd/sys/elf_common.d core/sys/openbsd/sys/link_elf.d \
core/sys/openbsd/sys/mman.d core/sys/openbsd/time.d
core/sys/openbsd/err.d core/sys/openbsd/stdlib.d \
core/sys/openbsd/string.d core/sys/openbsd/sys/cdefs.d \
core/sys/openbsd/sys/elf.d core/sys/openbsd/sys/elf32.d \
core/sys/openbsd/sys/elf64.d core/sys/openbsd/sys/elf_common.d \
core/sys/openbsd/sys/link_elf.d core/sys/openbsd/sys/mman.d \
core/sys/openbsd/sys/sysctl.d core/sys/openbsd/time.d
DRUNTIME_DSOURCES_POSIX = core/sys/posix/aio.d \
core/sys/posix/arpa/inet.d core/sys/posix/config.d \
@ -300,12 +306,13 @@ DRUNTIME_DSOURCES_POSIX = core/sys/posix/aio.d \
DRUNTIME_DSOURCES_SOLARIS = core/sys/solaris/dlfcn.d \
core/sys/solaris/elf.d core/sys/solaris/err.d \
core/sys/solaris/execinfo.d core/sys/solaris/libelf.d \
core/sys/solaris/link.d core/sys/solaris/sys/elf.d \
core/sys/solaris/sys/elf_386.d core/sys/solaris/sys/elf_SPARC.d \
core/sys/solaris/sys/elf_amd64.d core/sys/solaris/sys/elf_notes.d \
core/sys/solaris/sys/elftypes.d core/sys/solaris/sys/link.d \
core/sys/solaris/sys/priocntl.d core/sys/solaris/sys/procset.d \
core/sys/solaris/sys/types.d core/sys/solaris/time.d
core/sys/solaris/link.d core/sys/solaris/stdlib.d \
core/sys/solaris/sys/elf.d core/sys/solaris/sys/elf_386.d \
core/sys/solaris/sys/elf_SPARC.d core/sys/solaris/sys/elf_amd64.d \
core/sys/solaris/sys/elf_notes.d core/sys/solaris/sys/elftypes.d \
core/sys/solaris/sys/link.d core/sys/solaris/sys/priocntl.d \
core/sys/solaris/sys/procset.d core/sys/solaris/sys/types.d \
core/sys/solaris/time.d
DRUNTIME_DSOURCES_WINDOWS = core/sys/windows/accctrl.d \
core/sys/windows/aclapi.d core/sys/windows/aclui.d \

View File

@ -188,31 +188,32 @@ am__dirstamp = $(am__leading_dot)dirstamp
am__objects_1 = core/atomic.lo core/attribute.lo core/bitop.lo \
core/checkedint.lo core/cpuid.lo core/demangle.lo \
core/exception.lo core/internal/abort.lo \
core/internal/arrayop.lo core/internal/convert.lo \
core/internal/hash.lo core/internal/spinlock.lo \
core/internal/string.lo core/internal/traits.lo core/math.lo \
core/memory.lo core/runtime.lo core/simd.lo \
core/stdc/assert_.lo core/stdc/complex.lo core/stdc/config.lo \
core/stdc/ctype.lo core/stdc/errno.lo core/stdc/fenv.lo \
core/stdc/float_.lo core/stdc/inttypes.lo core/stdc/limits.lo \
core/stdc/locale.lo core/stdc/math.lo core/stdc/signal.lo \
core/stdc/stdarg.lo core/stdc/stddef.lo core/stdc/stdint.lo \
core/stdc/stdio.lo core/stdc/stdlib.lo core/stdc/string.lo \
core/stdc/tgmath.lo core/stdc/time.lo core/stdc/wchar_.lo \
core/stdc/wctype.lo core/sync/barrier.lo \
core/sync/condition.lo core/sync/config.lo \
core/sync/exception.lo core/sync/mutex.lo core/sync/rwmutex.lo \
core/sync/semaphore.lo core/thread/context.lo \
core/thread/fiber.lo core/thread/osthread.lo \
core/thread/package.lo core/thread/threadbase.lo \
core/thread/threadgroup.lo core/thread/types.lo core/time.lo \
core/vararg.lo gc/bits.lo gc/config.lo gc/gcinterface.lo \
gc/impl/conservative/gc.lo gc/impl/manual/gc.lo gc/os.lo \
gc/pooltable.lo gc/proxy.lo gcc/attribute.lo gcc/backtrace.lo \
gcc/builtins.lo gcc/deh.lo gcc/emutls.lo gcc/gthread.lo \
gcc/sections/android.lo gcc/sections/elf_shared.lo \
gcc/sections/osx.lo gcc/sections/package.lo \
gcc/sections/win32.lo gcc/sections/win64.lo gcc/unwind/arm.lo \
core/internal/arrayop.lo core/internal/attributes.lo \
core/internal/convert.lo core/internal/hash.lo \
core/internal/spinlock.lo core/internal/string.lo \
core/internal/traits.lo core/math.lo core/memory.lo \
core/runtime.lo core/simd.lo core/stdc/assert_.lo \
core/stdc/complex.lo core/stdc/config.lo core/stdc/ctype.lo \
core/stdc/errno.lo core/stdc/fenv.lo core/stdc/float_.lo \
core/stdc/inttypes.lo core/stdc/limits.lo core/stdc/locale.lo \
core/stdc/math.lo core/stdc/signal.lo core/stdc/stdarg.lo \
core/stdc/stddef.lo core/stdc/stdint.lo core/stdc/stdio.lo \
core/stdc/stdlib.lo core/stdc/string.lo core/stdc/tgmath.lo \
core/stdc/time.lo core/stdc/wchar_.lo core/stdc/wctype.lo \
core/sync/barrier.lo core/sync/condition.lo \
core/sync/config.lo core/sync/exception.lo core/sync/mutex.lo \
core/sync/rwmutex.lo core/sync/semaphore.lo \
core/thread/context.lo core/thread/fiber.lo \
core/thread/osthread.lo core/thread/package.lo \
core/thread/threadbase.lo core/thread/threadgroup.lo \
core/thread/types.lo core/time.lo core/vararg.lo gc/bits.lo \
gc/config.lo gc/gcinterface.lo gc/impl/conservative/gc.lo \
gc/impl/manual/gc.lo gc/os.lo gc/pooltable.lo gc/proxy.lo \
gcc/attribute.lo gcc/backtrace.lo gcc/builtins.lo gcc/deh.lo \
gcc/emutls.lo gcc/gthread.lo gcc/sections/android.lo \
gcc/sections/elf_shared.lo gcc/sections/osx.lo \
gcc/sections/package.lo gcc/sections/win32.lo \
gcc/sections/win64.lo gcc/unwind/arm.lo \
gcc/unwind/arm_common.lo gcc/unwind/c6x.lo \
gcc/unwind/generic.lo gcc/unwind/package.lo gcc/unwind/pe.lo \
object.lo rt/aApply.lo rt/aApplyR.lo rt/aaA.lo rt/adi.lo \
@ -263,14 +264,16 @@ am__objects_5 = core/sys/darwin/crt_externs.lo \
core/sys/darwin/mach/stab.lo \
core/sys/darwin/mach/thread_act.lo \
core/sys/darwin/netinet/in_.lo core/sys/darwin/pthread.lo \
core/sys/darwin/string.lo core/sys/darwin/sys/attr.lo \
core/sys/darwin/sys/cdefs.lo core/sys/darwin/sys/event.lo \
core/sys/darwin/sys/mman.lo
core/sys/darwin/stdlib.lo core/sys/darwin/string.lo \
core/sys/darwin/sys/attr.lo core/sys/darwin/sys/cdefs.lo \
core/sys/darwin/sys/event.lo core/sys/darwin/sys/mman.lo \
core/sys/darwin/sys/sysctl.lo
@DRUNTIME_OS_DARWIN_TRUE@am__objects_6 = $(am__objects_5)
am__objects_7 = core/sys/dragonflybsd/dlfcn.lo \
core/sys/dragonflybsd/err.lo core/sys/dragonflybsd/execinfo.lo \
core/sys/dragonflybsd/netinet/in_.lo \
core/sys/dragonflybsd/pthread_np.lo \
core/sys/dragonflybsd/stdlib.lo \
core/sys/dragonflybsd/string.lo \
core/sys/dragonflybsd/sys/_bitset.lo \
core/sys/dragonflybsd/sys/_cpuset.lo \
@ -283,39 +286,43 @@ am__objects_7 = core/sys/dragonflybsd/dlfcn.lo \
core/sys/dragonflybsd/sys/link_elf.lo \
core/sys/dragonflybsd/sys/mman.lo \
core/sys/dragonflybsd/sys/socket.lo \
core/sys/dragonflybsd/sys/sysctl.lo \
core/sys/dragonflybsd/time.lo
@DRUNTIME_OS_DRAGONFLYBSD_TRUE@am__objects_8 = $(am__objects_7)
am__objects_9 = core/sys/bionic/err.lo core/sys/bionic/fcntl.lo \
core/sys/bionic/string.lo core/sys/bionic/unistd.lo
core/sys/bionic/stdlib.lo core/sys/bionic/string.lo \
core/sys/bionic/unistd.lo
@DRUNTIME_OS_ANDROID_TRUE@am__objects_10 = $(am__objects_9)
am__objects_11 = core/sys/freebsd/config.lo core/sys/freebsd/dlfcn.lo \
core/sys/freebsd/err.lo core/sys/freebsd/execinfo.lo \
core/sys/freebsd/netinet/in_.lo core/sys/freebsd/pthread_np.lo \
core/sys/freebsd/string.lo core/sys/freebsd/sys/_bitset.lo \
core/sys/freebsd/stdlib.lo core/sys/freebsd/string.lo \
core/sys/freebsd/sys/_bitset.lo \
core/sys/freebsd/sys/_cpuset.lo core/sys/freebsd/sys/cdefs.lo \
core/sys/freebsd/sys/elf.lo core/sys/freebsd/sys/elf32.lo \
core/sys/freebsd/sys/elf64.lo \
core/sys/freebsd/sys/elf_common.lo \
core/sys/freebsd/sys/event.lo core/sys/freebsd/sys/link_elf.lo \
core/sys/freebsd/sys/mman.lo core/sys/freebsd/sys/mount.lo \
core/sys/freebsd/time.lo core/sys/freebsd/unistd.lo
core/sys/freebsd/sys/sysctl.lo core/sys/freebsd/time.lo \
core/sys/freebsd/unistd.lo
@DRUNTIME_OS_FREEBSD_TRUE@am__objects_12 = $(am__objects_11)
am__objects_13 = core/sys/netbsd/dlfcn.lo core/sys/netbsd/err.lo \
core/sys/netbsd/execinfo.lo core/sys/netbsd/string.lo \
core/sys/netbsd/sys/elf.lo core/sys/netbsd/sys/elf32.lo \
core/sys/netbsd/sys/elf64.lo core/sys/netbsd/sys/elf_common.lo \
core/sys/netbsd/sys/event.lo \
core/sys/netbsd/execinfo.lo core/sys/netbsd/stdlib.lo \
core/sys/netbsd/string.lo core/sys/netbsd/sys/elf.lo \
core/sys/netbsd/sys/elf32.lo core/sys/netbsd/sys/elf64.lo \
core/sys/netbsd/sys/elf_common.lo core/sys/netbsd/sys/event.lo \
core/sys/netbsd/sys/featuretest.lo \
core/sys/netbsd/sys/link_elf.lo core/sys/netbsd/sys/mman.lo \
core/sys/netbsd/time.lo
core/sys/netbsd/sys/sysctl.lo core/sys/netbsd/time.lo
@DRUNTIME_OS_NETBSD_TRUE@am__objects_14 = $(am__objects_13)
am__objects_15 = core/sys/openbsd/dlfcn.lo core/sys/openbsd/err.lo \
core/sys/openbsd/string.lo core/sys/openbsd/sys/cdefs.lo \
core/sys/openbsd/sys/elf.lo core/sys/openbsd/sys/elf32.lo \
core/sys/openbsd/sys/elf64.lo \
core/sys/openbsd/stdlib.lo core/sys/openbsd/string.lo \
core/sys/openbsd/sys/cdefs.lo core/sys/openbsd/sys/elf.lo \
core/sys/openbsd/sys/elf32.lo core/sys/openbsd/sys/elf64.lo \
core/sys/openbsd/sys/elf_common.lo \
core/sys/openbsd/sys/link_elf.lo core/sys/openbsd/sys/mman.lo \
core/sys/openbsd/time.lo
core/sys/openbsd/sys/sysctl.lo core/sys/openbsd/time.lo
@DRUNTIME_OS_OPENBSD_TRUE@am__objects_16 = $(am__objects_15)
am__objects_17 = core/sys/linux/config.lo core/sys/linux/dlfcn.lo \
core/sys/linux/elf.lo core/sys/linux/epoll.lo \
@ -422,7 +429,8 @@ am__objects_19 = core/sys/windows/accctrl.lo \
am__objects_21 = core/sys/solaris/dlfcn.lo core/sys/solaris/elf.lo \
core/sys/solaris/err.lo core/sys/solaris/execinfo.lo \
core/sys/solaris/libelf.lo core/sys/solaris/link.lo \
core/sys/solaris/sys/elf.lo core/sys/solaris/sys/elf_386.lo \
core/sys/solaris/stdlib.lo core/sys/solaris/sys/elf.lo \
core/sys/solaris/sys/elf_386.lo \
core/sys/solaris/sys/elf_SPARC.lo \
core/sys/solaris/sys/elf_amd64.lo \
core/sys/solaris/sys/elf_notes.lo \
@ -784,7 +792,8 @@ libgdruntime_convenience_la_LINK = $(libgdruntime_la_LINK)
DRUNTIME_CSOURCES = core/stdc/errno_.c
DRUNTIME_DSOURCES = core/atomic.d core/attribute.d core/bitop.d \
core/checkedint.d core/cpuid.d core/demangle.d core/exception.d \
core/internal/abort.d core/internal/arrayop.d core/internal/convert.d \
core/internal/abort.d core/internal/arrayop.d \
core/internal/attributes.d core/internal/convert.d \
core/internal/hash.d core/internal/spinlock.d core/internal/string.d \
core/internal/traits.d core/math.d core/memory.d core/runtime.d \
core/simd.d core/stdc/assert_.d core/stdc/complex.d core/stdc/config.d \
@ -819,8 +828,8 @@ DRUNTIME_DSOURCES_STDCXX = core/stdcpp/exception.d \
core/stdcpp/typeinfo.d
DRUNTIME_DSOURCES_BIONIC = core/sys/bionic/err.d \
core/sys/bionic/fcntl.d core/sys/bionic/string.d \
core/sys/bionic/unistd.d
core/sys/bionic/fcntl.d core/sys/bionic/stdlib.d \
core/sys/bionic/string.d core/sys/bionic/unistd.d
DRUNTIME_DSOURCES_DARWIN = core/sys/darwin/crt_externs.d \
core/sys/darwin/dlfcn.d core/sys/darwin/err.d \
@ -830,32 +839,35 @@ DRUNTIME_DSOURCES_DARWIN = core/sys/darwin/crt_externs.d \
core/sys/darwin/mach/nlist.d core/sys/darwin/mach/port.d \
core/sys/darwin/mach/semaphore.d core/sys/darwin/mach/stab.d \
core/sys/darwin/mach/thread_act.d core/sys/darwin/netinet/in_.d \
core/sys/darwin/pthread.d core/sys/darwin/string.d \
core/sys/darwin/sys/attr.d core/sys/darwin/sys/cdefs.d \
core/sys/darwin/sys/event.d core/sys/darwin/sys/mman.d
core/sys/darwin/pthread.d core/sys/darwin/stdlib.d \
core/sys/darwin/string.d core/sys/darwin/sys/attr.d \
core/sys/darwin/sys/cdefs.d core/sys/darwin/sys/event.d \
core/sys/darwin/sys/mman.d core/sys/darwin/sys/sysctl.d
DRUNTIME_DSOURCES_DRAGONFLYBSD = core/sys/dragonflybsd/dlfcn.d \
core/sys/dragonflybsd/err.d core/sys/dragonflybsd/execinfo.d \
core/sys/dragonflybsd/netinet/in_.d core/sys/dragonflybsd/pthread_np.d \
core/sys/dragonflybsd/string.d core/sys/dragonflybsd/sys/_bitset.d \
core/sys/dragonflybsd/stdlib.d core/sys/dragonflybsd/string.d \
core/sys/dragonflybsd/sys/_bitset.d \
core/sys/dragonflybsd/sys/_cpuset.d core/sys/dragonflybsd/sys/cdefs.d \
core/sys/dragonflybsd/sys/elf.d core/sys/dragonflybsd/sys/elf32.d \
core/sys/dragonflybsd/sys/elf64.d \
core/sys/dragonflybsd/sys/elf_common.d \
core/sys/dragonflybsd/sys/event.d core/sys/dragonflybsd/sys/link_elf.d \
core/sys/dragonflybsd/sys/mman.d core/sys/dragonflybsd/sys/socket.d \
core/sys/dragonflybsd/time.d
core/sys/dragonflybsd/sys/sysctl.d core/sys/dragonflybsd/time.d
DRUNTIME_DSOURCES_FREEBSD = core/sys/freebsd/config.d \
core/sys/freebsd/dlfcn.d core/sys/freebsd/err.d \
core/sys/freebsd/execinfo.d core/sys/freebsd/netinet/in_.d \
core/sys/freebsd/pthread_np.d core/sys/freebsd/string.d \
core/sys/freebsd/sys/_bitset.d core/sys/freebsd/sys/_cpuset.d \
core/sys/freebsd/sys/cdefs.d core/sys/freebsd/sys/elf.d \
core/sys/freebsd/sys/elf32.d core/sys/freebsd/sys/elf64.d \
core/sys/freebsd/sys/elf_common.d core/sys/freebsd/sys/event.d \
core/sys/freebsd/sys/link_elf.d core/sys/freebsd/sys/mman.d \
core/sys/freebsd/sys/mount.d core/sys/freebsd/time.d \
core/sys/freebsd/pthread_np.d core/sys/freebsd/stdlib.d \
core/sys/freebsd/string.d core/sys/freebsd/sys/_bitset.d \
core/sys/freebsd/sys/_cpuset.d core/sys/freebsd/sys/cdefs.d \
core/sys/freebsd/sys/elf.d core/sys/freebsd/sys/elf32.d \
core/sys/freebsd/sys/elf64.d core/sys/freebsd/sys/elf_common.d \
core/sys/freebsd/sys/event.d core/sys/freebsd/sys/link_elf.d \
core/sys/freebsd/sys/mman.d core/sys/freebsd/sys/mount.d \
core/sys/freebsd/sys/sysctl.d core/sys/freebsd/time.d \
core/sys/freebsd/unistd.d
DRUNTIME_DSOURCES_LINUX = core/sys/linux/config.d \
@ -875,18 +887,20 @@ DRUNTIME_DSOURCES_LINUX = core/sys/linux/config.d \
DRUNTIME_DSOURCES_NETBSD = core/sys/netbsd/dlfcn.d \
core/sys/netbsd/err.d core/sys/netbsd/execinfo.d \
core/sys/netbsd/string.d core/sys/netbsd/sys/elf.d \
core/sys/netbsd/sys/elf32.d core/sys/netbsd/sys/elf64.d \
core/sys/netbsd/sys/elf_common.d core/sys/netbsd/sys/event.d \
core/sys/netbsd/sys/featuretest.d core/sys/netbsd/sys/link_elf.d \
core/sys/netbsd/sys/mman.d core/sys/netbsd/time.d
core/sys/netbsd/stdlib.d core/sys/netbsd/string.d \
core/sys/netbsd/sys/elf.d core/sys/netbsd/sys/elf32.d \
core/sys/netbsd/sys/elf64.d core/sys/netbsd/sys/elf_common.d \
core/sys/netbsd/sys/event.d core/sys/netbsd/sys/featuretest.d \
core/sys/netbsd/sys/link_elf.d core/sys/netbsd/sys/mman.d \
core/sys/netbsd/sys/sysctl.d core/sys/netbsd/time.d
DRUNTIME_DSOURCES_OPENBSD = core/sys/openbsd/dlfcn.d \
core/sys/openbsd/err.d core/sys/openbsd/string.d \
core/sys/openbsd/sys/cdefs.d core/sys/openbsd/sys/elf.d \
core/sys/openbsd/sys/elf32.d core/sys/openbsd/sys/elf64.d \
core/sys/openbsd/sys/elf_common.d core/sys/openbsd/sys/link_elf.d \
core/sys/openbsd/sys/mman.d core/sys/openbsd/time.d
core/sys/openbsd/err.d core/sys/openbsd/stdlib.d \
core/sys/openbsd/string.d core/sys/openbsd/sys/cdefs.d \
core/sys/openbsd/sys/elf.d core/sys/openbsd/sys/elf32.d \
core/sys/openbsd/sys/elf64.d core/sys/openbsd/sys/elf_common.d \
core/sys/openbsd/sys/link_elf.d core/sys/openbsd/sys/mman.d \
core/sys/openbsd/sys/sysctl.d core/sys/openbsd/time.d
DRUNTIME_DSOURCES_POSIX = core/sys/posix/aio.d \
core/sys/posix/arpa/inet.d core/sys/posix/config.d \
@ -918,12 +932,13 @@ DRUNTIME_DSOURCES_POSIX = core/sys/posix/aio.d \
DRUNTIME_DSOURCES_SOLARIS = core/sys/solaris/dlfcn.d \
core/sys/solaris/elf.d core/sys/solaris/err.d \
core/sys/solaris/execinfo.d core/sys/solaris/libelf.d \
core/sys/solaris/link.d core/sys/solaris/sys/elf.d \
core/sys/solaris/sys/elf_386.d core/sys/solaris/sys/elf_SPARC.d \
core/sys/solaris/sys/elf_amd64.d core/sys/solaris/sys/elf_notes.d \
core/sys/solaris/sys/elftypes.d core/sys/solaris/sys/link.d \
core/sys/solaris/sys/priocntl.d core/sys/solaris/sys/procset.d \
core/sys/solaris/sys/types.d core/sys/solaris/time.d
core/sys/solaris/link.d core/sys/solaris/stdlib.d \
core/sys/solaris/sys/elf.d core/sys/solaris/sys/elf_386.d \
core/sys/solaris/sys/elf_SPARC.d core/sys/solaris/sys/elf_amd64.d \
core/sys/solaris/sys/elf_notes.d core/sys/solaris/sys/elftypes.d \
core/sys/solaris/sys/link.d core/sys/solaris/sys/priocntl.d \
core/sys/solaris/sys/procset.d core/sys/solaris/sys/types.d \
core/sys/solaris/time.d
DRUNTIME_DSOURCES_WINDOWS = core/sys/windows/accctrl.d \
core/sys/windows/aclapi.d core/sys/windows/aclui.d \
@ -1106,6 +1121,7 @@ core/internal/$(am__dirstamp):
@: > core/internal/$(am__dirstamp)
core/internal/abort.lo: core/internal/$(am__dirstamp)
core/internal/arrayop.lo: core/internal/$(am__dirstamp)
core/internal/attributes.lo: core/internal/$(am__dirstamp)
core/internal/convert.lo: core/internal/$(am__dirstamp)
core/internal/hash.lo: core/internal/$(am__dirstamp)
core/internal/spinlock.lo: core/internal/$(am__dirstamp)
@ -1347,6 +1363,7 @@ core/sys/darwin/netinet/$(am__dirstamp):
core/sys/darwin/netinet/in_.lo: \
core/sys/darwin/netinet/$(am__dirstamp)
core/sys/darwin/pthread.lo: core/sys/darwin/$(am__dirstamp)
core/sys/darwin/stdlib.lo: core/sys/darwin/$(am__dirstamp)
core/sys/darwin/string.lo: core/sys/darwin/$(am__dirstamp)
core/sys/darwin/sys/$(am__dirstamp):
@$(MKDIR_P) core/sys/darwin/sys
@ -1355,6 +1372,7 @@ core/sys/darwin/sys/attr.lo: core/sys/darwin/sys/$(am__dirstamp)
core/sys/darwin/sys/cdefs.lo: core/sys/darwin/sys/$(am__dirstamp)
core/sys/darwin/sys/event.lo: core/sys/darwin/sys/$(am__dirstamp)
core/sys/darwin/sys/mman.lo: core/sys/darwin/sys/$(am__dirstamp)
core/sys/darwin/sys/sysctl.lo: core/sys/darwin/sys/$(am__dirstamp)
core/sys/dragonflybsd/$(am__dirstamp):
@$(MKDIR_P) core/sys/dragonflybsd
@: > core/sys/dragonflybsd/$(am__dirstamp)
@ -1369,6 +1387,8 @@ core/sys/dragonflybsd/netinet/in_.lo: \
core/sys/dragonflybsd/netinet/$(am__dirstamp)
core/sys/dragonflybsd/pthread_np.lo: \
core/sys/dragonflybsd/$(am__dirstamp)
core/sys/dragonflybsd/stdlib.lo: \
core/sys/dragonflybsd/$(am__dirstamp)
core/sys/dragonflybsd/string.lo: \
core/sys/dragonflybsd/$(am__dirstamp)
core/sys/dragonflybsd/sys/$(am__dirstamp):
@ -1396,12 +1416,15 @@ core/sys/dragonflybsd/sys/mman.lo: \
core/sys/dragonflybsd/sys/$(am__dirstamp)
core/sys/dragonflybsd/sys/socket.lo: \
core/sys/dragonflybsd/sys/$(am__dirstamp)
core/sys/dragonflybsd/sys/sysctl.lo: \
core/sys/dragonflybsd/sys/$(am__dirstamp)
core/sys/dragonflybsd/time.lo: core/sys/dragonflybsd/$(am__dirstamp)
core/sys/bionic/$(am__dirstamp):
@$(MKDIR_P) core/sys/bionic
@: > core/sys/bionic/$(am__dirstamp)
core/sys/bionic/err.lo: core/sys/bionic/$(am__dirstamp)
core/sys/bionic/fcntl.lo: core/sys/bionic/$(am__dirstamp)
core/sys/bionic/stdlib.lo: core/sys/bionic/$(am__dirstamp)
core/sys/bionic/string.lo: core/sys/bionic/$(am__dirstamp)
core/sys/bionic/unistd.lo: core/sys/bionic/$(am__dirstamp)
core/sys/freebsd/$(am__dirstamp):
@ -1417,6 +1440,7 @@ core/sys/freebsd/netinet/$(am__dirstamp):
core/sys/freebsd/netinet/in_.lo: \
core/sys/freebsd/netinet/$(am__dirstamp)
core/sys/freebsd/pthread_np.lo: core/sys/freebsd/$(am__dirstamp)
core/sys/freebsd/stdlib.lo: core/sys/freebsd/$(am__dirstamp)
core/sys/freebsd/string.lo: core/sys/freebsd/$(am__dirstamp)
core/sys/freebsd/sys/$(am__dirstamp):
@$(MKDIR_P) core/sys/freebsd/sys
@ -1434,6 +1458,7 @@ core/sys/freebsd/sys/link_elf.lo: \
core/sys/freebsd/sys/$(am__dirstamp)
core/sys/freebsd/sys/mman.lo: core/sys/freebsd/sys/$(am__dirstamp)
core/sys/freebsd/sys/mount.lo: core/sys/freebsd/sys/$(am__dirstamp)
core/sys/freebsd/sys/sysctl.lo: core/sys/freebsd/sys/$(am__dirstamp)
core/sys/freebsd/time.lo: core/sys/freebsd/$(am__dirstamp)
core/sys/freebsd/unistd.lo: core/sys/freebsd/$(am__dirstamp)
core/sys/netbsd/$(am__dirstamp):
@ -1442,6 +1467,7 @@ core/sys/netbsd/$(am__dirstamp):
core/sys/netbsd/dlfcn.lo: core/sys/netbsd/$(am__dirstamp)
core/sys/netbsd/err.lo: core/sys/netbsd/$(am__dirstamp)
core/sys/netbsd/execinfo.lo: core/sys/netbsd/$(am__dirstamp)
core/sys/netbsd/stdlib.lo: core/sys/netbsd/$(am__dirstamp)
core/sys/netbsd/string.lo: core/sys/netbsd/$(am__dirstamp)
core/sys/netbsd/sys/$(am__dirstamp):
@$(MKDIR_P) core/sys/netbsd/sys
@ -1456,12 +1482,14 @@ core/sys/netbsd/sys/featuretest.lo: \
core/sys/netbsd/sys/$(am__dirstamp)
core/sys/netbsd/sys/link_elf.lo: core/sys/netbsd/sys/$(am__dirstamp)
core/sys/netbsd/sys/mman.lo: core/sys/netbsd/sys/$(am__dirstamp)
core/sys/netbsd/sys/sysctl.lo: core/sys/netbsd/sys/$(am__dirstamp)
core/sys/netbsd/time.lo: core/sys/netbsd/$(am__dirstamp)
core/sys/openbsd/$(am__dirstamp):
@$(MKDIR_P) core/sys/openbsd
@: > core/sys/openbsd/$(am__dirstamp)
core/sys/openbsd/dlfcn.lo: core/sys/openbsd/$(am__dirstamp)
core/sys/openbsd/err.lo: core/sys/openbsd/$(am__dirstamp)
core/sys/openbsd/stdlib.lo: core/sys/openbsd/$(am__dirstamp)
core/sys/openbsd/string.lo: core/sys/openbsd/$(am__dirstamp)
core/sys/openbsd/sys/$(am__dirstamp):
@$(MKDIR_P) core/sys/openbsd/sys
@ -1475,6 +1503,7 @@ core/sys/openbsd/sys/elf_common.lo: \
core/sys/openbsd/sys/link_elf.lo: \
core/sys/openbsd/sys/$(am__dirstamp)
core/sys/openbsd/sys/mman.lo: core/sys/openbsd/sys/$(am__dirstamp)
core/sys/openbsd/sys/sysctl.lo: core/sys/openbsd/sys/$(am__dirstamp)
core/sys/openbsd/time.lo: core/sys/openbsd/$(am__dirstamp)
core/sys/linux/$(am__dirstamp):
@$(MKDIR_P) core/sys/linux
@ -1698,6 +1727,7 @@ core/sys/solaris/err.lo: core/sys/solaris/$(am__dirstamp)
core/sys/solaris/execinfo.lo: core/sys/solaris/$(am__dirstamp)
core/sys/solaris/libelf.lo: core/sys/solaris/$(am__dirstamp)
core/sys/solaris/link.lo: core/sys/solaris/$(am__dirstamp)
core/sys/solaris/stdlib.lo: core/sys/solaris/$(am__dirstamp)
core/sys/solaris/sys/$(am__dirstamp):
@$(MKDIR_P) core/sys/solaris/sys
@: > core/sys/solaris/sys/$(am__dirstamp)

View File

@ -0,0 +1,11 @@
module core.internal.attributes;
/**
Used to annotate `unittest`s which need to be tested in a `-betterC` environment.
Such `unittest`s will be compiled and executed without linking druntime in, with
a `__traits(getUnitTests, mixin(__MODULE__))` style test runner.
Note that just like any other `unittest` in druntime, they will also be compiled
and executed without `-betterC`.
*/
package(core) enum betterC = 1;

View File

@ -0,0 +1,17 @@
/**
* D header file for Bionic stdlib.h.
*
* Copyright: Copyright © 2021, The D Language Foundation
* License: <a href="http://www.boost.org/LICENSE_1_0.txt">Boost License 1.0</a>.
* Authors: Iain Buclaw
*/
module core.sys.bionic.stdlib;
public import core.sys.posix.stdlib;
version (CRuntime_Bionic):
extern (C):
nothrow:
@nogc:
const(char)* getprogname();
void setprogname(scope const char* name);

View File

@ -33,7 +33,10 @@ uint _dyld_image_count();
const(char)* _dyld_get_image_name(uint image_index);
mach_header* _dyld_get_image_header(uint image_index);
intptr_t _dyld_get_image_vmaddr_slide(uint image_index);
void _dyld_register_func_for_add_image(void function(const scope mach_header* mh, intptr_t vmaddr_slide));
void _dyld_register_func_for_remove_image(void function(const scope mach_header* mh, intptr_t vmaddr_slide));
int NSVersionOfRunTimeLibrary(const char* libraryPath);
int NSVersionOfLinkTimeLibrary(const char* libraryPath);
int _NSGetExecutablePath(char* buf, uint* bufsize);

View File

@ -0,0 +1,26 @@
/**
* D header file for Darwin stdlib.h.
*
* Copyright: Copyright © 2021, The D Language Foundation
* License: <a href="http://www.boost.org/LICENSE_1_0.txt">Boost License 1.0</a>.
* Authors: Iain Buclaw
*/
module core.sys.darwin.stdlib;
public import core.sys.posix.stdlib;
version (OSX)
version = Darwin;
else version (iOS)
version = Darwin;
else version (TVOS)
version = Darwin;
else version (WatchOS)
version = Darwin;
version (Darwin):
extern (C):
nothrow:
@nogc:
const(char)* getprogname();
void setprogname(scope const char* name);

View File

@ -0,0 +1,253 @@
/**
* D header file for Darwin sys/sysctl.h
*
* Copyright: Copyright © 2021, The D Language Foundation
* License: <a href="http://www.boost.org/LICENSE_1_0.txt">Boost License 1.0</a>.
* Authors: Iain Buclaw
*/
module core.sys.darwin.sys.sysctl;
version (OSX)
version = Darwin;
else version (iOS)
version = Darwin;
else version (TVOS)
version = Darwin;
else version (WatchOS)
version = Darwin;
version (Darwin):
extern (C):
nothrow:
@nogc:
// Top-level identifiers
enum
{
CTL_UNSPEC = 0,
CTL_KERN = 1,
CTL_VM = 2,
CTL_VFS = 3,
CTL_NET = 4,
CTL_DEBUG = 5,
CTL_HW = 6,
CTL_MACHDEP = 7,
CTL_USER = 8,
CTL_MAXID = 9,
}
// CTL_KERN identifiers
enum
{
KERN_OSTYPE = 1,
KERN_OSRELEASE = 2,
KERN_OSREV = 3,
KERN_VERSION = 4,
KERN_MAXVNODES = 5,
KERN_MAXPROC = 6,
KERN_MAXFILES = 7,
KERN_ARGMAX = 8,
KERN_SECURELVL = 9,
KERN_HOSTNAME = 10,
KERN_HOSTID = 11,
KERN_CLOCKRATE = 12,
KERN_VNODE = 13,
KERN_PROC = 14,
KERN_FILE = 15,
KERN_PROF = 16,
KERN_POSIX1 = 17,
KERN_NGROUPS = 18,
KERN_JOB_CONTROL = 19,
KERN_SAVED_IDS = 20,
KERN_BOOTTIME = 21,
KERN_NISDOMAINNAME = 22,
KERN_DOMAINNAME = KERN_NISDOMAINNAME,
KERN_MAXPARTITIONS = 23,
KERN_KDEBUG = 24,
KERN_UPDATEINTERVAL = 25,
KERN_OSRELDATE = 26,
KERN_NTP_PLL = 27,
KERN_BOOTFILE = 28,
KERN_MAXFILESPERPROC = 29,
KERN_MAXPROCPERUID = 30,
KERN_DUMPDEV = 31,
KERN_IPC = 32,
KERN_DUMMY = 33,
KERN_PS_STRINGS = 34,
KERN_USRSTACK32 = 35,
KERN_LOGSIGEXIT = 36,
KERN_SYMFILE = 37,
KERN_PROCARGS = 38,
KERN_NETBOOT = 40,
KERN_SYSV = 42,
KERN_AFFINITY = 43,
KERN_TRANSLATE = 44,
KERN_CLASSIC = KERN_TRANSLATE,
KERN_EXEC = 45,
KERN_CLASSICHANDLER = KERN_EXEC,
KERN_AIOMAX = 46,
KERN_AIOPROCMAX = 47,
KERN_AIOTHREADS = 48,
KERN_PROCARGS2 = 49,
KERN_COREFILE = 50,
KERN_COREDUMP = 51,
KERN_SUGID_COREDUMP = 52,
KERN_PROCDELAYTERM = 53,
KERN_SHREG_PRIVATIZABLE = 54,
KERN_LOW_PRI_WINDOW = 56,
KERN_LOW_PRI_DELAY = 57,
KERN_POSIX = 58,
KERN_USRSTACK64 = 59,
KERN_NX_PROTECTION = 60,
KERN_TFP = 61,
KERN_PROCNAME = 62,
KERN_THALTSTACK = 63,
KERN_SPECULATIVE_READS = 64,
KERN_OSVERSION = 65,
KERN_SAFEBOOT = 66,
KERN_RAGEVNODE = 68,
KERN_TTY = 69,
KERN_CHECKOPENEVT = 70,
KERN_THREADNAME = 71,
KERN_MAXID = 72,
}
// KERN_RAGEVNODE types
enum
{
KERN_RAGE_PROC = 1,
KERN_RAGE_THREAD = 2,
KERN_UNRAGE_PROC = 3,
KERN_UNRAGE_THREAD = 4,
}
// KERN_OPENEVT types
enum
{
KERN_OPENEVT_PROC = 1,
KERN_UNOPENEVT_PROC = 2,
}
// KERN_TFP types
enum
{
KERN_TFP_POLICY = 1,
}
// KERN_TFP_POLICY values
enum
{
KERN_TFP_POLICY_DENY = 0,
KERN_TFP_POLICY_DEFAULT = 2,
}
// KERN_PROC subtypes
enum
{
KERN_PROC_ALL = 0,
KERN_PROC_PID = 1,
KERN_PROC_PGRP = 2,
KERN_PROC_SESSION = 3,
KERN_PROC_TTY = 4,
KERN_PROC_UID = 5,
KERN_PROC_RUID = 6,
KERN_PROC_LCID = 7,
}
// KERN_VFSNSPACE subtypes
enum
{
KERN_VFSNSPACE_HANDLE_PROC = 1,
KERN_VFSNSPACE_UNHANDLE_PROC = 2,
}
// KERN_IPC identifiers
enum
{
KIPC_MAXSOCKBUF = 1,
KIPC_SOCKBUF_WASTE = 2,
KIPC_SOMAXCONN = 3,
KIPC_MAX_LINKHDR = 4,
KIPC_MAX_PROTOHDR = 5,
KIPC_MAX_HDR = 6,
KIPC_MAX_DATALEN = 7,
KIPC_MBSTAT = 8,
KIPC_NMBCLUSTERS = 9,
KIPC_SOQLIMITCOMPAT = 10,
}
// CTL_VM identifiers
enum
{
VM_METER = 1,
VM_LOADAVG = 2,
VM_MACHFACTOR = 4,
VM_SWAPUSAGE = 5,
VM_MAXID = 6,
}
// CTL_HW identifiers
enum
{
HW_MACHINE = 1,
HW_MODEL = 2,
HW_NCPU = 3,
HW_BYTEORDER = 4,
HW_PHYSMEM = 5,
HW_USERMEM = 6,
HW_PAGESIZE = 7,
HW_DISKNAMES = 8,
HW_DISKSTATS = 9,
HW_EPOCH = 10,
HW_FLOATINGPT = 11,
HW_MACHINE_ARCH = 12,
HW_VECTORUNIT = 13,
HW_BUS_FREQ = 14,
HW_CPU_FREQ = 15,
HW_CACHELINE = 16,
HW_L1ICACHESIZE = 17,
HW_L1DCACHESIZE = 18,
HW_L2SETTINGS = 19,
HW_L2CACHESIZE = 20,
HW_L3SETTINGS = 21,
HW_L3CACHESIZE = 22,
HW_TB_FREQ = 23,
HW_MEMSIZE = 24,
HW_AVAILCPU = 25,
HW_MAXID = 26,
}
// CTL_USER identifiers
enum
{
USER_CS_PATH = 1,
USER_BC_BASE_MAX = 2,
USER_BC_DIM_MAX = 3,
USER_BC_SCALE_MAX = 4,
USER_BC_STRING_MAX = 5,
USER_COLL_WEIGHTS_MAX = 6,
USER_EXPR_NEST_MAX = 7,
USER_LINE_MAX = 8,
USER_RE_DUP_MAX = 9,
USER_POSIX2_VERSION = 10,
USER_POSIX2_C_BIND = 11,
USER_POSIX2_C_DEV = 12,
USER_POSIX2_CHAR_TERM = 13,
USER_POSIX2_FORT_DEV = 14,
USER_POSIX2_FORT_RUN = 15,
USER_POSIX2_LOCALEDEF = 16,
USER_POSIX2_SW_DEV = 17,
USER_POSIX2_UPE = 18,
USER_STREAM_MAX = 19,
USER_TZNAME_MAX = 20,
USER_MAXID = 21,
}
///
int sysctl(const int* name, uint namelen, void* oldp, size_t* oldlenp,
const void* newp, size_t newlen);
///
int sysctlbyname(const char* name, void* oldp, size_t* oldlenp,
const void* newp, size_t newlen);
///
int sysctlnametomib(const char* sname, int* name, size_t* namelenp);

View File

@ -0,0 +1,17 @@
/**
* D header file for DragonFlyBSD stdlib.h.
*
* Copyright: Copyright © 2021, The D Language Foundation
* License: <a href="http://www.boost.org/LICENSE_1_0.txt">Boost License 1.0</a>.
* Authors: Iain Buclaw
*/
module core.sys.dragonflybsd.stdlib;
public import core.sys.posix.stdlib;
version (DragonFlyBSD):
extern (C):
nothrow:
@nogc:
const(char)* getprogname();
void setprogname(scope const char* name);

View File

@ -0,0 +1,199 @@
/**
* D header file for DragonFlyBSD sys/sysctl.h
*
* Copyright: Copyright © 2021, The D Language Foundation
* License: <a href="http://www.boost.org/LICENSE_1_0.txt">Boost License 1.0</a>.
* Authors: Iain Buclaw
*/
module core.sys.dragonflybsd.sys.sysctl;
version (DragonFlyBSD):
extern (C):
nothrow:
@nogc:
// Top-level identifiers
enum
{
CTL_SYSCTL = 0,
CTL_KERN = 1,
CTL_VM = 2,
CTL_VFS = 3,
CTL_NET = 4,
CTL_DEBUG = 5,
CTL_HW = 6,
CTL_MACHDEP = 7,
CTL_USER = 8,
CTL_P1003_1B = 9,
CTL_LWKT = 10,
CTL_MAXID = 11,
}
// CTL_SYSCTL identifiers
enum
{
CTL_SYSCTL_DEBUG = 0,
CTL_SYSCTL_NAME = 1,
CTL_SYSCTL_NEXT = 2,
CTL_SYSCTL_NAME2OID = 3,
CTL_SYSCTL_OIDFMT = 4,
CTL_SYSCTL_OIDDESCR = 5,
}
// CTL_KERN identifiers
enum
{
KERN_OSTYPE = 1,
KERN_OSRELEASE = 2,
KERN_OSREV = 3,
KERN_VERSION = 4,
KERN_MAXVNODES = 5,
KERN_MAXPROC = 6,
KERN_MAXFILES = 7,
KERN_ARGMAX = 8,
KERN_SECURELVL = 9,
KERN_HOSTNAME = 10,
KERN_HOSTID = 11,
KERN_CLOCKRATE = 12,
KERN_VNODE = 13,
KERN_PROC = 14,
KERN_FILE = 15,
KERN_POSIX1 = 17,
KERN_NGROUPS = 18,
KERN_JOB_CONTROL = 19,
KERN_SAVED_IDS = 20,
KERN_BOOTTIME = 21,
KERN_NISDOMAINNAME = 22,
KERN_UPDATEINTERVAL = 23,
KERN_OSRELDATE = 24,
KERN_NTP_PLL = 25,
KERN_BOOTFILE = 26,
KERN_MAXFILESPERPROC = 27,
KERN_MAXPROCPERUID = 28,
KERN_DUMPDEV = 29,
KERN_IPC = 30,
KERN_DUMMY = 31,
KERN_PS_STRINGS = 32,
KERN_USRSTACK = 33,
KERN_LOGSIGEXIT = 34,
KERN_IOV_MAX = 35,
KERN_MAXPOSIXLOCKSPERUID = 36,
KERN_MAXID = 37,
}
// KERN_PROC subtypes
enum
{
KERN_PROC_ALL = 0,
KERN_PROC_PID = 1,
KERN_PROC_PGRP = 2,
KERN_PROC_SESSION = 3,
KERN_PROC_TTY = 4,
KERN_PROC_UID = 5,
KERN_PROC_RUID = 6,
KERN_PROC_ARGS = 7,
KERN_PROC_CWD = 8,
KERN_PROC_PATHNAME = 9,
KERN_PROC_SIGTRAMP = 10,
KERN_PROC_FLAGMASK = 0x10,
KERN_PROC_FLAG_LWP = 0x10,
}
// KERN_IPC identifiers
enum
{
KIPC_MAXSOCKBUF = 1,
KIPC_SOCKBUF_WASTE = 2,
KIPC_SOMAXCONN = 3,
KIPC_MAX_LINKHDR = 4,
KIPC_MAX_PROTOHDR = 5,
KIPC_MAX_HDR = 6,
KIPC_MAX_DATALEN = 7,
KIPC_MBSTAT = 8,
KIPC_NMBCLUSTERS = 9,
}
// CTL_HW identifiers
enum
{
HW_MACHINE = 1,
HW_MODEL = 2,
HW_NCPU = 3,
HW_BYTEORDER = 4,
HW_PHYSMEM = 5,
HW_USERMEM = 6,
HW_PAGESIZE = 7,
HW_DISKNAMES = 8,
HW_DISKSTATS = 9,
HW_FLOATINGPT = 10,
HW_MACHINE_ARCH = 11,
HW_MACHINE_PLATFORM = 12,
HW_SENSORS = 13,
HW_MAXID = 14,
}
// CTL_USER definitions
enum
{
USER_CS_PATH = 1,
USER_BC_BASE_MAX = 2,
USER_BC_DIM_MAX = 3,
USER_BC_SCALE_MAX = 4,
USER_BC_STRING_MAX = 5,
USER_COLL_WEIGHTS_MAX = 6,
USER_EXPR_NEST_MAX = 7,
USER_LINE_MAX = 8,
USER_RE_DUP_MAX = 9,
USER_POSIX2_VERSION = 10,
USER_POSIX2_C_BIND = 11,
USER_POSIX2_C_DEV = 12,
USER_POSIX2_CHAR_TERM = 13,
USER_POSIX2_FORT_DEV = 14,
USER_POSIX2_FORT_RUN = 15,
USER_POSIX2_LOCALEDEF = 16,
USER_POSIX2_SW_DEV = 17,
USER_POSIX2_UPE = 18,
USER_STREAM_MAX = 19,
USER_TZNAME_MAX = 20,
USER_MAXID = 21,
}
// POSIX 1003.1B definitions
enum
{
CTL_P1003_1B_ASYNCHRONOUS_IO = 1,
CTL_P1003_1B_MAPPED_FILES = 2,
CTL_P1003_1B_MEMLOCK = 3,
CTL_P1003_1B_MEMLOCK_RANGE = 4,
CTL_P1003_1B_MEMORY_PROTECTION = 5,
CTL_P1003_1B_MESSAGE_PASSING = 6,
CTL_P1003_1B_PRIORITIZED_IO = 7,
CTL_P1003_1B_PRIORITY_SCHEDULING = 8,
CTL_P1003_1B_REALTIME_SIGNALS = 9,
CTL_P1003_1B_SEMAPHORES = 10,
CTL_P1003_1B_FSYNC = 11,
CTL_P1003_1B_SHARED_MEMORY_OBJECTS = 12,
CTL_P1003_1B_SYNCHRONIZED_IO = 13,
CTL_P1003_1B_TIMERS = 14,
CTL_P1003_1B_AIO_LISTIO_MAX = 15,
CTL_P1003_1B_AIO_MAX = 16,
CTL_P1003_1B_AIO_PRIO_DELTA_MAX = 17,
CTL_P1003_1B_DELAYTIMER_MAX = 18,
CTL_P1003_1B_UNUSED19 = 19,
CTL_P1003_1B_PAGESIZE = 20,
CTL_P1003_1B_RTSIG_MAX = 21,
CTL_P1003_1B_SEM_NSEMS_MAX = 22,
CTL_P1003_1B_UNUSED23 = 23,
CTL_P1003_1B_SIGQUEUE_MAX = 24,
CTL_P1003_1B_TIMER_MAX = 25,
CTL_P1003_1B_MAXID = 26,
}
///
int sysctl(const int* name, uint namelen, void* oldp, size_t* oldlenp,
const void* newp, size_t newlen);
///
int sysctlbyname(const char* name, void* oldp, size_t* oldlenp,
const void* newp, size_t newlen);
///
int sysctlnametomib(const char* name, int* mibp, size_t* sizep);

View File

@ -0,0 +1,17 @@
/**
* D header file for FreeBSD stdlib.h.
*
* Copyright: Copyright © 2021, The D Language Foundation
* License: <a href="http://www.boost.org/LICENSE_1_0.txt">Boost License 1.0</a>.
* Authors: Iain Buclaw
*/
module core.sys.freebsd.stdlib;
public import core.sys.posix.stdlib;
version (FreeBSD):
extern (C):
nothrow:
@nogc:
const(char)* getprogname();
void setprogname(scope const char* name);

View File

@ -0,0 +1,211 @@
/**
* D header file for FreeBSD sys/sysctl.h
*
* Copyright: Copyright © 2021, The D Language Foundation
* License: <a href="http://www.boost.org/LICENSE_1_0.txt">Boost License 1.0</a>.
* Authors: Iain Buclaw
*/
module core.sys.freebsd.sys.sysctl;
version (FreeBSD):
extern (C):
nothrow:
@nogc:
// Top-level identifiers
enum
{
CTL_SYSCTL = 0,
CTL_KERN = 1,
CTL_VM = 2,
CTL_VFS = 3,
CTL_NET = 4,
CTL_DEBUG = 5,
CTL_HW = 6,
CTL_MACHDEP = 7,
CTL_USER = 8,
CTL_P1003_1B = 9,
}
// CTL_SYSCTL identifiers
enum
{
CTL_SYSCTL_DEBUG = 0,
CTL_SYSCTL_NAME = 1,
CTL_SYSCTL_NEXT = 2,
CTL_SYSCTL_NAME2OID = 3,
CTL_SYSCTL_OIDFMT = 4,
CTL_SYSCTL_OIDDESCR = 5,
CTL_SYSCTL_OIDLABEL = 6,
}
// CTL_KERN identifiers
enum
{
KERN_OSTYPE = 1,
KERN_OSRELEASE = 2,
KERN_OSREV = 3,
KERN_VERSION = 4,
KERN_MAXVNODES = 5,
KERN_MAXPROC = 6,
KERN_MAXFILES = 7,
KERN_ARGMAX = 8,
KERN_SECURELVL = 9,
KERN_HOSTNAME = 10,
KERN_HOSTID = 11,
KERN_CLOCKRATE = 12,
KERN_VNODE = 13,
KERN_PROC = 14,
KERN_FILE = 15,
KERN_PROF = 16,
KERN_POSIX1 = 17,
KERN_NGROUPS = 18,
KERN_JOB_CONTROL = 19,
KERN_SAVED_IDS = 20,
KERN_BOOTTIME = 21,
KERN_NISDOMAINNAME = 22,
KERN_UPDATEINTERVAL = 23,
KERN_OSRELDATE = 24,
KERN_NTP_PLL = 25,
KERN_BOOTFILE = 26,
KERN_MAXFILESPERPROC = 27,
KERN_MAXPROCPERUID = 28,
KERN_DUMPDEV = 29,
KERN_IPC = 30,
KERN_DUMMY = 31,
KERN_PS_STRINGS = 32,
KERN_USRSTACK = 33,
KERN_LOGSIGEXIT = 34,
KERN_IOV_MAX = 35,
KERN_HOSTUUID = 36,
KERN_ARND = 37,
KERN_MAXPHYS = 38,
}
// KERN_PROC subtypes
enum
{
KERN_PROC_ALL = 0,
KERN_PROC_PID = 1,
KERN_PROC_PGRP = 2,
KERN_PROC_SESSION = 3,
KERN_PROC_TTY = 4,
KERN_PROC_UID = 5,
KERN_PROC_RUID = 6,
KERN_PROC_ARGS = 7,
KERN_PROC_PROC = 8,
KERN_PROC_SV_NAME = 9,
KERN_PROC_RGID = 10,
KERN_PROC_GID = 11,
KERN_PROC_PATHNAME = 12,
KERN_PROC_OVMMAP = 13,
KERN_PROC_OFILEDESC = 14,
KERN_PROC_KSTACK = 15,
KERN_PROC_INC_THREAD = 0x10,
KERN_PROC_VMMAP = 32,
KERN_PROC_FILEDESC = 33,
KERN_PROC_GROUPS = 34,
KERN_PROC_ENV = 35,
KERN_PROC_AUXV = 36,
KERN_PROC_RLIMIT = 37,
KERN_PROC_PS_STRINGS = 38,
KERN_PROC_UMASK = 39,
KERN_PROC_OSREL = 40,
KERN_PROC_SIGTRAMP = 41,
KERN_PROC_CWD = 42,
KERN_PROC_NFDS = 43,
}
// KERN_IPC identifiers
enum
{
KIPC_MAXSOCKBUF = 1,
KIPC_SOCKBUF_WASTE = 2,
KIPC_SOMAXCONN = 3,
KIPC_MAX_LINKHDR = 4,
KIPC_MAX_PROTOHDR = 5,
KIPC_MAX_HDR = 6,
KIPC_MAX_DATALEN = 7,
}
// CTL_HW identifiers
enum
{
HW_MACHINE = 1,
HW_MODEL = 2,
HW_NCPU = 3,
HW_BYTEORDER = 4,
HW_PHYSMEM = 5,
HW_USERMEM = 6,
HW_PAGESIZE = 7,
HW_DISKNAMES = 8,
HW_DISKSTATS = 9,
HW_FLOATINGPT = 10,
HW_MACHINE_ARCH = 11,
HW_REALMEM = 12,
}
// CTL_USER identifiers
enum
{
USER_CS_PATH = 1,
USER_BC_BASE_MAX = 2,
USER_BC_DIM_MAX = 3,
USER_BC_SCALE_MAX = 4,
USER_BC_STRING_MAX = 5,
USER_COLL_WEIGHTS_MAX = 6,
USER_EXPR_NEST_MAX = 7,
USER_LINE_MAX = 8,
USER_RE_DUP_MAX = 9,
USER_POSIX2_VERSION = 10,
USER_POSIX2_C_BIND = 11,
USER_POSIX2_C_DEV = 12,
USER_POSIX2_CHAR_TERM = 13,
USER_POSIX2_FORT_DEV = 14,
USER_POSIX2_FORT_RUN = 15,
USER_POSIX2_LOCALEDEF = 16,
USER_POSIX2_SW_DEV = 17,
USER_POSIX2_UPE = 18,
USER_STREAM_MAX = 19,
USER_TZNAME_MAX = 20,
}
// POSIX 1003.1B definitions
enum
{
CTL_P1003_1B_ASYNCHRONOUS_IO = 1,
CTL_P1003_1B_MAPPED_FILES = 2,
CTL_P1003_1B_MEMLOCK = 3,
CTL_P1003_1B_MEMLOCK_RANGE = 4,
CTL_P1003_1B_MEMORY_PROTECTION = 5,
CTL_P1003_1B_MESSAGE_PASSING = 6,
CTL_P1003_1B_PRIORITIZED_IO = 7,
CTL_P1003_1B_PRIORITY_SCHEDULING = 8,
CTL_P1003_1B_REALTIME_SIGNALS = 9,
CTL_P1003_1B_SEMAPHORES = 10,
CTL_P1003_1B_FSYNC = 11,
CTL_P1003_1B_SHARED_MEMORY_OBJECTS = 12,
CTL_P1003_1B_SYNCHRONIZED_IO = 13,
CTL_P1003_1B_TIMERS = 14,
CTL_P1003_1B_AIO_LISTIO_MAX = 15,
CTL_P1003_1B_AIO_MAX = 16,
CTL_P1003_1B_AIO_PRIO_DELTA_MAX = 17,
CTL_P1003_1B_DELAYTIMER_MAX = 18,
CTL_P1003_1B_UNUSED19 = 19,
CTL_P1003_1B_PAGESIZE = 20,
CTL_P1003_1B_RTSIG_MAX = 21,
CTL_P1003_1B_SEM_NSEMS_MAX = 22,
CTL_P1003_1B_UNUSED23 = 23,
CTL_P1003_1B_SIGQUEUE_MAX = 24,
CTL_P1003_1B_TIMER_MAX = 25,
CTL_P1003_1B_MAXID = 26,
}
///
int sysctl(const int* name, uint namelen, void* oldp, size_t* oldlenp,
const void* newp, size_t newlen);
///
int sysctlbyname(const char* name, void* oldp, size_t* oldlenp,
const void* newp, size_t newlen);
///
int sysctlnametomib(const char* name, int* mibp, size_t* sizep);

View File

@ -0,0 +1,17 @@
/**
* D header file for NetBSD stdlib.h.
*
* Copyright: Copyright © 2021, The D Language Foundation
* License: <a href="http://www.boost.org/LICENSE_1_0.txt">Boost License 1.0</a>.
* Authors: Iain Buclaw
*/
module core.sys.netbsd.stdlib;
public import core.sys.posix.stdlib;
version (NetBSD):
extern (C):
nothrow:
@nogc:
const(char)* getprogname();
void setprogname(scope const char* name);

View File

@ -0,0 +1,254 @@
/**
* D header file for NetBSD sys/sysctl.h
*
* Copyright: Copyright © 2021, The D Language Foundation
* License: <a href="http://www.boost.org/LICENSE_1_0.txt">Boost License 1.0</a>.
* Authors: Iain Buclaw
*/
module core.sys.netbsd.sys.sysctl;
version (NetBSD):
extern (C):
nothrow:
@nogc:
// Top-level identifiers
enum
{
CTL_UNSPEC = 0,
CTL_KERN = 1,
CTL_VM = 2,
CTL_VFS = 3,
CTL_NET = 4,
CTL_DEBUG = 5,
CTL_HW = 6,
CTL_MACHDEP = 7,
CTL_DDB = 9,
CTL_PROC = 10,
CTL_VENDOR = 11,
CTL_EMUL = 12,
CTL_SECURITY = 13,
}
// CTL_KERN identifiers
enum
{
KERN_OSTYPE = 1,
KERN_OSRELEASE = 2,
KERN_OSREV = 3,
KERN_VERSION = 4,
KERN_MAXVNODES = 5,
KERN_MAXPROC = 6,
KERN_MAXFILES = 7,
KERN_ARGMAX = 8,
KERN_SECURELVL = 9,
KERN_HOSTNAME = 10,
KERN_HOSTID = 11,
KERN_CLOCKRATE = 12,
KERN_VNODE = 13,
KERN_PROC = 14,
KERN_FILE = 15,
KERN_PROF = 16,
KERN_POSIX1 = 17,
KERN_NGROUPS = 18,
KERN_JOB_CONTROL = 19,
KERN_SAVED_IDS = 20,
KERN_OBOOTTIME = 21,
KERN_DOMAINNAME = 22,
KERN_MAXPARTITIONS = 23,
KERN_RAWPARTITION = 24,
KERN_NTPTIME = 25,
KERN_TIMEX = 26,
KERN_AUTONICETIME = 27,
KERN_AUTONICEVAL = 28,
KERN_RTC_OFFSET = 29,
KERN_ROOT_DEVICE = 30,
KERN_MSGBUFSIZE = 31,
KERN_FSYNC = 32,
KERN_OLDSYSVMSG = 33,
KERN_OLDSYSVSEM = 34,
KERN_OLDSYSVSHM = 35,
KERN_OLDSHORTCORENAME = 36,
KERN_SYNCHRONIZED_IO = 37,
KERN_IOV_MAX = 38,
KERN_MBUF = 39,
KERN_MAPPED_FILES = 40,
KERN_MEMLOCK = 41,
KERN_MEMLOCK_RANGE = 42,
KERN_MEMORY_PROTECTION = 43,
KERN_LOGIN_NAME_MAX = 44,
KERN_DEFCORENAME = 45,
KERN_LOGSIGEXIT = 46,
KERN_PROC2 = 47,
KERN_PROC_ARGS = 48,
KERN_FSCALE = 49,
KERN_CCPU = 50,
KERN_CP_TIME = 51,
KERN_OLDSYSVIPC_INFO = 52,
KERN_MSGBUF = 53,
KERN_CONSDEV = 54,
KERN_MAXPTYS = 55,
KERN_PIPE = 56,
KERN_MAXPHYS = 57,
KERN_SBMAX = 58,
KERN_TKSTAT = 59,
KERN_MONOTONIC_CLOCK = 60,
KERN_URND = 61,
KERN_LABELSECTOR = 62,
KERN_LABELOFFSET = 63,
KERN_LWP = 64,
KERN_FORKFSLEEP = 65,
KERN_POSIX_THREADS = 66,
KERN_POSIX_SEMAPHORES = 67,
KERN_POSIX_BARRIERS = 68,
KERN_POSIX_TIMERS = 69,
KERN_POSIX_SPIN_LOCKS = 70,
KERN_POSIX_READER_WRITER_LOCKS = 71,
KERN_DUMP_ON_PANIC = 72,
KERN_SOMAXKVA = 73,
KERN_ROOT_PARTITION = 74,
KERN_DRIVERS = 75,
KERN_BUF = 76,
KERN_FILE2 = 77,
KERN_VERIEXEC = 78,
KERN_CP_ID = 79,
KERN_HARDCLOCK_TICKS = 80,
KERN_ARND = 81,
KERN_SYSVIPC = 82,
KERN_BOOTTIME = 83,
KERN_EVCNT = 84,
KERN_SOFIXEDBUF = 85,
}
// KERN_PROC subtypes
enum
{
KERN_PROC_ALL = 0,
KERN_PROC_PID = 1,
KERN_PROC_PGRP = 2,
KERN_PROC_SESSION = 3,
KERN_PROC_TTY = 4,
KERN_PROC_UID = 5,
KERN_PROC_RUID = 6,
KERN_PROC_KTHREAD = 7,
KERN_PROC_RGID = 8,
}
// KERN_PROC_ARGS subtypes
enum
{
KERN_PROC_ARGV = 1,
KERN_PROC_NARGV = 2,
KERN_PROC_ENV = 3,
KERN_PROC_NENV = 4,
KERN_PROC_PATHNAME = 5,
KERN_PROC_CWD = 6,
}
// KERN_SYSVIPC subtypes
enum
{
KERN_SYSVIPC_INFO = 1,
KERN_SYSVIPC_MSG = 2,
KERN_SYSVIPC_SEM = 3,
KERN_SYSVIPC_SHM = 4,
KERN_SYSVIPC_SHMMAX = 5,
KERN_SYSVIPC_SHMMNI = 6,
KERN_SYSVIPC_SHMSEG = 7,
KERN_SYSVIPC_SHMMAXPGS = 8,
KERN_SYSVIPC_SHMUSEPHYS = 9,
}
// KERN_SYSVIPC_INFO subtypes
enum
{
KERN_SYSVIPC_MSG_INFO = 4,
KERN_SYSVIPC_SEM_INFO = 5,
KERN_SYSVIPC_SHM_INFO = 6,
}
// KERN_TKSTAT subtypes
enum
{
KERN_TKSTAT_NIN = 1,
KERN_TKSTAT_NOUT = 2,
KERN_TKSTAT_CANCC = 3,
KERN_TKSTAT_RAWCC = 4,
}
// KERN_BUF subtypes
enum
{
KERN_BUF_ALL = 0,
}
// KERN_FILE
enum
{
KERN_FILE_BYFILE = 1,
KERN_FILE_BYPID = 2,
KERN_FILESLOP = 10,
}
// KERN_EVCNT
enum
{
KERN_EVCNT_COUNT_ANY = 0,
KERN_EVCNT_COUNT_NONZERO = 1,
}
// CTL_HW identifiers
enum
{
HW_MACHINE = 1,
HW_MODEL = 2,
HW_NCPU = 3,
HW_BYTEORDER = 4,
HW_PHYSMEM = 5,
HW_USERMEM = 6,
HW_PAGESIZE = 7,
HW_DISKNAMES = 8,
HW_IOSTATS = 9,
HW_MACHINE_ARCH = 10,
HW_ALIGNBYTES = 11,
HW_CNMAGIC = 12,
HW_PHYSMEM64 = 13,
HW_USERMEM64 = 14,
HW_IOSTATNAMES = 15,
HW_NCPUONLINE = 16,
}
// CTL_USER definitions
enum
{
USER_CS_PATH = 1,
USER_BC_BASE_MAX = 2,
USER_BC_DIM_MAX = 3,
USER_BC_SCALE_MAX = 4,
USER_BC_STRING_MAX = 5,
USER_COLL_WEIGHTS_MAX = 6,
USER_EXPR_NEST_MAX = 7,
USER_LINE_MAX = 8,
USER_RE_DUP_MAX = 9,
USER_POSIX2_VERSION = 10,
USER_POSIX2_C_BIND = 11,
USER_POSIX2_C_DEV = 12,
USER_POSIX2_CHAR_TERM = 13,
USER_POSIX2_FORT_DEV = 14,
USER_POSIX2_FORT_RUN = 15,
USER_POSIX2_LOCALEDEF = 16,
USER_POSIX2_SW_DEV = 17,
USER_POSIX2_UPE = 18,
USER_STREAM_MAX = 19,
USER_TZNAME_MAX = 20,
USER_ATEXIT_MAX = 21,
}
///
int sysctl(const int* name, uint namelen, void* oldp, size_t* oldlenp,
const void* newp, size_t newlen);
///
int sysctlbyname(const char* name, void* oldp, size_t* oldlenp,
const void* newp, size_t newlen);
///
int sysctlnametomib(const char* sname, int* name, size_t* namelenp);

View File

@ -0,0 +1,17 @@
/**
* D header file for OpenBSD stdlib.h.
*
* Copyright: Copyright © 2021, The D Language Foundation
* License: <a href="http://www.boost.org/LICENSE_1_0.txt">Boost License 1.0</a>.
* Authors: Iain Buclaw
*/
module core.sys.openbsd.stdlib;
public import core.sys.posix.stdlib;
version (OpenBSD):
extern (C):
nothrow:
@nogc:
const(char)* getprogname();
void setprogname(scope const char* name);

View File

@ -0,0 +1,254 @@
/**
* D header file for OpenBSD sys/sysctl.h
*
* Copyright: Copyright © 2021, The D Language Foundation
* License: <a href="http://www.boost.org/LICENSE_1_0.txt">Boost License 1.0</a>.
* Authors: Iain Buclaw
*/
module core.sys.openbsd.sys.sysctl;
version (OpenBSD):
extern (C):
nothrow:
@nogc:
// Top-level identifiers
enum
{
CTL_UNSPEC = 0,
CTL_KERN = 1,
CTL_VM = 2,
CTL_FS = 3,
CTL_NET = 4,
CTL_DEBUG = 5,
CTL_HW = 6,
CTL_MACHDEP = 7,
CTL_DDB = 9,
CTL_VFS = 10,
CTL_MAXID = 11,
}
// CTL_KERN identifiers
enum
{
KERN_OSTYPE = 1,
KERN_OSRELEASE = 2,
KERN_OSREV = 3,
KERN_VERSION = 4,
KERN_MAXVNODES = 5,
KERN_MAXPROC = 6,
KERN_MAXFILES = 7,
KERN_ARGMAX = 8,
KERN_SECURELVL = 9,
KERN_HOSTNAME = 10,
KERN_HOSTID = 11,
KERN_CLOCKRATE = 12,
KERN_PROF = 16,
KERN_POSIX1 = 17,
KERN_NGROUPS = 18,
KERN_JOB_CONTROL = 19,
KERN_SAVED_IDS = 20,
KERN_BOOTTIME = 21,
KERN_DOMAINNAME = 22,
KERN_MAXPARTITIONS = 23,
KERN_RAWPARTITION = 24,
KERN_MAXTHREAD = 25,
KERN_NTHREADS = 26,
KERN_OSVERSION = 27,
KERN_SOMAXCONN = 28,
KERN_SOMINCONN = 29,
KERN_NOSUIDCOREDUMP = 32,
KERN_FSYNC = 33,
KERN_SYSVMSG = 34,
KERN_SYSVSEM = 35,
KERN_SYSVSHM = 36,
KERN_MSGBUFSIZE = 38,
KERN_MALLOCSTATS = 39,
KERN_CPTIME = 40,
KERN_NCHSTATS = 41,
KERN_FORKSTAT = 42,
KERN_NSELCOLL = 43,
KERN_TTY = 44,
KERN_CCPU = 45,
KERN_FSCALE = 46,
KERN_NPROCS = 47,
KERN_MSGBUF = 48,
KERN_POOL = 49,
KERN_STACKGAPRANDOM = 50,
KERN_SYSVIPC_INFO = 51,
KERN_ALLOWKMEM = 52,
KERN_WITNESSWATCH = 53,
KERN_SPLASSERT = 54,
KERN_PROC_ARGS = 55,
KERN_NFILES = 56,
KERN_TTYCOUNT = 57,
KERN_NUMVNODES = 58,
KERN_MBSTAT = 59,
KERN_WITNESS = 60,
KERN_SEMINFO = 61,
KERN_SHMINFO = 62,
KERN_INTRCNT = 63,
KERN_WATCHDOG = 64,
KERN_ALLOWDT = 65,
KERN_PROC = 66,
KERN_MAXCLUSTERS = 67,
KERN_EVCOUNT = 68,
KERN_TIMECOUNTER = 69,
KERN_MAXLOCKSPERUID = 70,
KERN_CPTIME2 = 71,
KERN_CACHEPCT = 72,
KERN_FILE = 73,
KERN_WXABORT = 74,
KERN_CONSDEV = 75,
KERN_NETLIVELOCKS = 76,
KERN_POOL_DEBUG = 77,
KERN_PROC_CWD = 78,
KERN_PROC_NOBROADCASTKILL = 79,
KERN_PROC_VMMAP = 80,
KERN_GLOBAL_PTRACE = 81,
KERN_CONSBUFSIZE = 82,
KERN_CONSBUF = 83,
KERN_AUDIO = 84,
KERN_CPUSTATS = 85,
KERN_PFSTATUS = 86,
KERN_TIMEOUT_STATS = 87,
KERN_UTC_OFFSET = 88,
KERN_MAXID = 89,
}
// KERN_PROC subtypes
enum
{
KERN_PROC_ALL = 0,
KERN_PROC_PID = 1,
KERN_PROC_PGRP = 2,
KERN_PROC_SESSION = 3,
KERN_PROC_TTY = 4,
KERN_PROC_UID = 5,
KERN_PROC_RUID = 6,
KERN_PROC_KTHREAD = 7,
KERN_PROC_SHOW_THREADS = 0x40000000,
}
// KERN_SYSVIPC_INFO subtypes
enum
{
KERN_SYSVIPC_MSG_INFO = 1,
KERN_SYSVIPC_SEM_INFO = 2,
KERN_SYSVIPC_SHM_INFO = 3,
}
// KERN_PROC_ARGS subtypes
enum
{
KERN_PROC_ARGV = 1,
KERN_PROC_NARGV = 2,
KERN_PROC_ENV = 3,
KERN_PROC_NENV = 4,
}
// KERN_AUDIO subtypes
enum
{
KERN_AUDIO_RECORD = 1,
KERN_AUDIO_MAXID = 2,
}
// KERN_WITNESS
enum
{
KERN_WITNESS_WATCH = 1,
KERN_WITNESS_LOCKTRACE = 2,
KERN_WITNESS_MAXID = 3,
}
// KERN_FILE
enum
{
KERN_FILE_BYFILE = 1,
KERN_FILE_BYPID = 2,
KERN_FILE_BYUID = 3,
KERN_FILESLOP = 10,
KERN_FILE_TEXT = -1,
KERN_FILE_CDIR = -2,
KERN_FILE_RDIR = -3,
KERN_FILE_TRACE = -4,
}
// KERN_INTRCNT
enum
{
KERN_INTRCNT_NUM = 1,
KERN_INTRCNT_CNT = 2,
KERN_INTRCNT_NAME = 3,
KERN_INTRCNT_VECTOR = 4,
KERN_INTRCNT_MAXID = 5,
}
// KERN_WATCHDOG
enum
{
KERN_WATCHDOG_PERIOD = 1,
KERN_WATCHDOG_AUTO = 2,
KERN_WATCHDOG_MAXID = 3,
}
// KERN_TIMECOUNTER
enum
{
KERN_TIMECOUNTER_TICK = 1,
KERN_TIMECOUNTER_TIMESTEPWARNINGS = 2,
KERN_TIMECOUNTER_HARDWARE = 3,
KERN_TIMECOUNTER_CHOICE = 4,
KERN_TIMECOUNTER_MAXID = 5,
}
// CTL_FS identifiers
enum
{
FS_POSIX = 1,
FS_MAXID = 2,
}
// CTL_FS_POSIX identifiers
enum
{
FS_POSIX_SETUID = 1,
FS_POSIX_MAXID = 2,
}
// CTL_HW identifiers
enum
{
HW_MACHINE = 1,
HW_MODEL = 2,
HW_NCPU = 3,
HW_BYTEORDER = 4,
HW_PHYSMEM = 5,
HW_USERMEM = 6,
HW_PAGESIZE = 7,
HW_DISKNAMES = 8,
HW_DISKSTATS = 9,
HW_DISKCOUNT = 10,
HW_SENSORS = 11,
HW_CPUSPEED = 12,
HW_SETPERF = 13,
HW_VENDOR = 14,
HW_PRODUCT = 15,
HW_VERSION = 16,
HW_SERIALNO = 17,
HW_UUID = 18,
HW_PHYSMEM64 = 19,
HW_USERMEM64 = 20,
HW_NCPUFOUND = 21,
HW_ALLOWPOWERDOWN = 22,
HW_PERFPOLICY = 23,
HW_SMT = 24,
HW_NCPUONLINE = 25,
HW_MAXID = 26,
}
///
int sysctl(const int* name, uint namelen, void* oldp, size_t* oldlenp,
const void* newp, size_t newlen);

View File

@ -34,50 +34,44 @@ version (NetBSD)
version (DragonflyBSD)
version = DarwinBSDLocale;
///
struct lconv
{
char* currency_symbol;
char* decimal_point;
char frac_digits;
char* grouping;
char* int_curr_symbol;
char int_frac_digits;
char int_n_cs_precedes;
char int_n_sep_by_space;
char int_n_sign_posn;
char int_p_cs_precedes;
char int_p_sep_by_space;
char int_p_sign_posn;
char* mon_decimal_point;
char* mon_grouping;
char* mon_thousands_sep;
char* negative_sign;
char n_cs_precedes;
char n_sep_by_space;
char n_sign_posn;
char* positive_sign;
char p_cs_precedes;
char p_sep_by_space;
char p_sign_posn;
char* thousands_sep;
}
/// Duplicate existing locale
locale_t duplocale(locale_t locale);
/// Free an allocated locale
void freelocale(locale_t locale);
/// Natural language formatting for C
lconv* localeconv();
/// Create a new locale
locale_t newlocale(int mask, const char* locale, locale_t base);
/// Set the C library's notion of natural language formatting style
char* setlocale(int category, const char* locale);
/// Set the per-thread locale
locale_t uselocale (locale_t locale);
version (CRuntime_Glibc)
version = GNULinuxLocale;
version (CRuntime_Bionic)
version = GNULinuxLocale;
version (CRuntime_UClibc)
version = GNULinuxLocale;
version (DarwinBSDLocale)
{
///
struct lconv
{
char* decimal_point;
char* thousands_sep;
char* grouping;
char* int_curr_symbol;
char* currency_symbol;
char* mon_decimal_point;
char* mon_thousands_sep;
char* mon_grouping;
char* positive_sign;
char* negative_sign;
char int_frac_digits;
char frac_digits;
char p_cs_precedes;
char p_sep_by_space;
char n_cs_precedes;
char n_sep_by_space;
char p_sign_posn;
char n_sign_posn;
char int_p_cs_precedes;
char int_n_cs_precedes;
char int_p_sep_by_space;
char int_n_sep_by_space;
char int_p_sign_posn;
char int_n_sign_posn;
}
///
enum
{
@ -116,10 +110,51 @@ version (DarwinBSDLocale)
///
enum LC_GLOBAL_LOCALE = (cast(locale_t)-1);
}
version (linux)
/// Duplicate existing locale
locale_t duplocale(locale_t locale);
/// Free an allocated locale
void freelocale(locale_t locale);
/// Natural language formatting for C
lconv* localeconv();
/// Create a new locale
locale_t newlocale(int mask, const char* locale, locale_t base);
/// Set the C library's notion of natural language formatting style
char* setlocale(int category, const char* locale);
/// Set the per-thread locale
locale_t uselocale (locale_t locale);
}
else version (GNULinuxLocale)
{
///
struct lconv
{
char* decimal_point;
char* thousands_sep;
char* grouping;
char* int_curr_symbol;
char* currency_symbol;
char* mon_decimal_point;
char* mon_thousands_sep;
char* mon_grouping;
char* positive_sign;
char* negative_sign;
char int_frac_digits;
char frac_digits;
char p_cs_precedes;
char p_sep_by_space;
char n_cs_precedes;
char n_sep_by_space;
char p_sign_posn;
char n_sign_posn;
char int_p_cs_precedes;
char int_p_sep_by_space;
char int_n_cs_precedes;
char int_n_sep_by_space;
char int_p_sign_posn;
char int_n_sign_posn;
}
///
enum
{
@ -172,4 +207,218 @@ version (linux)
///
enum LC_GLOBAL_LOCALE = (cast(locale_t)-1);
/// Duplicate existing locale
locale_t duplocale(locale_t locale);
/// Free an allocated locale
void freelocale(locale_t locale);
/// Natural language formatting for C
lconv* localeconv();
/// Create a new locale
locale_t newlocale(int mask, const char* locale, locale_t base);
/// Set the C library's notion of natural language formatting style
char* setlocale(int category, const char* locale);
/// Set the per-thread locale
locale_t uselocale (locale_t locale);
}
else version (CRuntime_Musl)
{
///
struct lconv
{
char* decimal_point;
char* thousands_sep;
char* grouping;
char* int_curr_symbol;
char* currency_symbol;
char* mon_decimal_point;
char* mon_thousands_sep;
char* mon_grouping;
char* positive_sign;
char* negative_sign;
char int_frac_digits;
char frac_digits;
char p_cs_precedes;
char p_sep_by_space;
char n_cs_precedes;
char n_sep_by_space;
char p_sign_posn;
char n_sign_posn;
char int_p_cs_precedes;
char int_p_sep_by_space;
char int_n_cs_precedes;
char int_n_sep_by_space;
char int_p_sign_posn;
char int_n_sign_posn;
}
///
enum
{
LC_CTYPE = 0,
LC_NUMERIC = 1,
LC_TIME = 2,
LC_COLLATE = 3,
LC_MONETARY = 4,
LC_MESSAGES = 5,
LC_ALL = 6,
}
///
enum
{
LC_CTYPE_MASK = (1 << LC_CTYPE),
LC_NUMERIC_MASK = (1 << LC_NUMERIC),
LC_TIME_MASK = (1 << LC_TIME),
LC_COLLATE_MASK = (1 << LC_COLLATE),
LC_MONETARY_MASK = (1 << LC_MONETARY),
LC_MESSAGES_MASK = (1 << LC_MESSAGES),
LC_ALL_MASK = 0x7fffffff,
}
private struct __locale_struct;
///
alias locale_t = __locale_struct*;
///
enum LC_GLOBAL_LOCALE = (cast(locale_t)-1);
/// Duplicate existing locale
locale_t duplocale(locale_t locale);
/// Free an allocated locale
void freelocale(locale_t locale);
/// Natural language formatting for C
lconv* localeconv();
/// Create a new locale
locale_t newlocale(int mask, const char* locale, locale_t base);
/// Set the C library's notion of natural language formatting style
char* setlocale(int category, const char* locale);
/// Set the per-thread locale
locale_t uselocale (locale_t locale);
}
else version (OpenBSD)
{
///
struct lconv
{
char* decimal_point;
char* thousands_sep;
char* grouping;
char* int_curr_symbol;
char* currency_symbol;
char* mon_decimal_point;
char* mon_thousands_sep;
char* mon_grouping;
char* positive_sign;
char* negative_sign;
char int_frac_digits;
char frac_digits;
char p_cs_precedes;
char p_sep_by_space;
char n_cs_precedes;
char n_sep_by_space;
char p_sign_posn;
char n_sign_posn;
char int_p_cs_precedes;
char int_n_cs_precedes;
char int_p_sep_by_space;
char int_n_sep_by_space;
char int_p_sign_posn;
char int_n_sign_posn;
}
///
enum
{
LC_ALL = 0,
LC_COLLATE = 1,
LC_CTYPE = 2,
LC_MONETARY = 3,
LC_NUMERIC = 4,
LC_TIME = 5,
LC_MESSAGES = 6,
}
private enum _LC_LAST = 7;
///
enum
{
LC_COLLATE_MASK = (1 << LC_COLLATE),
LC_CTYPE_MASK = (1 << LC_CTYPE),
LC_MONETARY_MASK = (1 << LC_MONETARY),
LC_NUMERIC_MASK = (1 << LC_NUMERIC),
LC_TIME_MASK = (1 << LC_TIME),
LC_MESSAGES_MASK = (1 << LC_MESSAGES),
LC_ALL_MASK = ((1 << _LC_LAST) - 2),
}
///
alias locale_t = void*;
///
enum LC_GLOBAL_LOCALE = (cast(locale_t)-1);
/// Duplicate existing locale
locale_t duplocale(locale_t locale);
/// Free an allocated locale
void freelocale(locale_t locale);
/// Natural language formatting for C
lconv* localeconv();
/// Create a new locale
locale_t newlocale(int mask, const char* locale, locale_t base);
/// Set the C library's notion of natural language formatting style
char* setlocale(int category, const char* locale);
/// Set the per-thread locale
locale_t uselocale (locale_t locale);
}
else version (Solaris)
{
///
struct lconv
{
char* decimal_point;
char* thousands_sep;
char* grouping;
char* int_curr_symbol;
char* currency_symbol;
char* mon_decimal_point;
char* mon_thousands_sep;
char* mon_grouping;
char* positive_sign;
char* negative_sign;
char int_frac_digits;
char frac_digits;
char p_cs_precedes;
char p_sep_by_space;
char n_cs_precedes;
char n_sep_by_space;
char p_sign_posn;
char n_sign_posn;
char int_p_cs_precedes;
char int_n_cs_precedes;
char int_p_sep_by_space;
char int_n_sep_by_space;
char int_p_sign_posn;
char int_n_sign_posn;
}
///
enum
{
LC_CTYPE = 0,
LC_NUMERIC = 1,
LC_TIME = 2,
LC_COLLATE = 3,
LC_MONETARY = 4,
LC_MESSAGES = 5,
LC_ALL = 6,
}
/// Natural language formatting for C
lconv* localeconv();
/// Set the C library's notion of natural language formatting style
char* setlocale(int category, const char* locale);
}
else
static assert(false, "unimplemented platform");

View File

@ -19,6 +19,7 @@
* Authors: Andreas Bok Andersen, Mathias Lang
* Standards: POSIX.1-2001.
* See_Also: $(HTTP pubs.opengroup.org/onlinepubs/9699919799/basedefs/mqueue.h.html, Standard)
* Source: $(DRUNTIMESRC core/sys/posix/mqueue.d)
*/
module core.sys.posix.mqueue;
@ -58,16 +59,17 @@ struct mq_attr
* Note:
* Linux prototypes are:
* mqd_t mq_open (const(char)* name, int oflag);
* mqd_t mq_open(const(char)* name, int oflag, mode_t mode, mq_attr* attr);
* mqd_t mq_open (const(char)* name, int oflag, mode_t mode, mq_attr* attr);
*
* Params:
* name = Name of the message queue to open.
* oflags = determines the type of access used.
* oflag = determines the type of access used.
* If `O_CREAT` is on `oflag`, the third argument is taken as a
* `mode_t`, the mode of the created message queue.
* If `O_CREAT` is on `oflag`, the fourth argument is taken as
* a pointer to a `mq_attr' (message queue attributes).
* If the fourth argument is `null`, default attributes are used.
* ... = varargs matching the function prototypes
*
* Returns:
* Message queue descriptor or (mqd_t) -1 on error.

View File

@ -291,7 +291,7 @@ else version (OpenBSD)
}
enum PTHREAD_MUTEX_INITIALIZER = null;
//enum PTHREAD_ONCE_INIT = { PTHREAD_NEEDS_INIT, PTHREAD_MUTEX_INITIALIZER };
enum PTHREAD_ONCE_INIT = pthread_once_t.init;
enum PTHREAD_COND_INITIALIZER = null;
enum PTHREAD_RWLOCK_INITIALIZER = null;
}
@ -330,7 +330,6 @@ else version (DragonFlyBSD)
enum PTHREAD_DONE_INIT = 1;
enum PTHREAD_MUTEX_INITIALIZER = null;
//enum PTHREAD_ONCE_INIT = { PTHREAD_NEEDS_INIT, NULL };
enum PTHREAD_ONCE_INIT = pthread_once_t.init;
enum PTHREAD_COND_INITIALIZER = null;
enum PTHREAD_RWLOCK_INITIALIZER = null;

View File

@ -159,107 +159,6 @@ else version (OpenBSD)
}
else version (FreeBSD)
{
import core.sys.freebsd.sys.mount;
// @@@DEPRECATED_2.091@@@
deprecated("Moved to core.sys.freebsd.sys.mount to correspond to C header file sys/mount.h")
alias MFSNAMELEN = core.sys.freebsd.sys.mount.MFSNAMELEN;
// @@@DEPRECATED_2.091@@@
deprecated("Moved to core.sys.freebsd.sys.mount to correspond to C header file sys/mount.h")
alias MNAMELEN = core.sys.freebsd.sys.mount.MNAMELEN;
// @@@DEPRECATED_2.091@@@
deprecated("Moved to core.sys.freebsd.sys.mount to correspond to C header file sys/mount.h")
alias fsid_t = core.sys.freebsd.sys.mount.fsid_t;
// @@@DEPRECATED_2.091@@@
deprecated("Moved to core.sys.freebsd.sys.mount to correspond to C header file sys/mount.h")
alias statfs_t = core.sys.freebsd.sys.mount.statfs_t;
// @@@DEPRECATED_2.091@@@
deprecated("Values moved to core.sys.freebsd.sys.mount to correspond to C header file sys/mount.h")
enum FFlag
{
// @@@DEPRECATED_2.091@@@
deprecated("Moved to core.sys.freebsd.sys.mount to correspond to C header file sys/mount.h")
MNT_RDONLY = 1, /* read only filesystem */
// @@@DEPRECATED_2.091@@@
deprecated("Moved to core.sys.freebsd.sys.mount to correspond to C header file sys/mount.h")
MNT_SYNCHRONOUS = 2, /* fs written synchronously */
// @@@DEPRECATED_2.091@@@
deprecated("Moved to core.sys.freebsd.sys.mount to correspond to C header file sys/mount.h")
MNT_NOEXEC = 4, /* can't exec from filesystem */
// @@@DEPRECATED_2.091@@@
deprecated("Moved to core.sys.freebsd.sys.mount to correspond to C header file sys/mount.h")
MNT_NOSUID = 8, /* don't honor setuid fs bits */
// @@@DEPRECATED_2.091@@@
deprecated("Moved to core.sys.freebsd.sys.mount to correspond to C header file sys/mount.h")
MNT_NFS4ACLS = 16, /* enable NFS version 4 ACLs */
// @@@DEPRECATED_2.091@@@
deprecated("Moved to core.sys.freebsd.sys.mount to correspond to C header file sys/mount.h")
MNT_UNION = 32, /* union with underlying fs */
// @@@DEPRECATED_2.091@@@
deprecated("Moved to core.sys.freebsd.sys.mount to correspond to C header file sys/mount.h")
MNT_ASYNC = 64, /* fs written asynchronously */
// @@@DEPRECATED_2.091@@@
deprecated("Moved to core.sys.freebsd.sys.mount to correspond to C header file sys/mount.h")
MNT_SUIDDIR = 128, /* special SUID dir handling */
// @@@DEPRECATED_2.091@@@
deprecated("Moved to core.sys.freebsd.sys.mount to correspond to C header file sys/mount.h")
MNT_SOFTDEP = 256, /* using soft updates */
// @@@DEPRECATED_2.091@@@
deprecated("Moved to core.sys.freebsd.sys.mount to correspond to C header file sys/mount.h")
MNT_NOSYMFOLLOW = 512, /* do not follow symlinks */
// @@@DEPRECATED_2.091@@@
deprecated("Moved to core.sys.freebsd.sys.mount to correspond to C header file sys/mount.h")
MNT_GJOURNAL = 1024, /* GEOM journal support enabled */
// @@@DEPRECATED_2.091@@@
deprecated("Moved to core.sys.freebsd.sys.mount to correspond to C header file sys/mount.h")
MNT_MULTILABEL = 2048, /* MAC support for objects */
// @@@DEPRECATED_2.091@@@
deprecated("Moved to core.sys.freebsd.sys.mount to correspond to C header file sys/mount.h")
MNT_ACLS = 4096, /* ACL support enabled */
// @@@DEPRECATED_2.091@@@
deprecated("Moved to core.sys.freebsd.sys.mount to correspond to C header file sys/mount.h")
MNT_NOATIME = 8192, /* dont update file access time */
// @@@DEPRECATED_2.091@@@
deprecated("Moved to core.sys.freebsd.sys.mount to correspond to C header file sys/mount.h")
MNT_NOCLUSTERR = 16384, /* disable cluster read */
// @@@DEPRECATED_2.091@@@
deprecated("Moved to core.sys.freebsd.sys.mount to correspond to C header file sys/mount.h")
MNT_NOCLUSTERW = 32768, /* disable cluster write */
// @@@DEPRECATED_2.091@@@
deprecated("Moved to core.sys.freebsd.sys.mount to correspond to C header file sys/mount.h")
MNT_SUJ = 65536, /* using journaled soft updates */
// @@@DEPRECATED_2.091@@@
deprecated("Moved to core.sys.freebsd.sys.mount to correspond to C header file sys/mount.h")
MNT_AUTOMOUNTED = 131072 /* mounted by automountd(8) */
}
deprecated("Moved to core.sys.freebsd.sys.mount to correspond to C header file sys/mount.h")
alias statfs = core.sys.freebsd.sys.mount.statfs;
deprecated("Moved to core.sys.freebsd.sys.mount to correspond to C header file sys/mount.h")
alias fstatfs = core.sys.freebsd.sys.mount.fstatfs;
struct statvfs_t
{
fsblkcnt_t f_bavail;

View File

@ -1103,7 +1103,14 @@ else version (DragonFlyBSD)
alias void* pthread_key_t;
alias void* pthread_mutex_t;
alias void* pthread_mutexattr_t;
alias void* pthread_once_t;
private struct pthread_once
{
int state;
pthread_mutex_t mutex;
}
alias pthread_once pthread_once_t;
alias void* pthread_rwlock_t;
alias void* pthread_rwlockattr_t;
alias void* pthread_t;

View File

@ -0,0 +1,17 @@
/**
* D header file for Solaris stdlib.h.
*
* Copyright: Copyright © 2021, The D Language Foundation
* License: <a href="http://www.boost.org/LICENSE_1_0.txt">Boost License 1.0</a>.
* Authors: Iain Buclaw
*/
module core.sys.solaris.stdlib;
public import core.sys.posix.stdlib;
version (Solaris):
extern (C):
nothrow:
@nogc:
const(char)* getprogname();
void setprogname(scope const char* name);

View File

@ -1,4 +1,4 @@
3dd5df6864b3849450d3657e219b90909663a513
9d575282edeccecbc061e615bf2486fd07e8c084
The first line of this file holds the git revision number of the last
merge done from the dlang/phobos repository.

View File

@ -3148,8 +3148,6 @@ if (isInputRange!Source && isSomeChar!(ElementType!Source) && !is(Source == enum
{
version (CRuntime_Microsoft)
ld1 = 0x1.FFFFFFFFFFFFFFFEp-16382L; // strtold currently mapped to strtod
else version (CRuntime_Bionic)
ld1 = 0x1.FFFFFFFFFFFFFFFEp-16382L; // strtold currently mapped to strtod
else
ld1 = strtold(s.ptr, null);
}

View File

@ -7,6 +7,15 @@
+/
module std.datetime.systime;
version (OSX)
version = Darwin;
else version (iOS)
version = Darwin;
else version (TVOS)
version = Darwin;
else version (WatchOS)
version = Darwin;
import core.time;
import std.datetime.date;
import std.datetime.timezone;
@ -161,18 +170,19 @@ public:
static import core.stdc.time;
enum hnsecsToUnixEpoch = unixTimeToStdTime(0);
version (OSX)
version (Darwin)
{
static if (clockType == ClockType.second)
return unixTimeToStdTime(core.stdc.time.time(null));
else
{
import core.sys.posix.sys.time : gettimeofday, timeval;
timeval tv;
if (gettimeofday(&tv, null) != 0)
throw new TimeException("Call to gettimeofday() failed");
timeval tv = void;
// Posix gettimeofday called with a valid timeval address
// and a null second parameter doesn't fail.
gettimeofday(&tv, null);
return convert!("seconds", "hnsecs")(tv.tv_sec) +
convert!("usecs", "hnsecs")(tv.tv_usec) +
tv.tv_usec * 10 +
hnsecsToUnixEpoch;
}
}
@ -188,9 +198,16 @@ public:
else static if (clockType == ClockType.normal) alias clockArg = CLOCK_REALTIME;
else static if (clockType == ClockType.precise) alias clockArg = CLOCK_REALTIME;
else static assert(0, "Previous static if is wrong.");
timespec ts;
if (clock_gettime(clockArg, &ts) != 0)
throw new TimeException("Call to clock_gettime() failed");
timespec ts = void;
immutable error = clock_gettime(clockArg, &ts);
// Posix clock_gettime called with a valid address and valid clock_id is only
// permitted to fail if the number of seconds does not fit in time_t. If tv_sec
// is long or larger overflow won't happen before 292 billion years A.D.
static if (ts.tv_sec.max < long.max)
{
if (error)
throw new TimeException("Call to clock_gettime() failed");
}
return convert!("seconds", "hnsecs")(ts.tv_sec) +
ts.tv_nsec / 100 +
hnsecsToUnixEpoch;
@ -205,9 +222,16 @@ public:
else static if (clockType == ClockType.precise) alias clockArg = CLOCK_REALTIME_PRECISE;
else static if (clockType == ClockType.second) alias clockArg = CLOCK_SECOND;
else static assert(0, "Previous static if is wrong.");
timespec ts;
if (clock_gettime(clockArg, &ts) != 0)
throw new TimeException("Call to clock_gettime() failed");
timespec ts = void;
immutable error = clock_gettime(clockArg, &ts);
// Posix clock_gettime called with a valid address and valid clock_id is only
// permitted to fail if the number of seconds does not fit in time_t. If tv_sec
// is long or larger overflow won't happen before 292 billion years A.D.
static if (ts.tv_sec.max < long.max)
{
if (error)
throw new TimeException("Call to clock_gettime() failed");
}
return convert!("seconds", "hnsecs")(ts.tv_sec) +
ts.tv_nsec / 100 +
hnsecsToUnixEpoch;
@ -218,12 +242,38 @@ public:
return unixTimeToStdTime(core.stdc.time.time(null));
else
{
import core.sys.posix.sys.time : gettimeofday, timeval;
timeval tv;
if (gettimeofday(&tv, null) != 0)
throw new TimeException("Call to gettimeofday() failed");
return convert!("seconds", "hnsecs")(tv.tv_sec) +
convert!("usecs", "hnsecs")(tv.tv_usec) +
import core.sys.netbsd.time : clock_gettime, CLOCK_REALTIME;
timespec ts = void;
immutable error = clock_gettime(CLOCK_REALTIME, &ts);
// Posix clock_gettime called with a valid address and valid clock_id is only
// permitted to fail if the number of seconds does not fit in time_t. If tv_sec
// is long or larger overflow won't happen before 292 billion years A.D.
static if (ts.tv_sec.max < long.max)
{
if (error)
throw new TimeException("Call to clock_gettime() failed");
}
return convert!("seconds", "hnsecs")(ts.tv_sec) +
ts.tv_nsec / 100 +
hnsecsToUnixEpoch;
}
}
else version (OpenBSD)
{
static if (clockType == ClockType.second)
return unixTimeToStdTime(core.stdc.time.time(null));
else
{
import core.sys.openbsd.time : clock_gettime, CLOCK_REALTIME;
static if (clockType == ClockType.coarse) alias clockArg = CLOCK_REALTIME;
else static if (clockType == ClockType.normal) alias clockArg = CLOCK_REALTIME;
else static if (clockType == ClockType.precise) alias clockArg = CLOCK_REALTIME;
else static assert(0, "Previous static if is wrong.");
timespec ts;
if (clock_gettime(clockArg, &ts) != 0)
throw new TimeException("Call to clock_gettime() failed");
return convert!("seconds", "hnsecs")(ts.tv_sec) +
ts.tv_nsec / 100 +
hnsecsToUnixEpoch;
}
}
@ -236,9 +286,16 @@ public:
else static if (clockType == ClockType.precise) alias clockArg = CLOCK_REALTIME_PRECISE;
else static if (clockType == ClockType.second) alias clockArg = CLOCK_SECOND;
else static assert(0, "Previous static if is wrong.");
timespec ts;
if (clock_gettime(clockArg, &ts) != 0)
throw new TimeException("Call to clock_gettime() failed");
timespec ts = void;
immutable error = clock_gettime(clockArg, &ts);
// Posix clock_gettime called with a valid address and valid clock_id is only
// permitted to fail if the number of seconds does not fit in time_t. If tv_sec
// is long or larger overflow won't happen before 292 billion years A.D.
static if (ts.tv_sec.max < long.max)
{
if (error)
throw new TimeException("Call to clock_gettime() failed");
}
return convert!("seconds", "hnsecs")(ts.tv_sec) +
ts.tv_nsec / 100 +
hnsecsToUnixEpoch;
@ -254,9 +311,16 @@ public:
else static if (clockType == ClockType.normal) alias clockArg = CLOCK_REALTIME;
else static if (clockType == ClockType.precise) alias clockArg = CLOCK_REALTIME;
else static assert(0, "Previous static if is wrong.");
timespec ts;
if (clock_gettime(clockArg, &ts) != 0)
throw new TimeException("Call to clock_gettime() failed");
timespec ts = void;
immutable error = clock_gettime(clockArg, &ts);
// Posix clock_gettime called with a valid address and valid clock_id is only
// permitted to fail if the number of seconds does not fit in time_t. If tv_sec
// is long or larger overflow won't happen before 292 billion years A.D.
static if (ts.tv_sec.max < long.max)
{
if (error)
throw new TimeException("Call to clock_gettime() failed");
}
return convert!("seconds", "hnsecs")(ts.tv_sec) +
ts.tv_nsec / 100 +
hnsecsToUnixEpoch;

View File

@ -14,6 +14,15 @@ import std.exception : enforce;
import std.range.primitives;
import std.traits : isIntegral, isSomeString, Unqual;
version (OSX)
version = Darwin;
else version (iOS)
version = Darwin;
else version (TVOS)
version = Darwin;
else version (WatchOS)
version = Darwin;
version (Windows)
{
import core.stdc.time : time_t;
@ -296,7 +305,7 @@ public:
else version (NetBSD) enum utcZone = "UTC";
else version (DragonFlyBSD) enum utcZone = "UTC";
else version (linux) enum utcZone = "UTC";
else version (OSX) enum utcZone = "UTC";
else version (Darwin) enum utcZone = "UTC";
else version (Solaris) enum utcZone = "UTC";
else static assert(0, "The location of the UTC timezone file on this Posix platform must be set.");
@ -671,7 +680,11 @@ public:
@safe unittest
{
assert(LocalTime().dstName !is null);
// tzname, called from dstName, isn't set by default for Musl.
version (CRuntime_Musl)
assert(LocalTime().dstName is null);
else
assert(LocalTime().dstName !is null);
version (Posix)
{

View File

@ -1478,10 +1478,13 @@ private bool isUnionAliasedImpl(T)(size_t offset)
static assert( isUnionAliased!(S.A5, 1)); //a5.b1;
}
version (CRuntime_Glibc) version = GNU_STRERROR;
version (CRuntime_UClibc) version = GNU_STRERROR;
package string errnoString(int errno) nothrow @trusted
{
import core.stdc.string : strlen;
version (CRuntime_Glibc)
version (GNU_STRERROR)
{
import core.stdc.string : strerror_r;
char[1024] buf = void;

View File

@ -5,6 +5,15 @@ import std.experimental.allocator.building_blocks.null_allocator;
import std.experimental.allocator.common;
import std.typecons : Flag, Yes, No;
version (OSX)
version = Darwin;
else version (iOS)
version = Darwin;
else version (TVOS)
version = Darwin;
else version (WatchOS)
version = Darwin;
/**
A $(D Region) allocator allocates memory straight from one contiguous chunk.
There is no deallocation, and once the region is full, allocation requests
@ -580,14 +589,26 @@ struct InSituRegion(size_t size, size_t minAlign = platformAlignment)
assert(a.length == 2001);
}
version(CRuntime_Musl)
version (CRuntime_Musl)
{
// sbrk and brk are disabled in Musl:
// https://git.musl-libc.org/cgit/musl/commit/?id=7a995fe706e519a4f55399776ef0df9596101f93
// https://git.musl-libc.org/cgit/musl/commit/?id=863d628d93ea341b6a32661a1654320ce69f6a07
} else:
private extern(C) void* sbrk(long);
private extern(C) int brk(shared void*);
}
version (DragonFlyBSD)
{
// sbrk is deprecated in favor of mmap (we could implement a mmap + MAP_NORESERVE + PROT_NONE version)
// brk has been removed
// https://www.dragonflydigest.com/2019/02/22/22586.html
// http://gitweb.dragonflybsd.org/dragonfly.git/commitdiff/dc676eaefa61b0f47bbea1c53eab86fd5ccd78c6
// http://gitweb.dragonflybsd.org/dragonfly.git/commitdiff/4b5665564ef37dc939a3a9ffbafaab9894c18885
// http://gitweb.dragonflybsd.org/dragonfly.git/commitdiff/8618d94a0e2ff8303ad93c123a3fa598c26a116e
}
else
{
private extern(C) void* sbrk(long) nothrow @nogc;
private extern(C) int brk(shared void*) nothrow @nogc;
}
/**
@ -599,11 +620,14 @@ that uncontrolled calls to $(D brk) and $(D sbrk) may affect the workings of $(D
SbrkRegion) adversely.
*/
version (CRuntime_Musl) {} else
version (DragonFlyBSD) {} else
version (Posix) struct SbrkRegion(uint minAlign = platformAlignment)
{
import core.sys.posix.pthread : pthread_mutex_init, pthread_mutex_destroy,
pthread_mutex_t, pthread_mutex_lock, pthread_mutex_unlock,
PTHREAD_MUTEX_INITIALIZER;
PTHREAD_MUTEX_INITIALIZER;
private static shared pthread_mutex_t sbrkMutex = PTHREAD_MUTEX_INITIALIZER;
import std.typecons : Ternary;
@ -763,7 +787,9 @@ version (Posix) struct SbrkRegion(uint minAlign = platformAlignment)
}
}
version (Posix) @system unittest
version (CRuntime_Musl) {} else
version (DragonFlyBSD) {} else
version (Posix) @system nothrow @nogc unittest
{
// Let's test the assumption that sbrk(n) returns the old address
const p1 = sbrk(0);
@ -775,7 +801,9 @@ version (Posix) @system unittest
sbrk(-4096);
}
version (Posix) @system unittest
version (CRuntime_Musl) {} else
version (DragonFlyBSD) {} else
version (Posix) @system nothrow @nogc unittest
{
import std.typecons : Ternary;
alias alloc = SbrkRegion!(8).instance;
@ -786,7 +814,7 @@ version (Posix) @system unittest
assert(alloc.owns(a) == Ternary.yes);
assert(alloc.owns(b) == Ternary.yes);
// reducing the brk does not work on OSX
version (OSX) {} else
version (Darwin) {} else
{
assert(alloc.deallocate(b));
assert(alloc.deallocateAll);

View File

@ -46,6 +46,21 @@ struct MmapAllocator
if (b.ptr) munmap(b.ptr, b.length) == 0 || assert(0);
return true;
}
// Anonymous mmap might be zero-filled on all Posix systems but
// not all commit to this in the documentation.
version (linux)
// http://man7.org/linux/man-pages/man2/mmap.2.html
package alias allocateZeroed = allocate;
else version (NetBSD)
// http://netbsd.gw.com/cgi-bin/man-cgi?mmap+2+NetBSD-current
package alias allocateZeroed = allocate;
else version (Solaris)
// https://docs.oracle.com/cd/E88353_01/html/E37841/mmap-2.html
package alias allocateZeroed = allocate;
else version (AIX)
// https://www.ibm.com/support/knowledgecenter/en/ssw_aix_71/com.ibm.aix.basetrf1/mmap.htm
package alias allocateZeroed = allocate;
}
else version (Windows)
{
@ -67,6 +82,8 @@ struct MmapAllocator
{
return b.ptr is null || VirtualFree(b.ptr, 0, MEM_RELEASE) != 0;
}
package alias allocateZeroed = allocate;
}
}

View File

@ -1490,6 +1490,15 @@ if (isInputRange!R && !isInfinite!R && isSomeChar!(ElementEncodingType!R))
// vfs.timestamp_precision sysctl to a value greater than zero.
// - OS X, where the native filesystem (HFS+) stores filesystem
// timestamps with 1-second precision.
//
// Note: on linux systems, although in theory a change to a file date
// can be tracked with precision of 4 msecs, this test waits 20 msecs
// to prevent possible problems relative to the CI services the dlang uses,
// as they may have the HZ setting that controls the software clock set to 100
// (instead of the more common 250).
// see https://man7.org/linux/man-pages/man7/time.7.html
// https://stackoverflow.com/a/14393315,
// https://issues.dlang.org/show_bug.cgi?id=21148
version (FreeBSD) {} else
version (DragonFlyBSD) {} else
version (OSX) {} else
@ -1508,7 +1517,7 @@ version (OSX) {} else
remove(deleteme);
assert(time != lastTime);
lastTime = time;
Thread.sleep(10.msecs);
Thread.sleep(20.msecs);
}
}
@ -2757,15 +2766,27 @@ else version (NetBSD)
buffer.length *= 2;
}
}
else version (DragonFlyBSD)
{
import core.sys.dragonflybsd.sys.sysctl : sysctl, CTL_KERN, KERN_PROC, KERN_PROC_PATHNAME;
import std.exception : errnoEnforce, assumeUnique;
int[4] mib = [CTL_KERN, KERN_PROC, KERN_PROC_PATHNAME, -1];
size_t len;
auto result = sysctl(mib.ptr, mib.length, null, &len, null, 0); // get the length of the path
errnoEnforce(result == 0);
auto buffer = new char[len - 1];
result = sysctl(mib.ptr, mib.length, buffer.ptr, &len, null, 0);
errnoEnforce(result == 0);
return buffer.assumeUnique;
}
else version (FreeBSD)
{
import core.sys.freebsd.sys.sysctl : sysctl, CTL_KERN, KERN_PROC, KERN_PROC_PATHNAME;
import std.exception : errnoEnforce, assumeUnique;
enum
{
CTL_KERN = 1,
KERN_PROC = 14,
KERN_PROC_PATHNAME = 12
}
int[4] mib = [CTL_KERN, KERN_PROC, KERN_PROC_PATHNAME, -1];
size_t len;
@ -2781,11 +2802,58 @@ else version (NetBSD)
}
else version (NetBSD)
{
return readLink("/proc/self/exe");
import core.sys.netbsd.sys.sysctl : sysctl, CTL_KERN, KERN_PROC_ARGS, KERN_PROC_PATHNAME;
import std.exception : errnoEnforce, assumeUnique;
int[4] mib = [CTL_KERN, KERN_PROC_ARGS, -1, KERN_PROC_PATHNAME];
size_t len;
auto result = sysctl(mib.ptr, mib.length, null, &len, null, 0); // get the length of the path
errnoEnforce(result == 0);
auto buffer = new char[len - 1];
result = sysctl(mib.ptr, mib.length, buffer.ptr, &len, null, 0);
errnoEnforce(result == 0);
return buffer.assumeUnique;
}
else version (DragonFlyBSD)
else version (OpenBSD)
{
return readLink("/proc/curproc/file");
import core.sys.openbsd.sys.sysctl : sysctl, CTL_KERN, KERN_PROC_ARGS, KERN_PROC_ARGV;
import core.sys.posix.unistd : getpid;
import std.conv : to;
import std.exception : enforce, errnoEnforce;
import std.process : searchPathFor;
int[4] mib = [CTL_KERN, KERN_PROC_ARGS, getpid(), KERN_PROC_ARGV];
size_t len;
auto result = sysctl(mib.ptr, mib.length, null, &len, null, 0);
errnoEnforce(result == 0);
auto argv = new char*[len - 1];
result = sysctl(mib.ptr, mib.length, argv.ptr, &len, null, 0);
errnoEnforce(result == 0);
auto argv0 = argv[0];
if (*argv0 == '/' || *argv0 == '.')
{
import core.sys.posix.stdlib : realpath;
auto absolutePath = realpath(argv0, null);
scope (exit)
{
if (absolutePath)
free(absolutePath);
}
errnoEnforce(absolutePath);
return to!(string)(absolutePath);
}
else
{
auto absolutePath = searchPathFor(to!string(argv0));
errnoEnforce(absolutePath);
return absolutePath;
}
}
else version (Solaris)
{

View File

@ -167,19 +167,14 @@ version (SystemZ) version = IBMZ_Any;
version (RISCV32) version = RISCV_Any;
version (RISCV64) version = RISCV_Any;
version (D_InlineAsm_X86)
{
version = InlineAsm_X86_Any;
}
else version (D_InlineAsm_X86_64)
{
version = InlineAsm_X86_Any;
}
version (D_InlineAsm_X86) version = InlineAsm_X86_Any;
version (D_InlineAsm_X86_64) version = InlineAsm_X86_Any;
version (CRuntime_Microsoft)
version (InlineAsm_X86_Any) version = InlineAsm_X87;
version (InlineAsm_X87)
{
version (InlineAsm_X86_Any)
version = MSVC_InlineAsm;
static assert(real.mant_dig == 64);
version (CRuntime_Microsoft) version = InlineAsm_X87_MSVC;
}
version (X86_64) version = StaticallyHaveSSE;
@ -3610,7 +3605,7 @@ real log1p(real x) @safe pure nothrow @nogc
real log2(real x) @safe pure nothrow @nogc
{
version (INLINE_YL2X)
return core.math.yl2x(x, 1);
return core.math.yl2x(x, 1.0L);
else
{
// Special cases are the same as for log.
@ -4586,19 +4581,21 @@ real round(real x) @trusted nothrow @nogc
* If the fractional part of x is exactly 0.5, the return value is rounded
* away from zero.
*
* $(BLUE This function is Posix-Only.)
* $(BLUE This function is not implemented for Digital Mars C runtime.)
*/
long lround(real x) @trusted nothrow @nogc
{
version (Posix)
return core.stdc.math.llroundl(x);
else
version (CRuntime_DigitalMars)
assert(0, "lround not implemented");
else
return core.stdc.math.llroundl(x);
}
version (Posix)
///
@safe nothrow @nogc unittest
{
@safe nothrow @nogc unittest
version (CRuntime_DigitalMars) {}
else
{
assert(lround(0.49) == 0);
assert(lround(0.5) == 1);

View File

@ -40,6 +40,15 @@ License: $(HTTP boost.org/LICENSE_1_0.txt, Boost License 1.0)
*/
module std.parallelism;
version (OSX)
version = Darwin;
else version (iOS)
version = Darwin;
else version (TVOS)
version = Darwin;
else version (WatchOS)
version = Darwin;
///
@system unittest
{
@ -86,107 +95,82 @@ import std.meta;
import std.range.primitives;
import std.traits;
version (OSX)
{
version = useSysctlbyname;
}
else version (FreeBSD)
{
version = useSysctlbyname;
}
else version (DragonFlyBSD)
{
version = useSysctlbyname;
}
else version (NetBSD)
{
version = useSysctlbyname;
}
/*
(For now public undocumented with reserved name.)
A lazily initialized global constant. The underlying value is a shared global
statically initialized to `outOfBandValue` which must not be a legit value of
the constant. Upon the first call the situation is detected and the global is
initialized by calling `initializer`. The initializer is assumed to be pure
(even if not marked as such), i.e. return the same value upon repeated calls.
For that reason, no special precautions are taken so `initializer` may be called
more than one time leading to benign races on the cached value.
version (Windows)
In the quiescent state the cost of the function is an atomic load from a global.
Params:
T = The type of the pseudo-constant (may be qualified)
outOfBandValue = A value that cannot be valid, it is used for initialization
initializer = The function performing initialization; must be `nothrow`
Returns:
The lazily initialized value
*/
@property pure
T __lazilyInitializedConstant(T, alias outOfBandValue, alias initializer)()
if (is(Unqual!T : T)
&& is(typeof(initializer()) : T)
&& is(typeof(outOfBandValue) : T))
{
// BUGS: Only works on Windows 2000 and above.
shared static this()
static T impl() nothrow
{
import core.sys.windows.windows : SYSTEM_INFO, GetSystemInfo;
import std.algorithm.comparison : max;
SYSTEM_INFO si;
GetSystemInfo(&si);
totalCPUs = max(1, cast(uint) si.dwNumberOfProcessors);
// Thread-local cache
static Unqual!T tls = outOfBandValue;
auto local = tls;
// Shortest path, no atomic operations
if (local != outOfBandValue) return local;
// Process-level cache
static shared Unqual!T result = outOfBandValue;
// Initialize both process-level cache and tls
local = atomicLoad(result);
if (local == outOfBandValue)
{
local = initializer();
atomicStore(result, local);
}
tls = local;
return local;
}
}
else version (linux)
{
shared static this()
{
import core.sys.posix.unistd : _SC_NPROCESSORS_ONLN, sysconf;
totalCPUs = cast(uint) sysconf(_SC_NPROCESSORS_ONLN);
}
}
else version (Solaris)
{
shared static this()
{
import core.sys.posix.unistd : _SC_NPROCESSORS_ONLN, sysconf;
totalCPUs = cast(uint) sysconf(_SC_NPROCESSORS_ONLN);
}
}
else version (useSysctlbyname)
{
extern(C) int sysctlbyname(
const char *, void *, size_t *, void *, size_t
);
shared static this()
{
version (OSX)
{
auto nameStr = "machdep.cpu.core_count\0".ptr;
}
else version (FreeBSD)
{
auto nameStr = "hw.ncpu\0".ptr;
}
else version (DragonFlyBSD)
{
auto nameStr = "hw.ncpu\0".ptr;
}
else version (NetBSD)
{
auto nameStr = "hw.ncpu\0".ptr;
}
uint ans;
size_t len = uint.sizeof;
sysctlbyname(nameStr, &ans, &len, null, 0);
totalCPUs = ans;
}
}
else
{
static assert(0, "Don't know how to get N CPUs on this OS.");
import std.traits : SetFunctionAttributes;
alias Fun = SetFunctionAttributes!(typeof(&impl), "D",
functionAttributes!(typeof(&impl)) | FunctionAttribute.pure_);
auto purified = (() @trusted => cast(Fun) &impl)();
return purified();
}
immutable size_t cacheLineSize;
shared static this()
// Returns the size of a cache line.
alias cacheLineSize =
__lazilyInitializedConstant!(immutable(size_t), size_t.max, cacheLineSizeImpl);
private size_t cacheLineSizeImpl() @nogc nothrow @trusted
{
size_t result = 0;
import core.cpuid : datacache;
size_t lineSize = 0;
foreach (cachelevel; datacache)
foreach (ref const cachelevel; datacache)
{
if (cachelevel.lineSize > lineSize && cachelevel.lineSize < uint.max)
if (cachelevel.lineSize > result && cachelevel.lineSize < uint.max)
{
lineSize = cachelevel.lineSize;
result = cachelevel.lineSize;
}
}
cacheLineSize = lineSize;
return result;
}
@nogc @safe nothrow unittest
{
assert(cacheLineSize == cacheLineSizeImpl);
}
/* Atomics code. These forward to core.atomic, but are written like this
for two reasons:
@ -957,7 +941,81 @@ if (is(typeof(fun(args))) && isSafeTask!F)
The total number of CPU cores available on the current machine, as reported by
the operating system.
*/
immutable uint totalCPUs;
alias totalCPUs =
__lazilyInitializedConstant!(immutable(uint), uint.max, totalCPUsImpl);
uint totalCPUsImpl() @nogc nothrow @trusted
{
version (Windows)
{
// BUGS: Only works on Windows 2000 and above.
import core.sys.windows.winbase : SYSTEM_INFO, GetSystemInfo;
import std.algorithm.comparison : max;
SYSTEM_INFO si;
GetSystemInfo(&si);
return max(1, cast(uint) si.dwNumberOfProcessors);
}
else version (linux)
{
import core.sys.linux.sched : CPU_COUNT, cpu_set_t, sched_getaffinity;
import core.sys.posix.unistd : _SC_NPROCESSORS_ONLN, sysconf;
cpu_set_t set = void;
if (sched_getaffinity(0, cpu_set_t.sizeof, &set) == 0)
{
int count = CPU_COUNT(&set);
if (count > 0)
return cast(uint) count;
}
return cast(uint) sysconf(_SC_NPROCESSORS_ONLN);
}
else version (Darwin)
{
import core.sys.darwin.sys.sysctl : sysctlbyname;
uint result;
size_t len = result.sizeof;
sysctlbyname("hw.physicalcpu", &result, &len, null, 0);
return result;
}
else version (DragonFlyBSD)
{
import core.sys.dragonflybsd.sys.sysctl : sysctlbyname;
uint result;
size_t len = result.sizeof;
sysctlbyname("hw.ncpu", &result, &len, null, 0);
return result;
}
else version (FreeBSD)
{
import core.sys.freebsd.sys.sysctl : sysctlbyname;
uint result;
size_t len = result.sizeof;
sysctlbyname("hw.ncpu", &result, &len, null, 0);
return result;
}
else version (NetBSD)
{
import core.sys.netbsd.sys.sysctl : sysctlbyname;
uint result;
size_t len = result.sizeof;
sysctlbyname("hw.ncpu", &result, &len, null, 0);
return result;
}
else version (Solaris)
{
import core.sys.posix.unistd : _SC_NPROCESSORS_ONLN, sysconf;
return cast(uint) sysconf(_SC_NPROCESSORS_ONLN);
}
else version (OpenBSD)
{
import core.sys.posix.unistd : _SC_NPROCESSORS_ONLN, sysconf;
return cast(uint) sysconf(_SC_NPROCESSORS_ONLN);
}
else
{
static assert(0, "Don't know how to get N CPUs on this OS.");
}
}
/*
This class serves two purposes:
@ -3302,11 +3360,7 @@ terminating the main thread.
}());
}
private shared uint _defaultPoolThreads;
shared static this()
{
atomicStore(_defaultPoolThreads, totalCPUs - 1);
}
private shared uint _defaultPoolThreads = uint.max;
/**
These properties get and set the number of worker threads in the $(D TaskPool)
@ -3316,7 +3370,8 @@ number of worker threads in the instance returned by $(D taskPool).
*/
@property uint defaultPoolThreads() @trusted
{
return atomicLoad(_defaultPoolThreads);
const local = atomicLoad(_defaultPoolThreads);
return local < uint.max ? local : totalCPUs - 1;
}
/// Ditto

View File

@ -146,6 +146,8 @@ class SocketException: Exception
mixin basicExceptionCtors;
}
version (CRuntime_Glibc) version = GNU_STRERROR;
version (CRuntime_UClibc) version = GNU_STRERROR;
/*
* Needs to be public so that SocketOSException can be thrown outside of
@ -159,7 +161,7 @@ string formatSocketError(int err) @trusted
{
char[80] buf;
const(char)* cs;
version (CRuntime_Glibc)
version (GNU_STRERROR)
{
cs = strerror_r(err, buf.ptr, buf.length);
}

View File

@ -79,6 +79,10 @@ else version (NetBSD)
{
version = GENERIC_IO;
}
else version (OpenBSD)
{
version = GENERIC_IO;
}
else version (DragonFlyBSD)
{
version = GENERIC_IO;
@ -93,12 +97,11 @@ version (Windows)
{
private alias FSChar = wchar;
}
else version (Posix)
else
{
private alias FSChar = char;
}
else
static assert(0);
version (Windows)
{

View File

@ -30,6 +30,9 @@ immutable
win64, /// Microsoft 64 bit Windows systems
linux, /// All Linux Systems, except for Android
osx, /// Mac OS X
iOS, /// iOS
tvOS, /// tvOS
watchOS, /// watchOS
freeBSD, /// FreeBSD
netBSD, /// NetBSD
dragonFlyBSD, /// DragonFlyBSD
@ -44,6 +47,9 @@ immutable
else version (Android) OS os = OS.android;
else version (linux) OS os = OS.linux;
else version (OSX) OS os = OS.osx;
else version (iOS) OS os = OS.iOS;
else version (tvOS) OS os = OS.tvOS;
else version (watchOS) OS os = OS.watchOS;
else version (FreeBSD) OS os = OS.freeBSD;
else version (NetBSD) OS os = OS.netBSD;
else version (DragonFlyBSD) OS os = OS.dragonFlyBSD;