aboutsummaryrefslogtreecommitdiff
path: root/gdb/utils.c
diff options
context:
space:
mode:
authorRichard Henderson <rth@redhat.com>2002-03-15 00:44:49 +0000
committerRichard Henderson <rth@redhat.com>2002-03-15 00:44:49 +0000
commita4db0f0748629c825090fda9d4037b615f789917 (patch)
treedda5653dc5ae876235ed4b93f8f9a6aa51ff11e5 /gdb/utils.c
parentbd2b03193d7687db9aaf94302e5d8822630a8b5a (diff)
downloadgdb-a4db0f0748629c825090fda9d4037b615f789917.zip
gdb-a4db0f0748629c825090fda9d4037b615f789917.tar.gz
gdb-a4db0f0748629c825090fda9d4037b615f789917.tar.bz2
* configure.in: Detect declaration for canonicalize_file_name.
* utils.c (canonicalize_file_name): Declare, if needed. (gdb_realpath): Prefer realpath if available and usable. * config.in, configure: Rebuild.
Diffstat (limited to 'gdb/utils.c')
-rw-r--r--gdb/utils.c27
1 files changed, 18 insertions, 9 deletions
diff --git a/gdb/utils.c b/gdb/utils.c
index be9dc45..edc340e 100644
--- a/gdb/utils.c
+++ b/gdb/utils.c
@@ -81,6 +81,11 @@ extern PTR realloc ();
#ifdef NEED_DECLARATION_FREE
extern void free ();
#endif
+/* Actually, we'll never have the decl, since we don't define _GNU_SOURCE. */
+#if defined(HAVE_CANONICALIZE_FILE_NAME) \
+ && defined(NEED_DECLARATION_CANONICALIZE_FILE_NAME)
+extern char *canonicalize_file_name (const char *);
+#endif
#undef XMALLOC
#define XMALLOC(TYPE) ((TYPE*) xmalloc (sizeof (TYPE)))
@@ -2532,20 +2537,24 @@ string_to_core_addr (const char *my_string)
char *
gdb_realpath (const char *filename)
{
-#ifdef HAVE_CANONICALIZE_FILE_NAME
- return canonicalize_file_name (filename);
-#elif defined (HAVE_REALPATH)
-#if defined (PATH_MAX)
+#if defined(HAVE_REALPATH)
+# if defined (PATH_MAX)
char buf[PATH_MAX];
-#elif defined (MAXPATHLEN)
+# define USE_REALPATH
+# elif defined (MAXPATHLEN)
char buf[MAXPATHLEN];
-#elif defined (HAVE_UNISTD_H) && defined(HAVE_ALLOCA)
+# define USE_REALPATH
+# elif defined (HAVE_UNISTD_H) && defined(HAVE_ALLOCA)
char *buf = alloca ((size_t)pathconf ("/", _PC_PATH_MAX));
-#else
-#error "Neither PATH_MAX nor MAXPATHLEN defined"
-#endif
+# define USE_REALPATH
+# endif
+#endif /* HAVE_REALPATH */
+
+#if defined(USE_REALPATH)
char *rp = realpath (filename, buf);
return xstrdup (rp ? rp : filename);
+#elif defined(HAVE_CANONICALIZE_FILE_NAME)
+ return canonicalize_file_name (filename);
#else
return xstrdup (filename);
#endif