aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRon Yorston <rmy@pobox.com>2021-02-17 13:55:12 +0000
committerRon Yorston <rmy@pobox.com>2021-02-17 13:55:12 +0000
commit2d20b9d88c4fc91637babaafa4a60dd7943e03a7 (patch)
tree7c4df30c9160457f174b7c33d331f889a24f84b1
parentd2804fc6020aad3f9d0ed914d8c2aefa37ffa6d8 (diff)
downloadbusybox-w32-2d20b9d88c4fc91637babaafa4a60dd7943e03a7.tar.gz
busybox-w32-2d20b9d88c4fc91637babaafa4a60dd7943e03a7.tar.bz2
busybox-w32-2d20b9d88c4fc91637babaafa4a60dd7943e03a7.zip
nproc: port to WIN32 and enable by default
Use the WIN32 API GetProcessAffinityMask() to obtain the number of processors configured and the number available to the current process. This only works for up to 64 processors.
-rw-r--r--configs/mingw32_defconfig4
-rw-r--r--configs/mingw64_defconfig4
-rw-r--r--coreutils/nproc.c30
3 files changed, 34 insertions, 4 deletions
diff --git a/configs/mingw32_defconfig b/configs/mingw32_defconfig
index 772f7fdb9..7108c2dda 100644
--- a/configs/mingw32_defconfig
+++ b/configs/mingw32_defconfig
@@ -1,7 +1,7 @@
1# 1#
2# Automatically generated make config: don't edit 2# Automatically generated make config: don't edit
3# Busybox version: 1.34.0.git 3# Busybox version: 1.34.0.git
4# Sat Feb 13 10:29:16 2021 4# Wed Feb 17 13:34:38 2021
5# 5#
6CONFIG_HAVE_DOT_CONFIG=y 6CONFIG_HAVE_DOT_CONFIG=y
7# CONFIG_PLATFORM_POSIX is not set 7# CONFIG_PLATFORM_POSIX is not set
@@ -295,7 +295,7 @@ CONFIG_MV=y
295# CONFIG_NICE is not set 295# CONFIG_NICE is not set
296CONFIG_NL=y 296CONFIG_NL=y
297# CONFIG_NOHUP is not set 297# CONFIG_NOHUP is not set
298# CONFIG_NPROC is not set 298CONFIG_NPROC=y
299CONFIG_OD=y 299CONFIG_OD=y
300CONFIG_PASTE=y 300CONFIG_PASTE=y
301CONFIG_PRINTENV=y 301CONFIG_PRINTENV=y
diff --git a/configs/mingw64_defconfig b/configs/mingw64_defconfig
index f73f23fa3..0cb4f4a3e 100644
--- a/configs/mingw64_defconfig
+++ b/configs/mingw64_defconfig
@@ -1,7 +1,7 @@
1# 1#
2# Automatically generated make config: don't edit 2# Automatically generated make config: don't edit
3# Busybox version: 1.34.0.git 3# Busybox version: 1.34.0.git
4# Sat Feb 13 10:37:01 2021 4# Wed Feb 17 13:34:38 2021
5# 5#
6CONFIG_HAVE_DOT_CONFIG=y 6CONFIG_HAVE_DOT_CONFIG=y
7# CONFIG_PLATFORM_POSIX is not set 7# CONFIG_PLATFORM_POSIX is not set
@@ -295,7 +295,7 @@ CONFIG_MV=y
295# CONFIG_NICE is not set 295# CONFIG_NICE is not set
296CONFIG_NL=y 296CONFIG_NL=y
297# CONFIG_NOHUP is not set 297# CONFIG_NOHUP is not set
298# CONFIG_NPROC is not set 298CONFIG_NPROC=y
299CONFIG_OD=y 299CONFIG_OD=y
300CONFIG_PASTE=y 300CONFIG_PASTE=y
301CONFIG_PRINTENV=y 301CONFIG_PRINTENV=y
diff --git a/coreutils/nproc.c b/coreutils/nproc.c
index 31e452bc4..7025765c5 100644
--- a/coreutils/nproc.c
+++ b/coreutils/nproc.c
@@ -29,6 +29,7 @@
29int nproc_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; 29int nproc_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
30int nproc_main(int argc UNUSED_PARAM, char **argv UNUSED_PARAM) 30int nproc_main(int argc UNUSED_PARAM, char **argv UNUSED_PARAM)
31{ 31{
32#if !ENABLE_PLATFORM_MINGW32
32 unsigned long mask[1024]; 33 unsigned long mask[1024];
33 int count = 0; 34 int count = 0;
34#if ENABLE_LONG_OPTS 35#if ENABLE_LONG_OPTS
@@ -63,6 +64,35 @@ int nproc_main(int argc UNUSED_PARAM, char **argv UNUSED_PARAM)
63 } 64 }
64 } 65 }
65 } 66 }
67#else /* ENABLE_PLATFORM_MINGW32 */
68 int count = 0;
69 DWORD_PTR process_affinity, system_affinity;
70#if ENABLE_LONG_OPTS
71 int ignore = 0;
72 int opts = getopt32long(argv, "\xfe:+",
73 "ignore\0" Required_argument "\xfe"
74 "all\0" No_argument "\xff"
75 , &ignore
76 );
77#endif
78 if (!GetProcessAffinityMask(GetCurrentProcess(), &process_affinity,
79 &system_affinity)) {
80 process_affinity = system_affinity = 0;
81 }
82
83#if ENABLE_LONG_OPTS
84 if (opts & (1 << 1)) {
85 for (count = 0; system_affinity; system_affinity >>= 1) {
86 count += system_affinity & 1;
87 }
88 } else
89#endif
90 {
91 for (count = 0; process_affinity; process_affinity >>= 1) {
92 count += process_affinity & 1;
93 }
94 }
95#endif /* ENABLE_PLATFORM_MINGW32 */
66 96
67 IF_LONG_OPTS(count -= ignore;) 97 IF_LONG_OPTS(count -= ignore;)
68 if (count <= 0) 98 if (count <= 0)