OSDN Git Service

2007-09-26 Olivier Hainque <hainque@adacore.com>
authorcharlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 26 Sep 2007 10:41:58 +0000 (10:41 +0000)
committercharlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 26 Sep 2007 10:41:58 +0000 (10:41 +0000)
* adaint.c (if defined (__Lynx__)): Wrap #def/#undef VMOS_DEV around
#include <utime.h> and #define GCC_RESOURCE_H before
#include <sys/wait.h>.
Add more protections in __gnat_translate_vms.

* expect.c (if defined (__Lynx__)): #define GCC_RESOURCE_H before
#include <sys/wait.h>.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@128782 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ada/adaint.c
gcc/ada/expect.c

index dcc7c13..74fb670 100644 (file)
 #include "version.h"
 #endif
 
-#ifdef __MINGW32__
+#if defined (__MINGW32__)
+
 #include "mingw32.h"
 #include <sys/utime.h>
 #include <ctype.h>
-#else
-#ifndef VMS
+
+#elif defined (__Lynx__)
+
+/* Lynx utime.h only defines the entities of interest to us if
+   defined (VMOS_DEV), so ... */
+#define VMOS_DEV
+#include <utime.h>
+#undef VMOS_DEV
+
+#elif !defined (VMS)
 #include <utime.h>
-#endif
 #endif
 
 #ifdef __MINGW32__
 #endif
 #elif defined (__vxworks) && defined (__RTP__)
 #include <wait.h>
+#elif defined (__Lynx__)
+/* ??? We really need wait.h and it includes resource.h on Lynx.  GCC
+   has a resource.h header as well, included instead of the lynx
+   version in our setup, causing lots of errors.  We don't really need
+   the lynx contents of this file, so just workaround the issue by
+   preventing the inclusion of the GCC header from doing anything.  */
+#define GCC_RESOURCE_H
+#include <sys/wait.h>
 #else
 #include <sys/wait.h>
 #endif
@@ -2430,8 +2446,8 @@ __gnat_translate_vms (char *src)
         *(retpos++) = '.';
       }
 
-      /* There is qualified path */
-      while (*pos1 != ']' && *pos1 != '>') {
+      /* There is qualified path */
+      while (*pos1 && *pos1 != ']' && *pos1 != '>') {
         switch (*pos1) {
           case '.':
             /* '.' is used to separate directories. Replace it with '/' but
@@ -2445,13 +2461,18 @@ __gnat_translate_vms (char *src)
             }
             break;
           case '-' :
-            /* Equivalent to Unix .. but there may be several in a row */
-            while (*pos1 == '-') {
-              pos1++;
-              *(retpos++) = '.'; *(retpos++) = '.'; *(retpos++) = '/';
+            /* When after '.' '[' '<' is equivalent to Unix ".." but there
+            may be several in a row */
+            if (*(pos1 - 1) == '.' || *(pos1 - 1) == '[' ||
+                *(pos1 - 1) == '<') {
+              while (*pos1 == '-') {
+                pos1++;
+                *(retpos++) = '.'; *(retpos++) = '.'; *(retpos++) = '/';
+              }
+              retpos--;
+              break;
             }
-            retpos--;
-            break;
+            /* otherwise fall through to default */
           default:
             *(retpos++) = *(pos1++);
         }
@@ -2540,7 +2561,7 @@ __gnat_to_canonical_file_spec (char *filespec)
 
   if (strchr (filespec, ']') || strchr (filespec, ':'))
     {
-      char *tspec = (char *) decc$translate_vms (filespec);
+      char *tspec = (char *) __gnat_translate_vms (filespec);
 
       if (tspec != (char *) -1)
        strncpy (new_canonical_filespec, tspec, MAXPATH);
@@ -2549,7 +2570,7 @@ __gnat_to_canonical_file_spec (char *filespec)
            "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_"))
        && (filespec1 = getenv (filespec)))
     {
-      char *tspec = (char *) decc$translate_vms (filespec1);
+      char *tspec = (char *) __gnat_translate_vms (filespec1);
 
       if (tspec != (char *) -1)
        strncpy (new_canonical_filespec, tspec, MAXPATH);
index 6d2cf86..7503de0 100644 (file)
@@ -6,7 +6,7 @@
  *                                                                          *
  *                          C Implementation File                           *
  *                                                                          *
- *                     Copyright (C) 2001-2005, AdaCore                     *
+ *                     Copyright (C) 2001-2007, AdaCore                     *
  *                                                                          *
  * GNAT is free software;  you can  redistribute it  and/or modify it under *
  * terms of the  GNU General Public License as published  by the Free Soft- *
 #endif
 #elif defined (__vxworks) && defined (__RTP__)
 #include <wait.h>
+#elif defined (__Lynx__)
+/* ??? See comment in adaint.c.  */
+#define GCC_RESOURCE_H
+#include <sys/wait.h>
 #else
 #include <sys/wait.h>
 #endif