From f08042005f3e70e832c6af9d24e75b75e7df242a Mon Sep 17 00:00:00 2001
From: Bruno Haible <bruno@clisp.org>
Date: Mon, 7 Dec 2020 13:50:53 +0100
Subject: [PATCH] Tweak the Windows oldnames workaround.

Reported by Daniel R. Hurtmans <Daniel.Hurtmans@ulb.ac.be> in
<https://lists.gnu.org/archive/html/bug-gnulib/2020-12/msg00073.html>.

* lib/unistd.in.h: On native Windows, include <io.h> and <direct.h>
always.
(getcwd): Use _GL_CXXALIAS_MDA_CAST.
* lib/stdlib.in.h (putenv): Likewise.
---
 ChangeLog       | 10 ++++++++++
 lib/stdlib.in.h |  4 +++-
 lib/unistd.in.h | 15 +++++----------
 3 files changed, 18 insertions(+), 11 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index 5f4ae46a6f..6dfedc47f3 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,13 @@
+2020-12-06  Bruno Haible  <bruno@clisp.org>
+
+	Tweak the Windows oldnames workaround.
+	Reported by Daniel R. Hurtmans <Daniel.Hurtmans@ulb.ac.be> in
+	<https://lists.gnu.org/archive/html/bug-gnulib/2020-12/msg00073.html>.
+	* lib/unistd.in.h: On native Windows, include <io.h> and <direct.h>
+	always.
+	(getcwd): Use _GL_CXXALIAS_MDA_CAST.
+	* lib/stdlib.in.h (putenv): Likewise.
+
 2020-12-06  Paul Eggert  <eggert@cs.ucla.edu>
 
 	doc: fix flat address space discussion
diff --git a/lib/stdlib.in.h b/lib/stdlib.in.h
index c7ec0786fb..a76fbdc3d4 100644
--- a/lib/stdlib.in.h
+++ b/lib/stdlib.in.h
@@ -694,7 +694,9 @@ _GL_CXXALIASWARN (putenv);
 #   undef putenv
 #   define putenv _putenv
 #  endif
-_GL_CXXALIAS_MDA (putenv, int, (char *string));
+/* Need to cast, because on mingw, the parameter is either
+   'const char *string' or 'char *string'.  */
+_GL_CXXALIAS_MDA_CAST (putenv, int, (char *string));
 # else
 _GL_CXXALIAS_SYS (putenv, int, (char *string));
 # endif
diff --git a/lib/unistd.in.h b/lib/unistd.in.h
index c9fb36889a..8a02899f38 100644
--- a/lib/unistd.in.h
+++ b/lib/unistd.in.h
@@ -97,16 +97,9 @@
    <io.h> and/or <direct.h>, not in <unistd.h>.
    They also declare _access(), _chmod(), _close(), _dup(), _dup2(), _isatty(),
    _lseek(), _read(), _unlink(), _write() in <io.h>.  */
-#if ((@GNULIB_CHDIR@ || @GNULIB_GETCWD@ || @GNULIB_RMDIR@ \
-      || defined GNULIB_POSIXCHECK) \
-     && (defined _WIN32 && ! defined __CYGWIN__))
-# include <io.h>     /* mingw32, mingw64 */
-# include <direct.h> /* mingw64, MSVC 9 */
-#elif (@GNULIB_CLOSE@ || @GNULIB_DUP@ || @GNULIB_DUP2@ || @GNULIB_ISATTY@ \
-       || @GNULIB_LSEEK@ || @GNULIB_READ@ || @GNULIB_UNLINK@ || @GNULIB_WRITE@ \
-       || defined GNULIB_POSIXCHECK) \
-      && (defined _WIN32 && ! defined __CYGWIN__)
+#if defined _WIN32 && !defined __CYGWIN__
 # include <io.h>
+# include <direct.h>
 #endif
 
 /* Native Windows platforms declare _execl*, _execv* in <process.h>.  */
@@ -937,7 +930,9 @@ _GL_WARN_ON_USE (getcwd, "getcwd is unportable - "
 #   undef getcwd
 #   define getcwd _getcwd
 #  endif
-_GL_CXXALIAS_MDA (getcwd, char *, (char *buf, size_t size));
+/* Need to cast, because on mingw, the second parameter is either
+   'int size' or 'size_t size'.  */
+_GL_CXXALIAS_MDA_CAST (getcwd, char *, (char *buf, size_t size));
 # else
 _GL_CXXALIAS_SYS_CAST (getcwd, char *, (char *buf, size_t size));
 # endif
-- 
2.39.5