[Ada] Vxworks7r2 SR0610 coalesced some macro values
authorDoug Rupp <rupp@adacore.com>
Wed, 10 Jul 2019 09:01:17 +0000 (09:01 +0000)
committerPierre-Marie de Rodat <pmderodat@gcc.gnu.org>
Wed, 10 Jul 2019 09:01:17 +0000 (09:01 +0000)
SR0600 and SR0610 cannot be differentiated by macro testing (arguably an
oversight in header file version.h) so: The case statement testing for
"file not found" is reformulated into an if/else series of statements to
avoid a problem where two cases have identical values in SR0610, but
different values in SR0600.

2019-07-10  Doug Rupp  <rupp@adacore.com>

gcc/ada/

* sysdep.c (__gnat_is_file_not_found_error): Reformulate to also
work for vxworks7r2 SR0610.

From-SVN: r273333

gcc/ada/ChangeLog
gcc/ada/sysdep.c

index e4034e4..2c069ab 100644 (file)
@@ -1,5 +1,10 @@
 2019-07-10  Doug Rupp  <rupp@adacore.com>
 
+       * sysdep.c (__gnat_is_file_not_found_error): Reformulate to also
+       work for vxworks7r2 SR0610.
+
+2019-07-10  Doug Rupp  <rupp@adacore.com>
+
        * env.c (__gnat_environ): Reformulate to also work for
        vxworks7r2 SR0610.
 
index 0fbc606..a5f325d 100644 (file)
@@ -300,7 +300,7 @@ __gnat_set_mode (int handle ATTRIBUTE_UNUSED, int mode ATTRIBUTE_UNUSED)
 }
 
 char *
-__gnat_ttyname (int filedes)
+__gnat_ttyname (int filedes ATTRIBUTE_UNUSED)
 {
 #if defined (__vxworks)
   return "";
@@ -896,30 +896,34 @@ __gnat_get_task_options (void)
 #endif
 
 int
-__gnat_is_file_not_found_error (int errno_val) {
-   switch (errno_val) {
-      case ENOENT:
+__gnat_is_file_not_found_error (int errno_val)
+ {
+    /* WARNING: Do not rewrite this as a switch/case statement.
+     * Some of the "cases" are duplicated in some versions of
+     * Vxworks, notably VxWorks7r2 SR0610.  */
+    if (errno_val == ENOENT)
+      return 1;
 #ifdef __vxworks
-      /* In the case of VxWorks, we also have to take into account various
-       * filesystem-specific variants of this error.
-       */
+    /* In the case of VxWorks, we also have to take into account various
+     * filesystem-specific variants of this error.
+     */
 #if ! defined (VTHREADS) && (_WRS_VXWORKS_MAJOR < 7)
-      case S_dosFsLib_FILE_NOT_FOUND:
+    else if (errno_val == S_dosFsLib_FILE_NOT_FOUND)
+      return 1;
 #endif
 #if ! defined (__RTP__) && (! defined (VTHREADS) || defined (__VXWORKSMILS__))
-      case S_nfsLib_NFSERR_NOENT:
+    else if (errno_val ==  S_nfsLib_NFSERR_NOENT)
+      return 1;
 #endif
 #if defined (__RTP__)
-       /* An RTP can return an NFS file not found, and the NFS bits must
-          first be masked on to check the errno.  */
-      case M_nfsStat | ENOENT:
+    /* An RTP can return an NFS file not found, and the NFS bits must
+       first be masked on to check the errno.  */
+    else if (errno_val == (M_nfsStat | ENOENT))
+      return 1;
 #endif
 #endif
-         return 1;
-
-      default:
-        return 0;
-   }
+    else
+      return 0;
 }
 
 #if defined (__linux__)