OSDN Git Service

2005-07-07 Thomas Koenig <Thomas.Koenig@online.de>
[pf3gnuchains/gcc-fork.git] / libgfortran / intrinsics / eoshift0.c
index 654c1db..6152e9f 100644 (file)
@@ -41,10 +41,6 @@ static const char zeros[16] =
    sizeof(int) < sizeof (index_type).  */
 
 static void
-eoshift0 (gfc_array_char * , const gfc_array_char *,
-         int, const char *, int);
-
-static void
 eoshift0 (gfc_array_char * ret, const gfc_array_char * array,
          int shift, const char * pbound, int which)
 {
@@ -135,10 +131,19 @@ eoshift0 (gfc_array_char * ret, const gfc_array_char * array,
   sstride0 = sstride[0];
   rptr = ret->data;
   sptr = array->data;
-  if (shift > 0)
-    len = len - shift;
+
+  if ((shift >= 0 ? shift : -shift) > len)
+    {
+      shift = len;
+      len = 0;
+    }
   else
-    len = len + shift;
+    {
+      if (shift > 0)
+       len = len - shift;
+      else
+       len = len + shift;
+    }
 
   while (rptr)
     {