Fix file descriptor existence of MinGW.
authorMartin Liska <mliska@suse.cz>
Thu, 8 Aug 2019 07:50:28 +0000 (09:50 +0200)
committerMartin Liska <marxin@gcc.gnu.org>
Thu, 8 Aug 2019 07:50:28 +0000 (07:50 +0000)
2019-08-08  Martin Liska  <mliska@suse.cz>

PR bootstrap/91352
* gcc.c (driver::detect_jobserver): Use is_valid_fd.
* lto-wrapper.c (jobserver_active_p): Likewise.
2019-08-08  Martin Liska  <mliska@suse.cz>

PR bootstrap/91352
* libiberty.h (is_valid_fd): New function.
2019-08-08  Martin Liska  <mliska@suse.cz>

PR bootstrap/91352
* lrealpath.c (is_valid_fd): New function.

From-SVN: r274208

gcc/ChangeLog
gcc/gcc.c
gcc/lto-wrapper.c
include/ChangeLog
include/libiberty.h
libiberty/ChangeLog
libiberty/lrealpath.c

index fd18c4f2bfe25b1b74312143febda47fbc36296a..54f7d974821e0c0a1fc338c81f465fac90750bcf 100644 (file)
@@ -1,3 +1,9 @@
+2019-08-08  Martin Liska  <mliska@suse.cz>
+
+       PR bootstrap/91352
+       * gcc.c (driver::detect_jobserver): Use is_valid_fd.
+       * lto-wrapper.c (jobserver_active_p): Likewise.
+
 2019-08-08  Martin Liska  <mliska@suse.cz>
 
        * cgraphclones.c (set_new_clone_decl_and_node_flags): Drop
index 18a07426290cfa76647c0f6c11cf2f1cf27a6d44..1216cdd505a18152dc1d3eee5f37755a396761f1 100644 (file)
--- a/gcc/gcc.c
+++ b/gcc/gcc.c
@@ -8380,8 +8380,8 @@ driver::detect_jobserver () const
            = (sscanf (n + strlen (needle), "%d,%d", &rfd, &wfd) == 2
               && rfd > 0
               && wfd > 0
-              && fcntl (rfd, F_GETFD) >= 0
-              && fcntl (wfd, F_GETFD) >= 0);
+              && is_valid_fd (rfd)
+              && is_valid_fd (wfd));
 
          /* Drop the jobserver if it's not working now.  */
          if (!jobserver)
index f93ff504e8897bd5327cd856ce9275d5bfc89f59..f1253cdc91ce3c68439193b677d1c97983e08a77 100644 (file)
@@ -1237,8 +1237,8 @@ jobserver_active_p (void)
   return (sscanf (n + strlen (needle), "%d,%d", &rfd, &wfd) == 2
          && rfd > 0
          && wfd > 0
-         && fcntl (rfd, F_GETFD) >= 0
-         && fcntl (wfd, F_GETFD) >= 0);
+         && is_valid_fd (rfd)
+         && is_valid_fd (wfd));
 }
 
 /* Execute gcc. ARGC is the number of arguments. ARGV contains the arguments. */
index a4f3fe5d5cefe3b5b1a43df60288c64133d889ab..83bd789dd2e0444a401410cebec305eb34adcee8 100644 (file)
@@ -1,3 +1,8 @@
+2019-08-08  Martin Liska  <mliska@suse.cz>
+
+       PR bootstrap/91352
+       * libiberty.h (is_valid_fd): New function.
+
 2019-07-18  Eduard-Mihai Burtescu  <eddyb@lyken.rs>
 
        * demangle.h (rust_is_mangled): Move to libiberty/rust-demangle.h.
index 635519e088ae750f5363d667d80947be9997c528..71192a2937728f1e768bed557e4e14728651adde 100644 (file)
@@ -137,6 +137,10 @@ extern const char *unix_lbasename (const char *) ATTRIBUTE_RETURNS_NONNULL ATTRI
 
 extern char *lrealpath (const char *);
 
+/* Return true when FD file descriptor exists.  */
+
+extern int is_valid_fd (int fd);
+
 /* Concatenate an arbitrary number of strings.  You must pass NULL as
    the last argument of this function, to terminate the list of
    strings.  Allocates memory using xmalloc.  */
index c22d49f157a3fab707eec0ca3c279f7ac7974461..95cb1525f2c4c1e7a3ddb73e4c90a96ce753f3e1 100644 (file)
@@ -1,3 +1,8 @@
+2019-08-08  Martin Liska  <mliska@suse.cz>
+
+       PR bootstrap/91352
+       * lrealpath.c (is_valid_fd): New function.
+
 2019-07-24  Martin Liska  <mliska@suse.cz>
 
        PR lto/91228
index 7f66dc2b1bd26c41821d409a95f93e216677923d..ac914a7a4f403b09c90416c8e1fa3c6b52c1b48a 100644 (file)
@@ -49,6 +49,9 @@ components will be simplified.  The returned value will be allocated using
 #ifdef HAVE_STRING_H
 #include <string.h>
 #endif
+#ifdef HAVE_FCNTL_H
+#include <fcntl.h>
+#endif
 
 /* On GNU libc systems the declaration is only visible with _GNU_SOURCE.  */
 #if defined(HAVE_CANONICALIZE_FILE_NAME) \
@@ -155,3 +158,16 @@ lrealpath (const char *filename)
   /* This system is a lost cause, just duplicate the filename.  */
   return strdup (filename);
 }
+
+/* Return true when FD file descriptor exists.  */
+
+int
+is_valid_fd (int fd)
+{
+#if defined(_WIN32)
+  HANDLE h = (HANDLE) _get_osfhandle (fd);
+  return h != (HANDLE) -1;
+#else
+  return fcntl (fd, F_GETFD) >= 0;
+#endif
+}