bug-recutils
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[bug-recutils] euidaccess: port to native Windows


From: Bruno Haible
Subject: [bug-recutils] euidaccess: port to native Windows
Date: Tue, 20 Mar 2018 08:41:25 +0100
User-agent: KMail/5.1.3 (Linux/4.4.0-116-generic; KDE/5.18.0; x86_64; ; )

recutils-1.7.90, when compiled on mingw, produces this build error:

libtool: link: i686-w64-mingw32-gcc -g -O2 -o .libs/recinf.exe recutl.o 
recinf.o  -L/usr/local/mingw32/lib ../lib/.libs/librecutils.a 
../src/.libs/librec.a -lintl
../lib/.libs/librecutils.a(euidaccess.o): In function `euidaccess':
/home/bruno/recutils-1.7.90/build-mingw32/lib/../../lib/euidaccess.c:89: 
undefined reference to `getuid'
/home/bruno/recutils-1.7.90/build-mingw32/lib/../../lib/euidaccess.c:90: 
undefined reference to `getgid'
/home/bruno/recutils-1.7.90/build-mingw32/lib/../../lib/euidaccess.c:91: 
undefined reference to `geteuid'
/home/bruno/recutils-1.7.90/build-mingw32/lib/../../lib/euidaccess.c:92: 
undefined reference to `getegid'
collect2: error: ld returned 1 exit status
make[1]: *** [Makefile:1771: recinf.exe] Error 1

The cause is the 'euidaccess' module from gnulib. The documentation in
doc/glibc-functions/euidaccess.texi makes it sound like this module
works on mingw and MSVC. This patch fixes it.


2018-03-20  Bruno Haible  <address@hidden>

        euidaccess: Port to native Windows.
        * lib/euidaccess.c (euidaccess): On native Windows, just use _access().
        * posix-modules (exclude_for_mingw): Remove 'euidaccess'.

diff --git a/lib/euidaccess.c b/lib/euidaccess.c
index aee6935..4f512f5 100644
--- a/lib/euidaccess.c
+++ b/lib/euidaccess.c
@@ -29,8 +29,11 @@
 #include <sys/types.h>
 #include <sys/stat.h>
 #include <unistd.h>
-
-#include "root-uid.h"
+#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
+# include <io.h>
+#else
+# include "root-uid.h"
+#endif
 
 #if HAVE_LIBGEN_H
 # include <libgen.h>
@@ -84,7 +87,9 @@ euidaccess (const char *file, int mode)
   return accessx (file, mode, ACC_SELF);
 #elif HAVE_EACCESS                      /* FreeBSD */
   return eaccess (file, mode);
-#else       /* Mac OS X, NetBSD, OpenBSD, HP-UX, Solaris, Cygwin, mingw, BeOS 
*/
+#elif (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__  /* mingw 
*/
+  return _access (file, mode);
+#else              /* Mac OS X, NetBSD, OpenBSD, HP-UX, Solaris, Cygwin, BeOS 
*/
 
   uid_t uid = getuid ();
   gid_t gid = getgid ();
diff --git a/posix-modules b/posix-modules
index 5d16d26..9315e75 100755
--- a/posix-modules
+++ b/posix-modules
@@ -227,7 +227,7 @@ exclude_for_mingw=
 # <grp.h> does not exist.
 exclude_for_mingw="$exclude_for_mingw pt_chown grantpt posix_openpt-tests 
posix_openpt"
 # The functions getuid, getgid, geteuid, getegid don't exist.
-exclude_for_mingw="$exclude_for_mingw euidaccess faccessat"
+exclude_for_mingw="$exclude_for_mingw faccessat"
 exclude_for_mingw="$exclude_for_mingw fchownat-tests fchownat"
 
 # Excludes for MSVC.




reply via email to

[Prev in Thread] Current Thread [Next in Thread]