aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Stubbs <andrew.stubbs@st.com>2006-11-30 17:05:45 +0000
committerJ"orn Rennecke <joern.rennecke@st.com>2006-11-30 17:05:45 +0000
commita45c17341953ca91f0f629dc145da981503acc7f (patch)
treedfab9db15a2a570a363138a02582f20e1f90f56b
parent127b85f39a27d0e22fcff5126c7d69185cd1746b (diff)
include:
2006-05-03 Andrew Stubbs <andrew.stubbs@st.com> J"orn Rennecke <joern.rennecke@st.com> PR driver/29931 * libiberty.h (make_relative_prefix_ignore_links): Declare. libiberty: 2006-05-03 Andrew Stubbs <andrew.stubbs@st.com> J"orn Rennecke <joern.rennecke@st.com> PR driver/29931 * make-relative-prefix.c (make_relative_prefix_1): New function, broken out of make_relative_prefix. Make link resolution dependent on new parameter. (make_relative_prefix): Use make_relative_prefix_1. (make_relative_prefix_ignore_links): New function. git-svn-id: https://gcc.gnu.org/svn/gcc/trunk@119366 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--include/ChangeLog6
-rw-r--r--include/libiberty.h7
-rw-r--r--libiberty/ChangeLog10
-rw-r--r--libiberty/make-relative-prefix.c49
4 files changed, 65 insertions, 7 deletions
diff --git a/include/ChangeLog b/include/ChangeLog
index c7fce38fb2b..017d3fd30b5 100644
--- a/include/ChangeLog
+++ b/include/ChangeLog
@@ -1,3 +1,9 @@
+2006-11-30 Andrew Stubbs <andrew.stubbs@st.com>
+ J"orn Rennecke <joern.rennecke@st.com>
+
+ PR driver/29931
+ * libiberty.h (make_relative_prefix_ignore_links): Declare.
+
2006-11-27 Bob Wilson <bob.wilson@acm.org>
* xtensa-config.h (XSHAL_ABI): New.
diff --git a/include/libiberty.h b/include/libiberty.h
index 1328d3eb14c..27291c98868 100644
--- a/include/libiberty.h
+++ b/include/libiberty.h
@@ -197,6 +197,13 @@ extern long get_run_time (void);
extern char *make_relative_prefix (const char *, const char *,
const char *) ATTRIBUTE_MALLOC;
+/* Generate a relocated path to some installation directory without
+ attempting to follow any soft links. Allocates
+ return value using malloc. */
+
+extern char *make_relative_prefix_ignore_links (const char *, const char *,
+ const char *) ATTRIBUTE_MALLOC;
+
/* Choose a temporary directory to use for scratch files. */
extern char *choose_temp_base (void) ATTRIBUTE_MALLOC;
diff --git a/libiberty/ChangeLog b/libiberty/ChangeLog
index 592954b3c47..4b27eb05bac 100644
--- a/libiberty/ChangeLog
+++ b/libiberty/ChangeLog
@@ -1,3 +1,13 @@
+2006-11-30 Andrew Stubbs <andrew.stubbs@st.com>
+ J"orn Rennecke <joern.rennecke@st.com>
+
+ PR driver/29931
+ * make-relative-prefix.c (make_relative_prefix_1): New function,
+ broken out of make_relative_prefix. Make link resolution dependent
+ on new parameter.
+ (make_relative_prefix): Use make_relative_prefix_1.
+ (make_relative_prefix_ignore_links): New function.
+
2006-11-08 Vladimir Prus <vladimir@codesourcery.com>
* pex-win32.c (no_suffixes): Remove.
diff --git a/libiberty/make-relative-prefix.c b/libiberty/make-relative-prefix.c
index 66ddcaa471b..4116ec9963f 100644
--- a/libiberty/make-relative-prefix.c
+++ b/libiberty/make-relative-prefix.c
@@ -1,6 +1,6 @@
/* Relative (relocatable) prefix support.
Copyright (C) 1987, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
- 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
+ 1999, 2000, 2001, 2002, 2006 Free Software Foundation, Inc.
This file is part of libiberty.
@@ -217,9 +217,9 @@ free_split_directories (char **dirs)
If no relative prefix can be found, return NULL. */
-char *
-make_relative_prefix (const char *progname,
- const char *bin_prefix, const char *prefix)
+static char *
+make_relative_prefix_1 (const char *progname, const char *bin_prefix,
+ const char *prefix, const int resolve_links)
{
char **prog_dirs, **bin_dirs, **prefix_dirs;
int prog_num, bin_num, prefix_num;
@@ -289,9 +289,14 @@ make_relative_prefix (const char *progname,
}
}
- full_progname = lrealpath (progname);
- if (full_progname == NULL)
- return NULL;
+ if ( resolve_links )
+ {
+ full_progname = lrealpath (progname);
+ if (full_progname == NULL)
+ return NULL;
+ }
+ else
+ full_progname = strdup(progname);
prog_dirs = split_directories (full_progname, &prog_num);
bin_dirs = split_directories (bin_prefix, &bin_num);
@@ -387,3 +392,33 @@ make_relative_prefix (const char *progname,
return ret;
}
+
+
+/* Do the full job, including symlink resolution.
+ This path will find files installed in the same place as the
+ program even when a soft link has been made to the program
+ from somwhere else. */
+
+char *
+make_relative_prefix (progname, bin_prefix, prefix)
+ const char *progname;
+ const char *bin_prefix;
+ const char *prefix;
+{
+ return make_relative_prefix_1 (progname, bin_prefix, prefix, 1);
+}
+
+/* Make the relative pathname without attempting to resolve any links.
+ '..' etc may also be left in the pathname.
+ This will find the files the user meant the program to find if the
+ installation is patched together with soft links. */
+
+char *
+make_relative_prefix_ignore_links (progname, bin_prefix, prefix)
+ const char *progname;
+ const char *bin_prefix;
+ const char *prefix;
+{
+ return make_relative_prefix_1 (progname, bin_prefix, prefix, 0);
+}
+