aboutsummaryrefslogtreecommitdiff
path: root/gcc/protoize.c
diff options
context:
space:
mode:
authorRichard Stallman <rms@gnu.org>1992-03-26 23:23:31 +0000
committerRichard Stallman <rms@gnu.org>1992-03-26 23:23:31 +0000
commit526fef40af059bfd6e45ccdb66fbae12f49ed032 (patch)
tree6a807803460921f049e740b7afbc3080ad0cb7d9 /gcc/protoize.c
parent84c0bb6359b5e8161866347491ea77c7d8cafbbf (diff)
downloadgcc-526fef40af059bfd6e45ccdb66fbae12f49ed032.zip
gcc-526fef40af059bfd6e45ccdb66fbae12f49ed032.tar.gz
gcc-526fef40af059bfd6e45ccdb66fbae12f49ed032.tar.bz2
*** empty log message ***
From-SVN: r592
Diffstat (limited to 'gcc/protoize.c')
-rw-r--r--gcc/protoize.c14
1 files changed, 13 insertions, 1 deletions
diff --git a/gcc/protoize.c b/gcc/protoize.c
index 29d947b..c5b377e 100644
--- a/gcc/protoize.c
+++ b/gcc/protoize.c
@@ -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)