Line data Source code
1 : /**
2 : * @file ft_system.c
3 : * @brief Implementation of system-related utility functions.
4 : * @ingroup Utilities
5 : */
6 : /*
7 : * Copyright (C) 2025 François Pesce : francois.pesce (at) gmail (dot) com
8 : *
9 : * Licensed under the Apache License, Version 2.0 (the "License");
10 : * you may not use this file except in compliance with the License.
11 : * You may obtain a copy of the License at
12 : *
13 : * http://www.apache.org/licenses/LICENSE-2.0
14 : *
15 : * Unless required by applicable law or agreed to in writing, software
16 : * distributed under the License is distributed on an "AS IS" BASIS,
17 : * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18 : * See the License for the specific language governing permissions and
19 : * limitations under the License.
20 : */
21 :
22 : #include "ft_system.h"
23 :
24 : #if defined(__unix__) || defined(__unix) || defined(unix) || \
25 : (defined(__APPLE__) && defined(__MACH__))
26 : #include <unistd.h>
27 : #endif
28 :
29 : #ifdef _WIN32
30 : #include <windows.h>
31 : #endif
32 :
33 18 : unsigned int ft_get_cpu_cores(void)
34 : {
35 : #if defined(_SC_NPROCESSORS_ONLN)
36 : /* POSIX systems (Linux, macOS, BSD) */
37 18 : long nprocs = sysconf(_SC_NPROCESSORS_ONLN);
38 18 : if (nprocs > 0) {
39 18 : return (unsigned int) nprocs;
40 : }
41 : /* Fall through to default if sysconf fails */
42 : #elif defined(_WIN32)
43 : /* Windows */
44 : SYSTEM_INFO sysinfo;
45 : GetSystemInfo(&sysinfo);
46 : if (sysinfo.dwNumberOfProcessors > 0) {
47 : return (unsigned int) sysinfo.dwNumberOfProcessors;
48 : }
49 : /* Fall through to default if GetSystemInfo fails */
50 : #endif
51 :
52 : /* Fallback to a reasonable default */
53 0 : return 4;
54 : }
|