From 48289acee6e25213b96c211e5e719245fe0fc99d Mon Sep 17 00:00:00 2001 From: Calvin Rose Date: Sat, 28 May 2022 12:01:23 -0500 Subject: [PATCH] Add os/cpu-count functionality. --- README.md | 4 ++-- src/core/os.c | 42 ++++++++++++++++++++++++++++++++++++++++++ tools/format.sh | 0 3 files changed, 44 insertions(+), 2 deletions(-) mode change 100644 => 100755 tools/format.sh diff --git a/README.md b/README.md index 9c8d5f8d..6d4e71f5 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ [![Join the chat](https://badges.gitter.im/janet-language/community.svg)](https://gitter.im/janet-language/community)   -[![builds.sr.ht status](https://builds.sr.ht/~bakpakin/janet/commits/freebsd.yml.svg)](https://builds.sr.ht/~bakpakin/janet/commits/freebsd.yml?) -[![builds.sr.ht status](https://builds.sr.ht/~bakpakin/janet/commits/openbsd.yml.svg)](https://builds.sr.ht/~bakpakin/janet/commits/openbsd.yml?) +[![builds.sr.ht status](https://builds.sr.ht/~bakpakin/janet/commits/master/freebsd.yml.svg)](https://builds.sr.ht/~bakpakin/janet/commits/freebsd.yml?) +[![builds.sr.ht status](https://builds.sr.ht/~bakpakin/janet/commits/master/openbsd.yml.svg)](https://builds.sr.ht/~bakpakin/janet/commits/openbsd.yml?) [![Actions Status](https://github.com/janet-lang/janet/actions/workflows/test.yml/badge.svg)](https://github.com/janet-lang/janet/actions/workflows/test.yml) Janet logo diff --git a/src/core/os.c b/src/core/os.c index f443e14b..54497fcc 100644 --- a/src/core/os.c +++ b/src/core/os.c @@ -39,6 +39,10 @@ #include #include +#ifdef JANET_BSD +#include +#endif + #ifdef JANET_WINDOWS #include #include @@ -201,6 +205,43 @@ JANET_CORE_FN(os_exit, return janet_wrap_nil(); } +JANET_CORE_FN(os_cpu_count, + "(os/cpu-count &opt dflt)", + "Get an approximate number of CPUs available on for this process to use. If " + "unable to get an approximation, will return a default value dflt.") { + janet_arity(argc, 0, 1); + Janet dflt = argc > 0 ? argv[0] : janet_wrap_nil(); +#ifdef JANET_WINDOWS + (void) dflt; + SYSTEM_INFO info; + GetSystemInfo(&info); + return janet_wrap_integer(info.dwNumberOfProcessors); +#elif defined(JANET_LINUX) + (void) dflt; + return janet_wrap_integer(sysconf(_SC_NPROCESSORS_ONLN)); +#elif defined(JANET_BSD) && defined(HW_NCPUONLINE) + (void) dflt; + const int name[2] = {CTL_HW, HW_NCPUONLINE}; + int result = 0; + size_t len = sizeof(int); + if (-1 == sysctl(name, 2, &result, &len, sizeof(result), NULL, 0)) { + return dflt; + } + return janet_wrap_integer(result); +#elif defined(JANET_BSD) && defined(HW_NCPU) + (void) dflt; + const int name[2] = {CTL_HW, HW_NCPU}; + int result = 0; + size_t len = sizeof(int); + if (-1 == sysctl(name, 2, &result, &len, sizeof(result), NULL, 0)) { + return dflt; + } + return janet_wrap_integer(result); +#else + return dflt; +#endif +} + #ifndef JANET_REDUCED_OS #ifndef JANET_NO_PROCESSES @@ -2195,6 +2236,7 @@ void janet_lib_os(JanetTable *env) { JANET_CORE_REG("os/chmod", os_chmod), JANET_CORE_REG("os/touch", os_touch), JANET_CORE_REG("os/cd", os_cd), + JANET_CORE_REG("os/cpu-count", os_cpu_count), #ifndef JANET_NO_UMASK JANET_CORE_REG("os/umask", os_umask), #endif diff --git a/tools/format.sh b/tools/format.sh old mode 100644 new mode 100755