summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBruno Haible <bruno@clisp.org>2020-05-30 11:04:02 +0200
committerBruno Haible <bruno@clisp.org>2020-05-30 11:04:02 +0200
commit57f80070ccd8461a224cc84b255844539ab72a8d (patch)
tree2f22eed44e3690bdaa660c6b1fe7322ef6063c69
parent4bc0be55d618e5b276f12f3a9cf8ef37ed0529f5 (diff)
downloadgnulib-57f80070ccd8461a224cc84b255844539ab72a8d.tar.gz
Don't assume that UNICODE is not defined.
Many Windows API functions are defined differently (redirecting to a function with suffix 'W') if the application defines the macro UNICODE than by default (redirecting to a function with suffix 'A'). * lib/clean-temp.c (OSVERSIONINFO, GetVersionEx): Redirect to the variant with suffix 'A'. * lib/dirent-private.h (WIN32_FIND_DATA): Likewise. * lib/gc-gnulib.c (CryptAcquireContext): Likewise. * lib/getaddrinfo.c (GetModuleHandle): Likewise. * lib/getlogin.c (GetUserName): Likewise. * lib/getlogin_r.c (GetUserName): Likewise. * lib/gettimeofday.c (LoadLibrary): Likewise. * lib/isatty.c (LoadLibrary, QueryFullProcessImageName): Likewise. * lib/link.c (GetModuleHandle, CreateHardLink): Likewise. * lib/localename.c (GetLocaleInfo, EnumSystemLocales): Likewise. * lib/mountlist.c (GetDriveType): Likewise. * lib/nonblocking.c (GetNamedPipeHandleState): Likewise. * lib/opendir.c (WIN32_FIND_DATA, GetFullPathName, FindFirstFile): Likewise. * lib/physmem.c (GetModuleHandle): Likewise. * lib/poll.c (GetModuleHandle, PeekConsoleInput, CreateEvent, PeekMessage, DispatchMessage): Likewise. * lib/progreloc.c (GetModuleFileName): Likewise. * lib/putenv.c (SetEnvironmentVariable): Likewise. * lib/read.c (GetNamedPipeHandleState): Likewise. * lib/readdir.c (FindNextFile): Likewise. * lib/relocatable.c (GetModuleFileName): Likewise. * lib/rename.c (MoveFileEx): Likewise. * lib/rewinddir.c (FindFirstFile): Likewise. * lib/select.c (GetModuleHandle, PeekConsoleInput, CreateEvent, PeekMessage, DispatchMessage): Likewise. * lib/sethostname.c (GetComputerNameEx, SetComputerNameEx): Likewise. * lib/socket.c (WSASocket): Likewise. * lib/stat-w32.c (LoadLibrary, GetFinalPathNameByHandle): Likewise. * lib/stat.c (WIN32_FIND_DATA, CreateFile, FindFirstFile): Likewise. * lib/stdio-read.c (GetNamedPipeHandleState): Likewise. * lib/stdio-write.c (GetNamedPipeHandleState): Likewise. * lib/tmpdir.c (GetTempPath): Likewise. * lib/tmpfile.c (OSVERSIONINFO, GetVersionEx, GetTempPath): Likewise. * lib/uname.c (OSVERSIONINFO, GetVersionEx): Likewise. * lib/utime.c (CreateFile, GetFileAttributes): Likewise. * lib/windows-cond.c (CreateEvent): Likewise. * lib/windows-rwlock.c (CreateEvent): Likewise. * lib/windows-timedmutex.c (CreateEvent): Likewise. * lib/windows-timedrecmutex.c (CreateEvent): Likewise. * lib/windows-timedrwlock.c (CreateEvent): Likewise. * lib/write.c (GetNamedPipeHandleState): Likewise.
-rw-r--r--ChangeLog50
-rw-r--r--lib/clean-temp.c8
-rw-r--r--lib/dirent-private.h4
-rw-r--r--lib/gc-gnulib.c6
-rw-r--r--lib/getaddrinfo.c4
-rw-r--r--lib/getlogin.c3
-rw-r--r--lib/getlogin_r.c3
-rw-r--r--lib/gettimeofday.c4
-rw-r--r--lib/isatty.c6
-rw-r--r--lib/link.c6
-rw-r--r--lib/localename.c5
-rw-r--r--lib/mountlist.c3
-rw-r--r--lib/nonblocking.c4
-rw-r--r--lib/opendir.c10
-rw-r--r--lib/physmem.c4
-rw-r--r--lib/poll.c12
-rw-r--r--lib/progreloc.c6
-rw-r--r--lib/putenv.c6
-rw-r--r--lib/read.c4
-rw-r--r--lib/readdir.c4
-rw-r--r--lib/relocatable.c6
-rw-r--r--lib/rename.c4
-rw-r--r--lib/rewinddir.c4
-rw-r--r--lib/select.c12
-rw-r--r--lib/sethostname.c13
-rw-r--r--lib/socket.c4
-rw-r--r--lib/stat-w32.c6
-rw-r--r--lib/stat.c7
-rw-r--r--lib/stdio-read.c4
-rw-r--r--lib/stdio-write.c4
-rw-r--r--lib/tmpdir.c6
-rw-r--r--lib/tmpfile.c8
-rw-r--r--lib/uname.c46
-rw-r--r--lib/utime.c6
-rw-r--r--lib/windows-cond.c4
-rw-r--r--lib/windows-rwlock.c4
-rw-r--r--lib/windows-timedmutex.c4
-rw-r--r--lib/windows-timedrecmutex.c4
-rw-r--r--lib/windows-timedrwlock.c4
-rw-r--r--lib/write.c4
40 files changed, 279 insertions, 27 deletions
diff --git a/ChangeLog b/ChangeLog
index 33b61863aa..bc21cf70b7 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,55 @@
2020-05-30 Bruno Haible <bruno@clisp.org>
+ Don't assume that UNICODE is not defined.
+ Many Windows API functions are defined differently (redirecting to a
+ function with suffix 'W') if the application defines the macro UNICODE
+ than by default (redirecting to a function with suffix 'A').
+ * lib/clean-temp.c (OSVERSIONINFO, GetVersionEx): Redirect to the
+ variant with suffix 'A'.
+ * lib/dirent-private.h (WIN32_FIND_DATA): Likewise.
+ * lib/gc-gnulib.c (CryptAcquireContext): Likewise.
+ * lib/getaddrinfo.c (GetModuleHandle): Likewise.
+ * lib/getlogin.c (GetUserName): Likewise.
+ * lib/getlogin_r.c (GetUserName): Likewise.
+ * lib/gettimeofday.c (LoadLibrary): Likewise.
+ * lib/isatty.c (LoadLibrary, QueryFullProcessImageName): Likewise.
+ * lib/link.c (GetModuleHandle, CreateHardLink): Likewise.
+ * lib/localename.c (GetLocaleInfo, EnumSystemLocales): Likewise.
+ * lib/mountlist.c (GetDriveType): Likewise.
+ * lib/nonblocking.c (GetNamedPipeHandleState): Likewise.
+ * lib/opendir.c (WIN32_FIND_DATA, GetFullPathName, FindFirstFile):
+ Likewise.
+ * lib/physmem.c (GetModuleHandle): Likewise.
+ * lib/poll.c (GetModuleHandle, PeekConsoleInput, CreateEvent,
+ PeekMessage, DispatchMessage): Likewise.
+ * lib/progreloc.c (GetModuleFileName): Likewise.
+ * lib/putenv.c (SetEnvironmentVariable): Likewise.
+ * lib/read.c (GetNamedPipeHandleState): Likewise.
+ * lib/readdir.c (FindNextFile): Likewise.
+ * lib/relocatable.c (GetModuleFileName): Likewise.
+ * lib/rename.c (MoveFileEx): Likewise.
+ * lib/rewinddir.c (FindFirstFile): Likewise.
+ * lib/select.c (GetModuleHandle, PeekConsoleInput, CreateEvent,
+ PeekMessage, DispatchMessage): Likewise.
+ * lib/sethostname.c (GetComputerNameEx, SetComputerNameEx): Likewise.
+ * lib/socket.c (WSASocket): Likewise.
+ * lib/stat-w32.c (LoadLibrary, GetFinalPathNameByHandle): Likewise.
+ * lib/stat.c (WIN32_FIND_DATA, CreateFile, FindFirstFile): Likewise.
+ * lib/stdio-read.c (GetNamedPipeHandleState): Likewise.
+ * lib/stdio-write.c (GetNamedPipeHandleState): Likewise.
+ * lib/tmpdir.c (GetTempPath): Likewise.
+ * lib/tmpfile.c (OSVERSIONINFO, GetVersionEx, GetTempPath): Likewise.
+ * lib/uname.c (OSVERSIONINFO, GetVersionEx): Likewise.
+ * lib/utime.c (CreateFile, GetFileAttributes): Likewise.
+ * lib/windows-cond.c (CreateEvent): Likewise.
+ * lib/windows-rwlock.c (CreateEvent): Likewise.
+ * lib/windows-timedmutex.c (CreateEvent): Likewise.
+ * lib/windows-timedrecmutex.c (CreateEvent): Likewise.
+ * lib/windows-timedrwlock.c (CreateEvent): Likewise.
+ * lib/write.c (GetNamedPipeHandleState): Likewise.
+
+2020-05-30 Bruno Haible <bruno@clisp.org>
+
physmem: Fix compilation errors on MSVC.
* lib/physmem.c (PFN_MS_EX): Use BOOL, not WINBOOL.
* modules/physmem (Depends-on): Add unistd.
diff --git a/lib/clean-temp.c b/lib/clean-temp.c
index 8d3cbd9f53..c57d658171 100644
--- a/lib/clean-temp.c
+++ b/lib/clean-temp.c
@@ -66,6 +66,14 @@
# define PATH_MAX 1024
#endif
+#if defined _WIN32 && ! defined __CYGWIN__
+/* Don't assume that UNICODE is not defined. */
+# undef OSVERSIONINFO
+# define OSVERSIONINFO OSVERSIONINFOA
+# undef GetVersionEx
+# define GetVersionEx GetVersionExA
+#endif
+
/* The use of 'volatile' in the types below (and ISO C 99 section 5.1.2.3.(5))
ensure that while constructing or modifying the data structures, the field
diff --git a/lib/dirent-private.h b/lib/dirent-private.h
index 4b4eba4e62..a3c684439f 100644
--- a/lib/dirent-private.h
+++ b/lib/dirent-private.h
@@ -20,6 +20,10 @@
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
+/* Don't assume that UNICODE is not defined. */
+#undef WIN32_FIND_DATA
+#define WIN32_FIND_DATA WIN32_FIND_DATAA
+
struct gl_directory
{
/* Status, or error code to produce in next readdir() call.
diff --git a/lib/gc-gnulib.c b/lib/gc-gnulib.c
index 8e9b88f075..84f42e43f8 100644
--- a/lib/gc-gnulib.c
+++ b/lib/gc-gnulib.c
@@ -89,6 +89,12 @@ HCRYPTPROV g_hProv = 0;
# endif
#endif
+#if defined _WIN32 && ! defined __CYGWIN__
+/* Don't assume that UNICODE is not defined. */
+# undef CryptAcquireContext
+# define CryptAcquireContext CryptAcquireContextA
+#endif
+
Gc_rc
gc_init (void)
{
diff --git a/lib/getaddrinfo.c b/lib/getaddrinfo.c
index 1db9be8698..8d2c01c996 100644
--- a/lib/getaddrinfo.c
+++ b/lib/getaddrinfo.c
@@ -86,6 +86,10 @@ freeaddrinfo (struct addrinfo *ai)
# ifdef WINDOWS_NATIVE
+/* Don't assume that UNICODE is not defined. */
+# undef GetModuleHandle
+# define GetModuleHandle GetModuleHandleA
+
# if !(_WIN32_WINNT >= _WIN32_WINNT_WINXP)
/* Avoid warnings from gcc -Wcast-function-type. */
diff --git a/lib/getlogin.c b/lib/getlogin.c
index 5863feb77c..af93664278 100644
--- a/lib/getlogin.c
+++ b/lib/getlogin.c
@@ -25,6 +25,9 @@
#if defined _WIN32 && ! defined __CYGWIN__
# define WIN32_LEAN_AND_MEAN
# include <windows.h>
+/* Don't assume that UNICODE is not defined. */
+# undef GetUserName
+# define GetUserName GetUserNameA
#endif
char *
diff --git a/lib/getlogin_r.c b/lib/getlogin_r.c
index 598a6e4708..2506b1b5ff 100644
--- a/lib/getlogin_r.c
+++ b/lib/getlogin_r.c
@@ -30,6 +30,9 @@
#if defined _WIN32 && ! defined __CYGWIN__
# define WIN32_LEAN_AND_MEAN
# include <windows.h>
+/* Don't assume that UNICODE is not defined. */
+# undef GetUserName
+# define GetUserName GetUserNameA
#else
# if !HAVE_DECL_GETLOGIN
extern char *getlogin (void);
diff --git a/lib/gettimeofday.c b/lib/gettimeofday.c
index 93914ba920..305ab984e0 100644
--- a/lib/gettimeofday.c
+++ b/lib/gettimeofday.c
@@ -33,6 +33,10 @@
#ifdef WINDOWS_NATIVE
+/* Don't assume that UNICODE is not defined. */
+# undef LoadLibrary
+# define LoadLibrary LoadLibraryA
+
# if !(_WIN32_WINNT >= _WIN32_WINNT_WIN8)
/* Avoid warnings from gcc -Wcast-function-type. */
diff --git a/lib/isatty.c b/lib/isatty.c
index 4c5b8e378f..7c278ec097 100644
--- a/lib/isatty.c
+++ b/lib/isatty.c
@@ -39,6 +39,12 @@
# include <io.h>
#endif
+/* Don't assume that UNICODE is not defined. */
+#undef LoadLibrary
+#define LoadLibrary LoadLibraryA
+#undef QueryFullProcessImageName
+#define QueryFullProcessImageName QueryFullProcessImageNameA
+
#if !(_WIN32_WINNT >= _WIN32_WINNT_VISTA)
/* Avoid warnings from gcc -Wcast-function-type. */
diff --git a/lib/link.c b/lib/link.c
index 8680e3e985..797cdf8b9b 100644
--- a/lib/link.c
+++ b/lib/link.c
@@ -30,6 +30,12 @@
# define WIN32_LEAN_AND_MEAN
# include <windows.h>
+/* Don't assume that UNICODE is not defined. */
+# undef GetModuleHandle
+# define GetModuleHandle GetModuleHandleA
+# undef CreateHardLink
+# define CreateHardLink CreateHardLinkA
+
# if !(_WIN32_WINNT >= _WIN32_WINNT_WINXP)
/* Avoid warnings from gcc -Wcast-function-type. */
diff --git a/lib/localename.c b/lib/localename.c
index 4046a0bb61..dc60b07c56 100644
--- a/lib/localename.c
+++ b/lib/localename.c
@@ -1150,6 +1150,11 @@ extern char * getlocalename_l(int, locale_t);
# ifndef LOCALE_NAME_MAX_LENGTH
# define LOCALE_NAME_MAX_LENGTH 85
# endif
+/* Don't assume that UNICODE is not defined. */
+# undef GetLocaleInfo
+# define GetLocaleInfo GetLocaleInfoA
+# undef EnumSystemLocales
+# define EnumSystemLocales EnumSystemLocalesA
#endif
/* We want to use the system's setlocale() function here, not the gnulib
diff --git a/lib/mountlist.c b/lib/mountlist.c
index 9cf78c82e0..ca1be63f21 100644
--- a/lib/mountlist.c
+++ b/lib/mountlist.c
@@ -195,6 +195,9 @@
#ifdef __CYGWIN__
# include <windows.h>
+/* Don't assume that UNICODE is not defined. */
+# undef GetDriveType
+# define GetDriveType GetDriveTypeA
# define ME_REMOTE me_remote
/* All cygwin mount points include ':' or start with '//'; so it
requires a native Windows call to determine remote disks. */
diff --git a/lib/nonblocking.c b/lib/nonblocking.c
index b354e74cef..0c4e5f8ee0 100644
--- a/lib/nonblocking.c
+++ b/lib/nonblocking.c
@@ -38,6 +38,10 @@
# include <io.h>
# endif
+/* Don't assume that UNICODE is not defined. */
+# undef GetNamedPipeHandleState
+# define GetNamedPipeHandleState GetNamedPipeHandleStateA
+
int
get_nonblocking_flag (int desc)
{
diff --git a/lib/opendir.c b/lib/opendir.c
index 162ae4a03e..500fa44f61 100644
--- a/lib/opendir.c
+++ b/lib/opendir.c
@@ -45,6 +45,16 @@
# include <fcntl.h>
#endif
+#if defined _WIN32 && ! defined __CYGWIN__
+/* Don't assume that UNICODE is not defined. */
+# undef WIN32_FIND_DATA
+# define WIN32_FIND_DATA WIN32_FIND_DATAA
+# undef GetFullPathName
+# define GetFullPathName GetFullPathNameA
+# undef FindFirstFile
+# define FindFirstFile FindFirstFileA
+#endif
+
DIR *
opendir (const char *dir_name)
{
diff --git a/lib/physmem.c b/lib/physmem.c
index 6f0c5ef84a..db1bb07d6b 100644
--- a/lib/physmem.c
+++ b/lib/physmem.c
@@ -63,6 +63,10 @@
# define WIN32_LEAN_AND_MEAN
# include <windows.h>
+/* Don't assume that UNICODE is not defined. */
+# undef GetModuleHandle
+# define GetModuleHandle GetModuleHandleA
+
/* Avoid warnings from gcc -Wcast-function-type. */
# define GetProcAddress \
(void *) GetProcAddress
diff --git a/lib/poll.c b/lib/poll.c
index 53bbafee2f..61dd639eea 100644
--- a/lib/poll.c
+++ b/lib/poll.c
@@ -76,6 +76,18 @@
#ifdef WINDOWS_NATIVE
+/* Don't assume that UNICODE is not defined. */
+# undef GetModuleHandle
+# define GetModuleHandle GetModuleHandleA
+# undef PeekConsoleInput
+# define PeekConsoleInput PeekConsoleInputA
+# undef CreateEvent
+# define CreateEvent CreateEventA
+# undef PeekMessage
+# define PeekMessage PeekMessageA
+# undef DispatchMessage
+# define DispatchMessage DispatchMessageA
+
/* Do *not* use the function WSAPoll
<https://docs.microsoft.com/en-us/windows/desktop/api/winsock2/nf-winsock2-wsapoll>
because there is a bug named “Windows 8 Bugs 309411 - WSAPoll does not
diff --git a/lib/progreloc.c b/lib/progreloc.c
index de00bf6333..ab0007ca06 100644
--- a/lib/progreloc.c
+++ b/lib/progreloc.c
@@ -80,6 +80,12 @@
one. */
extern char * canonicalize_file_name (const char *name);
+#if defined WINDOWS_NATIVE
+/* Don't assume that UNICODE is not defined. */
+# undef GetModuleFileName
+# define GetModuleFileName GetModuleFileNameA
+#endif
+
/* Pathname support.
ISSLASH(C) tests whether C is a directory separator character.
IS_FILE_NAME_WITH_DIR(P) tests whether P contains a directory specification.
diff --git a/lib/putenv.c b/lib/putenv.c
index 9e862e63d3..ce0c752aab 100644
--- a/lib/putenv.c
+++ b/lib/putenv.c
@@ -58,6 +58,12 @@ __libc_lock_define_initialized (static, envlock)
# define UNLOCK
#endif
+#if defined _WIN32 && ! defined __CYGWIN__
+/* Don't assume that UNICODE is not defined. */
+# undef SetEnvironmentVariable
+# define SetEnvironmentVariable SetEnvironmentVariableA
+#endif
+
static int
_unsetenv (const char *name)
{
diff --git a/lib/read.c b/lib/read.c
index 407738b90a..90d1053052 100644
--- a/lib/read.c
+++ b/lib/read.c
@@ -37,6 +37,10 @@
# include <io.h>
# endif
+/* Don't assume that UNICODE is not defined. */
+# undef GetNamedPipeHandleState
+# define GetNamedPipeHandleState GetNamedPipeHandleStateA
+
# undef read
# if HAVE_MSVC_INVALID_PARAMETER_HANDLER
diff --git a/lib/readdir.c b/lib/readdir.c
index 1a02ce4173..91a351650d 100644
--- a/lib/readdir.c
+++ b/lib/readdir.c
@@ -24,6 +24,10 @@
#include "dirent-private.h"
+/* Don't assume that UNICODE is not defined. */
+#undef FindNextFile
+#define FindNextFile FindNextFileA
+
struct dirent *
readdir (DIR *dirp)
{
diff --git a/lib/relocatable.c b/lib/relocatable.c
index e4b867b9e9..04fb22e0f8 100644
--- a/lib/relocatable.c
+++ b/lib/relocatable.c
@@ -65,6 +65,12 @@
# include <libintl.h>
#endif
+#if defined _WIN32 && !defined __CYGWIN__
+/* Don't assume that UNICODE is not defined. */
+# undef GetModuleFileName
+# define GetModuleFileName GetModuleFileNameA
+#endif
+
/* Faked cheap 'bool'. */
#undef bool
#undef false
diff --git a/lib/rename.c b/lib/rename.c
index 09881e8cfd..108dc40c4f 100644
--- a/lib/rename.c
+++ b/lib/rename.c
@@ -39,6 +39,10 @@
# include "dirname.h"
+/* Don't assume that UNICODE is not defined. */
+# undef MoveFileEx
+# define MoveFileEx MoveFileExA
+
/* Rename the file SRC to DST. This replacement is necessary on
Windows, on which the system rename function will not replace
an existing DST. */
diff --git a/lib/rewinddir.c b/lib/rewinddir.c
index d8ae71405a..a18943d7d6 100644
--- a/lib/rewinddir.c
+++ b/lib/rewinddir.c
@@ -23,6 +23,10 @@
#include "dirent-private.h"
+/* Don't assume that UNICODE is not defined. */
+#undef FindFirstFile
+#define FindFirstFile FindFirstFileA
+
void
rewinddir (DIR *dirp)
{
diff --git a/lib/select.c b/lib/select.c
index 4467eae84b..b2234ea334 100644
--- a/lib/select.c
+++ b/lib/select.c
@@ -47,6 +47,18 @@
#undef select
+/* Don't assume that UNICODE is not defined. */
+#undef GetModuleHandle
+#define GetModuleHandle GetModuleHandleA
+#undef PeekConsoleInput
+#define PeekConsoleInput PeekConsoleInputA
+#undef CreateEvent
+#define CreateEvent CreateEventA
+#undef PeekMessage
+#define PeekMessage PeekMessageA
+#undef DispatchMessage
+#define DispatchMessage DispatchMessageA
+
/* Avoid warnings from gcc -Wcast-function-type. */
#define GetProcAddress \
(void *) GetProcAddress
diff --git a/lib/sethostname.c b/lib/sethostname.c
index 96318fb801..52064df46a 100644
--- a/lib/sethostname.c
+++ b/lib/sethostname.c
@@ -103,13 +103,12 @@ sethostname (const char *name, size_t len)
# include <string.h>
# include <windows.h>
-/* The mingw header files don't define GetComputerNameEx, SetComputerNameEx. */
-# ifndef GetComputerNameEx
-# define GetComputerNameEx GetComputerNameExA
-# endif
-# ifndef SetComputerNameEx
-# define SetComputerNameEx SetComputerNameExA
-# endif
+
+/* Don't assume that UNICODE is not defined. */
+# undef GetComputerNameEx
+# define GetComputerNameEx GetComputerNameExA
+# undef SetComputerNameEx
+# define SetComputerNameEx SetComputerNameExA
/* Set up to LEN chars of NAME as system hostname.
Return 0 if ok, set errno and return -1 on error. */
diff --git a/lib/socket.c b/lib/socket.c
index 67c6b1e877..ebf777f25f 100644
--- a/lib/socket.c
+++ b/lib/socket.c
@@ -28,6 +28,10 @@
#include "sockets.h"
+/* Don't assume that UNICODE is not defined. */
+#undef WSASocket
+#define WSASocket WSASocketA
+
int
rpl_socket (int domain, int type, int protocol)
{
diff --git a/lib/stat-w32.c b/lib/stat-w32.c
index cca12dd9cd..19bdfaa379 100644
--- a/lib/stat-w32.c
+++ b/lib/stat-w32.c
@@ -40,6 +40,12 @@
#include "pathmax.h"
#include "verify.h"
+/* Don't assume that UNICODE is not defined. */
+#undef LoadLibrary
+#define LoadLibrary LoadLibraryA
+#undef GetFinalPathNameByHandle
+#define GetFinalPathNameByHandle GetFinalPathNameByHandleA
+
#if !(_WIN32_WINNT >= _WIN32_WINNT_VISTA)
/* Avoid warnings from gcc -Wcast-function-type. */
diff --git a/lib/stat.c b/lib/stat.c
index e074e6a0a0..9d3965d3ce 100644
--- a/lib/stat.c
+++ b/lib/stat.c
@@ -65,6 +65,13 @@ orig_stat (const char *filename, struct stat *buf)
# define WIN32_LEAN_AND_MEAN
# include <windows.h>
# include "stat-w32.h"
+/* Don't assume that UNICODE is not defined. */
+# undef WIN32_FIND_DATA
+# define WIN32_FIND_DATA WIN32_FIND_DATAA
+# undef CreateFile
+# define CreateFile CreateFileA
+# undef FindFirstFile
+# define FindFirstFile FindFirstFileA
#endif
#ifdef WINDOWS_NATIVE
diff --git a/lib/stdio-read.c b/lib/stdio-read.c
index 874c9b1134..e63a327691 100644
--- a/lib/stdio-read.c
+++ b/lib/stdio-read.c
@@ -43,6 +43,10 @@
# include <io.h>
# endif
+/* Don't assume that UNICODE is not defined. */
+# undef GetNamedPipeHandleState
+# define GetNamedPipeHandleState GetNamedPipeHandleStateA
+
# define CALL_WITH_ERRNO_FIX(RETTYPE, EXPRESSION, FAILED) \
if (ferror (stream)) \
return (EXPRESSION); \
diff --git a/lib/stdio-write.c b/lib/stdio-write.c
index 41bc74c6f9..778e7cf16d 100644
--- a/lib/stdio-write.c
+++ b/lib/stdio-write.c
@@ -45,6 +45,10 @@
# include <io.h>
# endif
+/* Don't assume that UNICODE is not defined. */
+# undef GetNamedPipeHandleState
+# define GetNamedPipeHandleState GetNamedPipeHandleStateA
+
# if GNULIB_NONBLOCKING
# define CLEAR_ERRNO \
errno = 0;
diff --git a/lib/tmpdir.c b/lib/tmpdir.c
index 74ae359262..28ff99f58a 100644
--- a/lib/tmpdir.c
+++ b/lib/tmpdir.c
@@ -49,6 +49,12 @@
#include "pathmax.h"
+#if defined _WIN32 && ! defined __CYGWIN__
+/* Don't assume that UNICODE is not defined. */
+# undef GetTempPath
+# define GetTempPath GetTempPathA
+#endif
+
#if _LIBC
# define struct_stat64 struct stat64
#else
diff --git a/lib/tmpfile.c b/lib/tmpfile.c
index 99d6752bb1..667c0f234e 100644
--- a/lib/tmpfile.c
+++ b/lib/tmpfile.c
@@ -52,6 +52,14 @@
#if defined _WIN32 && ! defined __CYGWIN__
/* A native Windows platforms. */
+/* Don't assume that UNICODE is not defined. */
+# undef OSVERSIONINFO
+# define OSVERSIONINFO OSVERSIONINFOA
+# undef GetVersionEx
+# define GetVersionEx GetVersionExA
+# undef GetTempPath
+# define GetTempPath GetTempPathA
+
/* On Windows, opening a file with _O_TEMPORARY has the effect of passing
the FILE_FLAG_DELETE_ON_CLOSE flag to CreateFile(), which has the effect
of deleting the file when it is closed - even when the program crashes.
diff --git a/lib/uname.c b/lib/uname.c
index d4778a8e3d..cb6dd28ea0 100644
--- a/lib/uname.c
+++ b/lib/uname.c
@@ -22,29 +22,35 @@
/* This file provides an implementation only for the native Windows API. */
#if defined _WIN32 && ! defined __CYGWIN__
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include <windows.h>
+# include <stdio.h>
+# include <stdlib.h>
+# include <string.h>
+# include <unistd.h>
+# include <windows.h>
/* Mingw headers don't have all the platform codes. */
-#ifndef VER_PLATFORM_WIN32_CE
-# define VER_PLATFORM_WIN32_CE 3
-#endif
+# ifndef VER_PLATFORM_WIN32_CE
+# define VER_PLATFORM_WIN32_CE 3
+# endif
/* Some headers don't have all the processor architecture codes. */
-#ifndef PROCESSOR_ARCHITECTURE_AMD64
-# define PROCESSOR_ARCHITECTURE_AMD64 9
-#endif
-#ifndef PROCESSOR_ARCHITECTURE_IA32_ON_WIN64
-# define PROCESSOR_ARCHITECTURE_IA32_ON_WIN64 10
-#endif
+# ifndef PROCESSOR_ARCHITECTURE_AMD64
+# define PROCESSOR_ARCHITECTURE_AMD64 9
+# endif
+# ifndef PROCESSOR_ARCHITECTURE_IA32_ON_WIN64
+# define PROCESSOR_ARCHITECTURE_IA32_ON_WIN64 10
+# endif
/* Mingw headers don't have the latest processor codes. */
-#ifndef PROCESSOR_AMD_X8664
-# define PROCESSOR_AMD_X8664 8664
-#endif
+# ifndef PROCESSOR_AMD_X8664
+# define PROCESSOR_AMD_X8664 8664
+# endif
+
+/* Don't assume that UNICODE is not defined. */
+# undef OSVERSIONINFO
+# define OSVERSIONINFO OSVERSIONINFOA
+# undef GetVersionEx
+# define GetVersionEx GetVersionExA
int
uname (struct utsname *buf)
@@ -108,7 +114,7 @@ uname (struct utsname *buf)
super_version = "";
/* Fill in sysname. */
-#ifdef __MINGW32__
+# ifdef __MINGW32__
/* Returns a string compatible with the MSYS uname.exe program,
so that no further changes are needed to GNU config.guess.
For example,
@@ -117,9 +123,9 @@ uname (struct utsname *buf)
sprintf (buf->sysname, "MINGW32_%s-%u.%u", super_version,
(unsigned int) version.dwMajorVersion,
(unsigned int) version.dwMinorVersion);
-#else
+# else
sprintf (buf->sysname, "Windows%s", super_version);
-#endif
+# endif
/* Fill in release, version. */
/* The MSYS uname.exe programs uses strings from a modified Cygwin runtime:
diff --git a/lib/utime.c b/lib/utime.c
index 77968dca7f..c35eb169e6 100644
--- a/lib/utime.c
+++ b/lib/utime.c
@@ -29,6 +29,12 @@
# include "filename.h"
# include "malloca.h"
+/* Don't assume that UNICODE is not defined. */
+# undef CreateFile
+# define CreateFile CreateFileA
+# undef GetFileAttributes
+# define GetFileAttributes GetFileAttributesA
+
int
_gl_utimens_windows (const char *name, struct timespec ts[2])
{
diff --git a/lib/windows-cond.c b/lib/windows-cond.c
index 44586a6d2c..45e9b836ca 100644
--- a/lib/windows-cond.c
+++ b/lib/windows-cond.c
@@ -27,6 +27,10 @@
#include <stdlib.h>
#include <sys/time.h>
+/* Don't assume that UNICODE is not defined. */
+#undef CreateEvent
+#define CreateEvent CreateEventA
+
/* In this file, the waitqueues are implemented as linked lists. */
#define glwthread_waitqueue_t glwthread_linked_waitqueue_t
diff --git a/lib/windows-rwlock.c b/lib/windows-rwlock.c
index 85a8552358..6afb45b090 100644
--- a/lib/windows-rwlock.c
+++ b/lib/windows-rwlock.c
@@ -25,6 +25,10 @@
#include <errno.h>
#include <stdlib.h>
+/* Don't assume that UNICODE is not defined. */
+#undef CreateEvent
+#define CreateEvent CreateEventA
+
/* In this file, the waitqueues are implemented as circular arrays. */
#define glwthread_waitqueue_t glwthread_carray_waitqueue_t
diff --git a/lib/windows-timedmutex.c b/lib/windows-timedmutex.c
index e36f4107ba..788fe40fc3 100644
--- a/lib/windows-timedmutex.c
+++ b/lib/windows-timedmutex.c
@@ -26,6 +26,10 @@
#include <stdlib.h>
#include <sys/time.h>
+/* Don't assume that UNICODE is not defined. */
+#undef CreateEvent
+#define CreateEvent CreateEventA
+
int
glwthread_timedmutex_init (glwthread_timedmutex_t *mutex)
{
diff --git a/lib/windows-timedrecmutex.c b/lib/windows-timedrecmutex.c
index 81fcdb66da..d244bfd015 100644
--- a/lib/windows-timedrecmutex.c
+++ b/lib/windows-timedrecmutex.c
@@ -26,6 +26,10 @@
#include <stdlib.h>
#include <sys/time.h>
+/* Don't assume that UNICODE is not defined. */
+#undef CreateEvent
+#define CreateEvent CreateEventA
+
int
glwthread_timedrecmutex_init (glwthread_timedrecmutex_t *mutex)
{
diff --git a/lib/windows-timedrwlock.c b/lib/windows-timedrwlock.c
index 793e8b76b2..42ad7461d2 100644
--- a/lib/windows-timedrwlock.c
+++ b/lib/windows-timedrwlock.c
@@ -26,6 +26,10 @@
#include <stdlib.h>
#include <sys/time.h>
+/* Don't assume that UNICODE is not defined. */
+#undef CreateEvent
+#define CreateEvent CreateEventA
+
/* In this file, the waitqueues are implemented as linked lists. */
#define glwthread_waitqueue_t glwthread_clinked_waitqueue_t
diff --git a/lib/write.c b/lib/write.c
index a3912838cd..581e674b40 100644
--- a/lib/write.c
+++ b/lib/write.c
@@ -43,6 +43,10 @@
# include <io.h>
# endif
+/* Don't assume that UNICODE is not defined. */
+# undef GetNamedPipeHandleState
+# define GetNamedPipeHandleState GetNamedPipeHandleStateA
+
# undef write
# if HAVE_MSVC_INVALID_PARAMETER_HANDLER