diff --git a/Kernel/API/Syscall.h b/Kernel/API/Syscall.h index 8c11349c168..8412971bf65 100644 --- a/Kernel/API/Syscall.h +++ b/Kernel/API/Syscall.h @@ -191,7 +191,8 @@ namespace Kernel { __ENUMERATE_SYSCALL(ptrace) \ __ENUMERATE_SYSCALL(minherit) \ __ENUMERATE_SYSCALL(sendfd) \ - __ENUMERATE_SYSCALL(recvfd) + __ENUMERATE_SYSCALL(recvfd) \ + __ENUMERATE_SYSCALL(sysconf) namespace Syscall { diff --git a/Kernel/Arch/i386/CPU.h b/Kernel/Arch/i386/CPU.h index 95f8980a506..de90cd6dc96 100644 --- a/Kernel/Arch/i386/CPU.h +++ b/Kernel/Arch/i386/CPU.h @@ -744,6 +744,8 @@ public: static Processor& by_id(u32 cpu); + static size_t processor_count() { return processors().size(); } + template static inline IterationDecision for_each(Callback callback) { diff --git a/Kernel/Process.cpp b/Kernel/Process.cpp index 3bb727452e8..a051e8145b0 100644 --- a/Kernel/Process.cpp +++ b/Kernel/Process.cpp @@ -5308,4 +5308,15 @@ int Process::sys$recvfd(int sockfd) m_fds[new_fd].set(*received_descriptor_or_error.value(), 0); return new_fd; } + +long Process::sys$sysconf(int name) +{ + switch (name) { + case _SC_NPROCESSORS_CONF: + case _SC_NPROCESSORS_ONLN: + return Processor::processor_count(); + default: + return -EINVAL; + } +} } diff --git a/Kernel/Process.h b/Kernel/Process.h index 48d386c6aad..ebec0c73ead 100644 --- a/Kernel/Process.h +++ b/Kernel/Process.h @@ -327,6 +327,7 @@ public: int sys$ptrace(const Syscall::SC_ptrace_params*); int sys$sendfd(int sockfd, int fd); int sys$recvfd(int sockfd); + long sys$sysconf(int name); template int get_sock_or_peer_name(const Params&); diff --git a/Kernel/UnixTypes.h b/Kernel/UnixTypes.h index a07ebf4f579..9115c22daa8 100644 --- a/Kernel/UnixTypes.h +++ b/Kernel/UnixTypes.h @@ -55,6 +55,11 @@ #define MS_RDONLY (1 << 4) #define MS_REMOUNT (1 << 5) +enum { + _SC_NPROCESSORS_CONF, + _SC_NPROCESSORS_ONLN, +}; + #define PERF_EVENT_MALLOC 1 #define PERF_EVENT_FREE 2 diff --git a/Libraries/LibC/unistd.cpp b/Libraries/LibC/unistd.cpp index 80b05a16af0..30929d47c10 100644 --- a/Libraries/LibC/unistd.cpp +++ b/Libraries/LibC/unistd.cpp @@ -722,4 +722,10 @@ char* getpass(const char* prompt) dbg() << "FIXME: getpass(\"" << prompt << "\")"; ASSERT_NOT_REACHED(); } + +long sysconf(int name) +{ + int rc = syscall(SC_sysconf, name); + __RETURN_WITH_ERRNO(rc, rc, -1); +} } diff --git a/Libraries/LibC/unistd.h b/Libraries/LibC/unistd.h index 8a9687dc390..58360189757 100644 --- a/Libraries/LibC/unistd.h +++ b/Libraries/LibC/unistd.h @@ -172,4 +172,10 @@ enum { #define _POSIX_PRIORITY_SCHEDULING #define _POSIX_VDISABLE '\0' +enum { + _SC_NPROCESSORS_CONF, + _SC_NPROCESSORS_ONLN, +}; +long sysconf(int name); + __END_DECLS diff --git a/Ports/ninja/package.sh b/Ports/ninja/package.sh index 6f56af4fde8..977a95aa6e8 100755 --- a/Ports/ninja/package.sh +++ b/Ports/ninja/package.sh @@ -13,5 +13,6 @@ build() { } install() { + mkdir -p "${SERENITY_ROOT}/Build/Root/usr/local/bin" cp "${workdir}/ninja" "${SERENITY_ROOT}/Build/Root/usr/local/bin/ninja" } diff --git a/Ports/ninja/patches/nproc.patch b/Ports/ninja/patches/nproc.patch deleted file mode 100644 index 0e383c0ef2a..00000000000 --- a/Ports/ninja/patches/nproc.patch +++ /dev/null @@ -1,13 +0,0 @@ -diff --git a/src/util.cc b/src/util.cc -index ae94d34..72cf501 100644 ---- a/src/util.cc -+++ b/src/util.cc -@@ -476,7 +476,7 @@ int GetProcessorCount() { - GetNativeSystemInfo(&info); - return info.dwNumberOfProcessors; - #else -- return sysconf(_SC_NPROCESSORS_ONLN); -+ return 1; // FIXME: serenity way of saying sysconf(_SC_NPROCESSORS_ONLN); - #endif - } -