From fe8e9df2bc219bfa84ca8c04e75bca37ef5fda41 Mon Sep 17 00:00:00 2001
From: Bruno Haible <bruno@clisp.org>
Date: Sun, 18 Oct 2009 11:22:22 +0200
Subject: [PATCH] Implement nproc for mingw.

---
 ChangeLog   |  6 ++++++
 lib/nproc.c | 14 ++++++++++++++
 2 files changed, 20 insertions(+)

diff --git a/ChangeLog b/ChangeLog
index 5a820cd30d..fbd6694e7c 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2009-10-18  Bruno Haible  <bruno@clisp.org>
+
+	Implement nproc for mingw.
+	* lib/nproc.c: Include <windows.h>
+	(num_processors): On native Windows platforms, try GetSystemInfo.
+
 2009-10-18  Bruno Haible  <bruno@clisp.org>
 
 	Implement nproc for IRIX.
diff --git a/lib/nproc.c b/lib/nproc.c
index 04a047cfb4..b5a70b193a 100644
--- a/lib/nproc.c
+++ b/lib/nproc.c
@@ -41,6 +41,11 @@
 # include <sys/sysctl.h>
 #endif
 
+#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
+# define WIN32_LEAN_AND_MEAN
+# include <windows.h>
+#endif
+
 #define ARRAY_SIZE(a) (sizeof (a) / sizeof ((a)[0]))
 
 /* Return the total number of processors.  The result is guaranteed to
@@ -90,5 +95,14 @@ num_processors (void)
   }
 #endif
 
+#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
+  { /* This works on native Windows platforms.  */
+    SYSTEM_INFO system_info;
+    GetSystemInfo (&system_info);
+    if (0 < system_info.dwNumberOfProcessors)
+      return system_info.dwNumberOfProcessors;
+  }
+#endif
+
   return 1;
 }
-- 
2.39.5