windows: Set UMDF_USING_NTSTATUS globally, include ntstatus.h
authorAndres Freund <andres@anarazel.de>
Thu, 29 Sep 2022 04:59:15 +0000 (21:59 -0700)
committerAndres Freund <andres@anarazel.de>
Thu, 29 Sep 2022 04:59:15 +0000 (21:59 -0700)
We'd like to use precompiled headers on windows to reduce compile times. Right
now we rely on defining UMDF_USING_NTSTATUS before including postgres.h in a few
select places - which doesn't work with precompiled headers.  Instead define
it globally.

When UMDF_USING_NTSTATUS is defined we need to explicitly include ntstatus.h,
winternl.h to get a comparable set of symbols. Right now these includes would
be required in a number of non-platform-specific .c files - to avoid that,
include them in win32_port.h. Based on my measurements that doesn't increase
compile times measurably.

Reviewed-by: Thomas Munro <thomas.munro@gmail.com>
Discussion: https://postgr.es/m/20220927011951.j3h4o7n6bhf7dwau@awork3.anarazel.de

src/include/port/win32_port.h
src/include/port/win32ntdll.h
src/port/open.c
src/port/win32fdatasync.c
src/port/win32ntdll.c
src/port/win32stat.c

index a22867d295ce954a693b4f66be6d933372fcc62f..296905bc6c842357acc1186639179ba162eeb469 100644 (file)
  * significantly.  WIN32_LEAN_AND_MEAN reduces that a bit. It'd be better to
  * remove the include of windows.h (as well as indirect inclusions of it) from
  * such a central place, but until then...
+ *
+ * To be able to include ntstatus.h tell windows.h to not declare NTSTATUS by
+ * temporarily defining UMDF_USING_NTSTATUS, otherwise we'll get warning about
+ * macro redefinitions, as windows.h also defines NTSTATUS (yuck). That in
+ * turn requires including ntstatus.h, winternl.h to get common symbols.
  */
 #define WIN32_LEAN_AND_MEAN
+#define UMDF_USING_NTSTATUS
 
 #include <winsock2.h>
 #include <ws2tcpip.h>
 #include <windows.h>
+#include <ntstatus.h>
+#include <winternl.h>
+
 #undef small
 #include <process.h>
 #include <signal.h>
index 34cebddd542726783e6894c5839ce3c152a09b81..6d13a18b395e426ef26d68d8ebe32de72e5c8b6e 100644 (file)
 #ifndef WIN32NTDLL_H
 #define WIN32NTDLL_H
 
-/*
- * Because this includes NT headers that normally conflict with Win32 headers,
- * any translation unit that includes it should #define UMDF_USING_NTSTATUS
- * before including <windows.h>.
- */
-
 #include <ntstatus.h>
 #include <winternl.h>
 
index 8c09c7c1f772a61e8b99a012477c562f1fa4a543..fd4faf604ea6ec3461bcb13de47a9d28c3631632 100644 (file)
@@ -13,8 +13,6 @@
 
 #ifdef WIN32
 
-#define UMDF_USING_NTSTATUS
-
 #ifndef FRONTEND
 #include "postgres.h"
 #else
index 31d631c6962c5bff7d484dd430fe58fdf85178e7..a5431615ab2524f6705ae01f663321c02cd34ae9 100644 (file)
@@ -11,8 +11,6 @@
  *-------------------------------------------------------------------------
  */
 
-#define UMDF_USING_NTSTATUS
-
 #ifdef FRONTEND
 #include "postgres_fe.h"
 #else
index eb6140775432f4ca1badc2e534d4ed58489b673a..db3e5fa251ff88281d3d614c6f7cd1db1246a629 100644 (file)
@@ -13,8 +13,6 @@
  *-------------------------------------------------------------------------
  */
 
-#define UMDF_USING_NTSTATUS
-
 #include "c.h"
 
 #include "port/win32ntdll.h"
index 26443293d7843038976b7548b4aa62e07e3424de..5f3d0d22ff417ebd4b6d720f573c3e01b0f874b7 100644 (file)
@@ -15,8 +15,6 @@
 
 #ifdef WIN32
 
-#define UMDF_USING_NTSTATUS
-
 #include "c.h"
 #include "port/win32ntdll.h"