[llvm-commits] [llvm-gcc-4.2] r79232 - in /llvm-gcc-4.2/trunk: include/libiberty.h libiberty/make-relative-prefix.c

Rafael Espindola rafael.espindola at gmail.com
Mon Aug 17 02:08:41 PDT 2009


Author: rafael
Date: Mon Aug 17 04:08:36 2009
New Revision: 79232

URL: http://llvm.org/viewvc/llvm-project?rev=79232&view=rev
Log:
Backport of svn commit 119366. This adds make_relative_prefix_ignore_links.
The original patch is GPL2.


Modified:
    llvm-gcc-4.2/trunk/include/libiberty.h
    llvm-gcc-4.2/trunk/libiberty/make-relative-prefix.c

Modified: llvm-gcc-4.2/trunk/include/libiberty.h
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/include/libiberty.h?rev=79232&r1=79231&r2=79232&view=diff

==============================================================================
--- llvm-gcc-4.2/trunk/include/libiberty.h (original)
+++ llvm-gcc-4.2/trunk/include/libiberty.h Mon Aug 17 04:08:36 2009
@@ -197,6 +197,13 @@
 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;

Modified: llvm-gcc-4.2/trunk/libiberty/make-relative-prefix.c
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/libiberty/make-relative-prefix.c?rev=79232&r1=79231&r2=79232&view=diff

==============================================================================
--- llvm-gcc-4.2/trunk/libiberty/make-relative-prefix.c (original)
+++ llvm-gcc-4.2/trunk/libiberty/make-relative-prefix.c Mon Aug 17 04:08:36 2009
@@ -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 @@
 
    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 @@
 	}
     }
 
-  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 @@
 
   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);
+}
+





More information about the llvm-commits mailing list