*** empty log message ***
authorRichard Stallman <rms@gnu.org>
Thu, 26 Mar 1992 23:23:31 +0000 (23:23 +0000)
committerRichard Stallman <rms@gnu.org>
Thu, 26 Mar 1992 23:23:31 +0000 (23:23 +0000)
From-SVN: r592

gcc/protoize.c

index 29d947b79b8a285363dbe454ec8d0f9320cb2228..c5b377e122844e205742863c062984c6c44af503 100644 (file)
@@ -1320,11 +1320,22 @@ shortpath (cwd, filename)
           path_p++;
           unmatched_slash_count++;
         }
+
+      /* Find out how many directory levels in cwd were *not* matched.  */
       while (*cwd_p)
         if (*cwd_p++ == '/')
-                unmatched_slash_count++;
+         unmatched_slash_count++;
+
+      /* Now we know how long the "short name" will be.
+        Reject it if longer than the input.  */
+      if (unmatched_slash_count * 3 + strlen (path_p) >= filename_len)
+       return filename;
+
+      /* For each of them, put a `../' at the beginning of the short name.  */
       while (unmatched_slash_count--)
         {
+         /* Give up if the result gets to be longer
+            than the absolute path name.  */
          if (rel_buffer + filename_len <= rel_buf_p + 3)
            return filename;
           *rel_buf_p++ = '.';
@@ -1332,6 +1343,7 @@ shortpath (cwd, filename)
           *rel_buf_p++ = '/';
         }
 
+      /* Then tack on the unmatched part of the desired file's name.  */
       do
        {
          if (rel_buffer + filename_len <= rel_buf_p)