]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
Create new common/pathstuff.[ch]
authorSergio Durigan Junior <sergiodj@redhat.com>
Fri, 9 Feb 2018 23:44:59 +0000 (18:44 -0500)
committerSergio Durigan Junior <sergiodj@redhat.com>
Thu, 1 Mar 2018 02:13:12 +0000 (21:13 -0500)
This commit moves the path manipulation routines found on utils.c to a
new common/pathstuff.c, and updates the Makefile.in's accordingly.
The routines moved are "gdb_realpath", "gdb_realpath_keepfile" and
"gdb_abspath".

This will be needed because gdbserver will have to call "gdb_abspath"
on my next patch, which implements a way to expand the path of the
inferior provided by the user in order to allow specifying just the
binary name when starting gdbserver, like:

  $ gdbserver :1234 a.out

With the recent addition of the startup-with-shell feature on
gdbserver, this scenario doesn't work anymore if the user doesn't have
the current directory listed in the PATH variable.

I had to do a minor adjustment on "gdb_abspath" because we don't have
access to "tilde_expand" on gdbserver, so now the function is using
"gdb_tilde_expand" instead.  Otherwise, the code is the same.

Regression tested on the BuildBot, without regressions.

gdb/ChangeLog:
2018-02-28  Sergio Durigan Junior  <sergiodj@redhat.com>

* Makefile.in (SFILES): Add "common/pathstuff.c".
(HFILES_NO_SRCDIR): Add "common/pathstuff.h".
(COMMON_OBS): Add "pathstuff.o".
* auto-load.c: Include "common/pathstuff.h".
* common/common-def.h (current_directory): Move here.
* common/gdb_tilde_expand.c (gdb_tilde_expand_up): New
function.
* common/gdb_tilde_expand.h (gdb_tilde_expand_up): New
prototype.
* common/pathstuff.c: New file.
* common/pathstuff.h: New file.
* compile/compile.c: Include "common/pathstuff.h".
* defs.h (current_directory): Move to "common/common-defs.h".
* dwarf2read.c: Include "common/pathstuff.h".
* exec.c: Likewise.
* guile/scm-safe-call.c: Likewise.
* linux-thread-db.c: Likewise.
* main.c: Likewise.
* nto-tdep.c: Likewise.
* objfiles.c: Likewise.
* source.c: Likewise.
* symtab.c: Likewise.
* utils.c: Include "common/pathstuff.h".
(gdb_realpath): Move to "common/pathstuff.c".
(gdb_realpath_keepfile): Likewise.
(gdb_abspath): Likewise.
* utils.h (gdb_realpath): Move to "common/pathstuff.h".
(gdb_realpath_keepfile): Likewise.
(gdb_abspath): Likewise.

gdb/gdbserver/ChangeLog:
2018-02-28  Sergio Durigan Junior  <sergiodj@redhat.com>

* Makefile.in (SFILES): Add "$(srcdir)/common/pathstuff.c".
(OBJS): Add "pathstuff.o".
* server.c (current_directory): New global variable.
(captured_main): Initialize "current_directory".

24 files changed:
gdb/ChangeLog
gdb/Makefile.in
gdb/auto-load.c
gdb/common/common-defs.h
gdb/common/gdb_tilde_expand.c
gdb/common/gdb_tilde_expand.h
gdb/common/pathstuff.c [new file with mode: 0644]
gdb/common/pathstuff.h [new file with mode: 0644]
gdb/compile/compile.c
gdb/defs.h
gdb/dwarf2read.c
gdb/exec.c
gdb/gdbserver/ChangeLog
gdb/gdbserver/Makefile.in
gdb/gdbserver/server.c
gdb/guile/scm-safe-call.c
gdb/linux-thread-db.c
gdb/main.c
gdb/nto-tdep.c
gdb/objfiles.c
gdb/source.c
gdb/symtab.c
gdb/utils.c
gdb/utils.h

index 18aaf888295b3e88dddcc39da13ece6cbdfbd5d2..85ccf68ff1e53f86f09a2ad51cbc8be2b6b84d8d 100644 (file)
@@ -1,3 +1,35 @@
+2018-02-28  Sergio Durigan Junior  <sergiodj@redhat.com>
+
+       * Makefile.in (SFILES): Add "common/pathstuff.c".
+       (HFILES_NO_SRCDIR): Add "common/pathstuff.h".
+       (COMMON_OBS): Add "pathstuff.o".
+       * auto-load.c: Include "common/pathstuff.h".
+       * common/common-def.h (current_directory): Move here.
+       * common/gdb_tilde_expand.c (gdb_tilde_expand_up): New
+       function.
+       * common/gdb_tilde_expand.h (gdb_tilde_expand_up): New
+       prototype.
+       * common/pathstuff.c: New file.
+       * common/pathstuff.h: New file.
+       * compile/compile.c: Include "common/pathstuff.h".
+       * defs.h (current_directory): Move to "common/common-defs.h".
+       * dwarf2read.c: Include "common/pathstuff.h".
+       * exec.c: Likewise.
+       * guile/scm-safe-call.c: Likewise.
+       * linux-thread-db.c: Likewise.
+       * main.c: Likewise.
+       * nto-tdep.c: Likewise.
+       * objfiles.c: Likewise.
+       * source.c: Likewise.
+       * symtab.c: Likewise.
+       * utils.c: Include "common/pathstuff.h".
+       (gdb_realpath): Move to "common/pathstuff.c".
+       (gdb_realpath_keepfile): Likewise.
+       (gdb_abspath): Likewise.
+       * utils.h (gdb_realpath): Move to "common/pathstuff.h".
+       (gdb_realpath_keepfile): Likewise.
+       (gdb_abspath): Likewise.
+
 2018-02-15  Yao Qi  <yao.qi@linaro.org>
 
        PR gdb/22849
index 17b71c6e7c63fa782ee1d69a3dccfe1534fb249b..89ced887ac8ba4c562f05cab7117d78bfcb83208 100644 (file)
@@ -1134,6 +1134,7 @@ SFILES = \
        common/gdb_tilde_expand.c \
        common/gdb_vecs.c \
        common/new-op.c \
+       common/pathstuff.c \
        common/print-utils.c \
        common/ptid.c \
        common/rsp-low.c \
@@ -1424,6 +1425,7 @@ HFILES_NO_SRCDIR = \
        common/gdb_wait.h \
        common/common-inferior.h \
        common/host-defs.h \
+       common/pathstuff.h \
        common/print-utils.h \
        common/ptid.h \
        common/queue.h \
@@ -1549,6 +1551,7 @@ COMMON_OBS = $(DEPFILES) $(CONFIG_OBS) $(YYOBJ) \
        gdb_vecs.o \
        mi/mi-common.o \
        new-op.o \
+       pathstuff.o \
        print-utils.o \
        ptid.o \
        rsp-low.o \
index 30c8b89e8eb0901d0b24c8e1461e0d66643771d6..e9163c6f730807ad990af9e6bdacc7f6d0b72592 100644 (file)
@@ -40,6 +40,7 @@
 #include "extension.h"
 #include "gdb/section-scripts.h"
 #include <algorithm>
+#include "common/pathstuff.h"
 
 /* The section to look in for auto-loaded scripts (in file formats that
    support sections).
index acbc32ca69cb9359a7cf1f694af521679401096d..881a4eaaffceb4183446a2cb1c272fbcadfcaadd 100644 (file)
@@ -91,4 +91,7 @@
 /* Pull in gdb::unique_xmalloc_ptr.  */
 #include "common/gdb_unique_ptr.h"
 
+/* String containing the current directory (what getwd would return).  */
+extern char *current_directory;
+
 #endif /* COMMON_DEFS_H */
index b4f371464dcb5f2a29dbdc0de492d334ad6fd983..fcb97961ac0494632f949896c021d2d89f885e80 100644 (file)
@@ -80,3 +80,16 @@ gdb_tilde_expand (const char *dir)
 
   return expanded_dir;
 }
+
+/* See common/gdb_tilde_expand.h.  */
+
+gdb::unique_xmalloc_ptr<char>
+gdb_tilde_expand_up (const char *dir)
+{
+  gdb_glob glob (dir, GLOB_TILDE_CHECK, NULL);
+
+  gdb_assert (glob.pathc () > 0);
+  /* "glob" may return more than one match to the path provided by the
+     user, but we are only interested in the first match.  */
+  return gdb::unique_xmalloc_ptr<char> (xstrdup (glob.pathv ()[0]));
+}
index d0dfb37857c562f952b4025b115a97f6110b45cd..22860d3969e4648352c0361a1c2213654a48104c 100644 (file)
@@ -24,4 +24,8 @@
    the full path.  */
 extern std::string gdb_tilde_expand (const char *dir);
 
+/* Same as GDB_TILDE_EXPAND, but return the full path as a
+   gdb::unique_xmalloc_ptr<char>.  */
+extern gdb::unique_xmalloc_ptr<char> gdb_tilde_expand_up (const char *dir);
+
 #endif /* ! GDB_TILDE_EXPAND_H */
diff --git a/gdb/common/pathstuff.c b/gdb/common/pathstuff.c
new file mode 100644 (file)
index 0000000..02f6e44
--- /dev/null
@@ -0,0 +1,142 @@
+/* Path manipulation routines for GDB and gdbserver.
+
+   Copyright (C) 1986-2018 Free Software Foundation, Inc.
+
+   This file is part of GDB.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+
+#include "common-defs.h"
+#include "pathstuff.h"
+#include "host-defs.h"
+#include "filenames.h"
+#include "gdb_tilde_expand.h"
+
+/* See common/pathstuff.h.  */
+
+gdb::unique_xmalloc_ptr<char>
+gdb_realpath (const char *filename)
+{
+/* On most hosts, we rely on canonicalize_file_name to compute
+   the FILENAME's realpath.
+
+   But the situation is slightly more complex on Windows, due to some
+   versions of GCC which were reported to generate paths where
+   backlashes (the directory separator) were doubled.  For instance:
+      c:\\some\\double\\slashes\\dir
+   ... instead of ...
+      c:\some\double\slashes\dir
+   Those double-slashes were getting in the way when comparing paths,
+   for instance when trying to insert a breakpoint as follow:
+      (gdb) b c:/some/double/slashes/dir/foo.c:4
+      No source file named c:/some/double/slashes/dir/foo.c:4.
+      (gdb) b c:\some\double\slashes\dir\foo.c:4
+      No source file named c:\some\double\slashes\dir\foo.c:4.
+   To prevent this from happening, we need this function to always
+   strip those extra backslashes.  While canonicalize_file_name does
+   perform this simplification, it only works when the path is valid.
+   Since the simplification would be useful even if the path is not
+   valid (one can always set a breakpoint on a file, even if the file
+   does not exist locally), we rely instead on GetFullPathName to
+   perform the canonicalization.  */
+
+#if defined (_WIN32)
+  {
+    char buf[MAX_PATH];
+    DWORD len = GetFullPathName (filename, MAX_PATH, buf, NULL);
+
+    /* The file system is case-insensitive but case-preserving.
+       So it is important we do not lowercase the path.  Otherwise,
+       we might not be able to display the original casing in a given
+       path.  */
+    if (len > 0 && len < MAX_PATH)
+      return gdb::unique_xmalloc_ptr<char> (xstrdup (buf));
+  }
+#else
+  {
+    char *rp = canonicalize_file_name (filename);
+
+    if (rp != NULL)
+      return gdb::unique_xmalloc_ptr<char> (rp);
+  }
+#endif
+
+  /* This system is a lost cause, just dup the buffer.  */
+  return gdb::unique_xmalloc_ptr<char> (xstrdup (filename));
+}
+
+/* See common/pathstuff.h.  */
+
+gdb::unique_xmalloc_ptr<char>
+gdb_realpath_keepfile (const char *filename)
+{
+  const char *base_name = lbasename (filename);
+  char *dir_name;
+  char *result;
+
+  /* Extract the basename of filename, and return immediately
+     a copy of filename if it does not contain any directory prefix.  */
+  if (base_name == filename)
+    return gdb::unique_xmalloc_ptr<char> (xstrdup (filename));
+
+  dir_name = (char *) alloca ((size_t) (base_name - filename + 2));
+  /* Allocate enough space to store the dir_name + plus one extra
+     character sometimes needed under Windows (see below), and
+     then the closing \000 character.  */
+  strncpy (dir_name, filename, base_name - filename);
+  dir_name[base_name - filename] = '\000';
+
+#ifdef HAVE_DOS_BASED_FILE_SYSTEM
+  /* We need to be careful when filename is of the form 'd:foo', which
+     is equivalent of d:./foo, which is totally different from d:/foo.  */
+  if (strlen (dir_name) == 2 && isalpha (dir_name[0]) && dir_name[1] == ':')
+    {
+      dir_name[2] = '.';
+      dir_name[3] = '\000';
+    }
+#endif
+
+  /* Canonicalize the directory prefix, and build the resulting
+     filename.  If the dirname realpath already contains an ending
+     directory separator, avoid doubling it.  */
+  gdb::unique_xmalloc_ptr<char> path_storage = gdb_realpath (dir_name);
+  const char *real_path = path_storage.get ();
+  if (IS_DIR_SEPARATOR (real_path[strlen (real_path) - 1]))
+    result = concat (real_path, base_name, (char *) NULL);
+  else
+    result = concat (real_path, SLASH_STRING, base_name, (char *) NULL);
+
+  return gdb::unique_xmalloc_ptr<char> (result);
+}
+
+/* See common/pathstuff.h.  */
+
+gdb::unique_xmalloc_ptr<char>
+gdb_abspath (const char *path)
+{
+  gdb_assert (path != NULL && path[0] != '\0');
+
+  if (path[0] == '~')
+    return gdb_tilde_expand_up (path);
+
+  if (IS_ABSOLUTE_PATH (path))
+    return gdb::unique_xmalloc_ptr<char> (xstrdup (path));
+
+  /* Beware the // my son, the Emacs barfs, the botch that catch...  */
+  return gdb::unique_xmalloc_ptr<char>
+    (concat (current_directory,
+            IS_DIR_SEPARATOR (current_directory[strlen (current_directory) - 1])
+            ? "" : SLASH_STRING,
+            path, (char *) NULL));
+}
diff --git a/gdb/common/pathstuff.h b/gdb/common/pathstuff.h
new file mode 100644 (file)
index 0000000..3cb02c8
--- /dev/null
@@ -0,0 +1,49 @@
+/* Path manipulation routines for GDB and gdbserver.
+
+   Copyright (C) 1986-2018 Free Software Foundation, Inc.
+
+   This file is part of GDB.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+
+#ifndef PATHSTUFF_H
+#define PATHSTUFF_H
+
+/* Path utilities.  */
+
+/* Return the real path of FILENAME, expanding all the symbolic links.
+
+   Contrary to "gdb_abspath", this function does not use
+   CURRENT_DIRECTORY for path expansion.  Instead, it relies on the
+   current working directory (CWD) of GDB or gdbserver.  */
+
+extern gdb::unique_xmalloc_ptr<char> gdb_realpath (const char *filename);
+
+/* Return a copy of FILENAME, with its directory prefix canonicalized
+   by gdb_realpath.  */
+
+extern gdb::unique_xmalloc_ptr<char>
+  gdb_realpath_keepfile (const char *filename);
+
+/* Return PATH in absolute form, performing tilde-expansion if necessary.
+   PATH cannot be NULL or the empty string.
+   This does not resolve symlinks however, use gdb_realpath for that.
+
+   Contrary to "gdb_realpath", this function uses CURRENT_DIRECTORY
+   for the path expansion.  This may lead to scenarios the current
+   working directory (CWD) is different than CURRENT_DIRECTORY.  */
+
+extern gdb::unique_xmalloc_ptr<char> gdb_abspath (const char *path);
+
+#endif /* PATHSTUFF_H */
index 82e63d895f5342c63481754170d746e138ee693a..3a1bb987b25702eddfd3568eac07b71fc728e55c 100644 (file)
@@ -41,6 +41,7 @@
 #include "valprint.h"
 #include "common/gdb_optional.h"
 #include "common/gdb_unlinker.h"
+#include "common/pathstuff.h"
 
 \f
 
index 4fb2129b30796758954231a7a931420278d5b506..61be4758583872b925badf52a6997e14928b45e2 100644 (file)
@@ -423,10 +423,6 @@ enum info_proc_what
     IP_ALL
   };
 
-/* * String containing the current directory (what getwd would return).  */
-
-extern char *current_directory;
-
 /* * Default radixes for input and output.  Only some values supported.  */
 extern unsigned input_radix;
 extern unsigned output_radix;
index 58da0fc1f93e5d7c8ab73c52cd6828ab0b535259..59cbbaa577f5ead2617f20d0f8fbedfa35af2202 100644 (file)
@@ -86,6 +86,7 @@
 #include <cmath>
 #include <set>
 #include <forward_list>
+#include "common/pathstuff.h"
 
 typedef struct symbol *symbolp;
 DEF_VEC_P (symbolp);
index c8c32ecc27540c8bc3d349edb87b1e7269ad76a6..a5d071ec5148d93d0763f6664206e928b2442bd1 100644 (file)
@@ -44,6 +44,7 @@
 #include <sys/stat.h>
 #include "solist.h"
 #include <algorithm>
+#include "common/pathstuff.h"
 
 void (*deprecated_file_changed_hook) (const char *);
 
index 4029a5eb66b3edb834570446203db082bae0a2b7..338c5430f8346d150538d2235407f03f8bf62914 100644 (file)
@@ -1,3 +1,10 @@
+2018-02-28  Sergio Durigan Junior  <sergiodj@redhat.com>
+
+       * Makefile.in (SFILES): Add "$(srcdir)/common/pathstuff.c".
+       (OBJS): Add "pathstuff.o".
+       * server.c (current_directory): New global variable.
+       (captured_main): Initialize "current_directory".
+
 2018-01-17  Eldar Abusalimov  <eldar.abusalimov@jetbrains.com>
 
        PR gdb/21559
index 3ce086d70f23df445b174c49c489ec8415d7614a..4ac068c6dd334892b1caca767033c69e7eeafed8 100644 (file)
@@ -209,6 +209,7 @@ SFILES = \
        $(srcdir)/common/gdb_tilde_expand.c \
        $(srcdir)/common/gdb_vecs.c \
        $(srcdir)/common/new-op.c \
+       $(srcdir)/common/pathstuff.c \
        $(srcdir)/common/print-utils.c \
        $(srcdir)/common/ptid.c \
        $(srcdir)/common/rsp-low.c \
@@ -256,6 +257,7 @@ OBS = \
        mem-break.o \
        new-op.o \
        notif.o \
+       pathstuff.o \
        print-utils.o \
        ptid.o \
        regcache.o \
index 3a4661df7f075cdc85996eeeb7b850914d9cb7c6..03e09fbccfdf45614c76b621e895d4121a34c55d 100644 (file)
       break;                                   \
     }
 
+/* String containing the current directory (what getwd would return).  */
+
+char *current_directory;
+
 /* The environment to pass to the inferior when creating it.  */
 
 static gdb_environ our_environ;
@@ -3564,6 +3568,13 @@ captured_main (int argc, char *argv[])
   const char *selftest_filter = NULL;
 #endif
 
+  current_directory = getcwd (NULL, 0);
+  if (current_directory == NULL)
+    {
+      error (_("%s: error finding working directory"),
+            safe_strerror (errno));
+    }
+
   while (*next_arg != NULL && **next_arg == '-')
     {
       if (strcmp (*next_arg, "--version") == 0)
index a9ce7b72c120f4f317cbd14327bee2de62ff1c53..2cba399e23abe92550857e2570a2f5d608708676 100644 (file)
@@ -23,6 +23,7 @@
 #include "defs.h"
 #include "filenames.h"
 #include "guile-internal.h"
+#include "common/pathstuff.h"
 
 /* Struct to marshall args to scscm_safe_call_body.  */
 
index 299c5ed34a9ac98ea0b0945b8fd3fb23aef29ac7..1a385a60086077681335850b8a9f7eff5fa7c5a1 100644 (file)
@@ -46,6 +46,7 @@
 #include <ctype.h>
 #include "nat/linux-namespaces.h"
 #include <algorithm>
+#include "common/pathstuff.h"
 
 /* GNU/Linux libthread_db support.
 
index 3c98787edbc03c57381d1e689968a47c65294d7e..189266f90e0e520073c68035c09b0851afd3f32e 100644 (file)
@@ -46,6 +46,7 @@
 #include "infrun.h"
 #include "signals-state-save-restore.h"
 #include <vector>
+#include "common/pathstuff.h"
 
 /* The selected interpreter.  This will be used as a set command
    variable, so it should always be malloc'ed - since
index 03b2d1e96d7c84573b96c228b6a8b5552fc9b2f8..ab0db19b4887f5075ddad6766f2f6516df4f2f87 100644 (file)
@@ -31,6 +31,7 @@
 #include "solib-svr4.h"
 #include "gdbcore.h"
 #include "objfiles.h"
+#include "common/pathstuff.h"
 
 #define QNX_NOTE_NAME  "QNX"
 #define QNX_INFO_SECT_NAME "QNX_info"
index 7adaef119d158a66ddb65b25d0807d9c300a57a5..923e4babed3ec98c4e6bf0490beaf96e070b111c 100644 (file)
@@ -52,6 +52,7 @@
 #include "solist.h"
 #include "gdb_bfd.h"
 #include "btrace.h"
+#include "common/pathstuff.h"
 
 #include <vector>
 
index 1f136f4cfb29e7a0d84cbbcc70ffb1dc41f6f0b2..55fc3c5acef711fe21b2863bae58eeb3895aaae1 100644 (file)
@@ -44,6 +44,7 @@
 #include "readline/readline.h"
 #include "common/enum-flags.h"
 #include <algorithm>
+#include "common/pathstuff.h"
 
 #define OPEN_MODE (O_RDONLY | O_BINARY)
 #define FDOPEN_MODE FOPEN_RB
index 81f4fc9ec58d87b0bae5bfa5341de0c8c9d8929b..db9272087296295a3a70c45537259f330b8ddb51 100644 (file)
@@ -66,6 +66,7 @@
 #include "filename-seen-cache.h"
 #include "arch-utils.h"
 #include <algorithm>
+#include "common/pathstuff.h"
 
 /* Forward declarations for local functions.  */
 
index c531748fe46abdae5ba82a3a6e20078dd41a2473..577f9df4ecc6d0a5838daaa9c20a6e2d9ecca7a6 100644 (file)
@@ -70,6 +70,7 @@
 #include "common/gdb_optional.h"
 #include "cp-support.h"
 #include <algorithm>
+#include "common/pathstuff.h"
 
 #if !HAVE_DECL_MALLOC
 extern PTR malloc ();          /* ARI: PTR */
@@ -2838,57 +2839,6 @@ string_to_core_addr (const char *my_string)
   return addr;
 }
 
-gdb::unique_xmalloc_ptr<char>
-gdb_realpath (const char *filename)
-{
-/* On most hosts, we rely on canonicalize_file_name to compute
-   the FILENAME's realpath.
-
-   But the situation is slightly more complex on Windows, due to some
-   versions of GCC which were reported to generate paths where
-   backlashes (the directory separator) were doubled.  For instance:
-      c:\\some\\double\\slashes\\dir
-   ... instead of ...
-      c:\some\double\slashes\dir
-   Those double-slashes were getting in the way when comparing paths,
-   for instance when trying to insert a breakpoint as follow:
-      (gdb) b c:/some/double/slashes/dir/foo.c:4
-      No source file named c:/some/double/slashes/dir/foo.c:4.
-      (gdb) b c:\some\double\slashes\dir\foo.c:4
-      No source file named c:\some\double\slashes\dir\foo.c:4.
-   To prevent this from happening, we need this function to always
-   strip those extra backslashes.  While canonicalize_file_name does
-   perform this simplification, it only works when the path is valid.
-   Since the simplification would be useful even if the path is not
-   valid (one can always set a breakpoint on a file, even if the file
-   does not exist locally), we rely instead on GetFullPathName to
-   perform the canonicalization.  */
-
-#if defined (_WIN32)
-  {
-    char buf[MAX_PATH];
-    DWORD len = GetFullPathName (filename, MAX_PATH, buf, NULL);
-
-    /* The file system is case-insensitive but case-preserving.
-       So it is important we do not lowercase the path.  Otherwise,
-       we might not be able to display the original casing in a given
-       path.  */
-    if (len > 0 && len < MAX_PATH)
-      return gdb::unique_xmalloc_ptr<char> (xstrdup (buf));
-  }
-#else
-  {
-    char *rp = canonicalize_file_name (filename);
-
-    if (rp != NULL)
-      return gdb::unique_xmalloc_ptr<char> (rp);
-  }
-#endif
-
-  /* This system is a lost cause, just dup the buffer.  */
-  return gdb::unique_xmalloc_ptr<char> (xstrdup (filename));
-}
-
 #if GDB_SELF_TEST
 
 static void
@@ -2925,74 +2875,6 @@ gdb_realpath_tests ()
 
 #endif /* GDB_SELF_TEST */
 
-/* Return a copy of FILENAME, with its directory prefix canonicalized
-   by gdb_realpath.  */
-
-gdb::unique_xmalloc_ptr<char>
-gdb_realpath_keepfile (const char *filename)
-{
-  const char *base_name = lbasename (filename);
-  char *dir_name;
-  char *result;
-
-  /* Extract the basename of filename, and return immediately 
-     a copy of filename if it does not contain any directory prefix.  */
-  if (base_name == filename)
-    return gdb::unique_xmalloc_ptr<char> (xstrdup (filename));
-
-  dir_name = (char *) alloca ((size_t) (base_name - filename + 2));
-  /* Allocate enough space to store the dir_name + plus one extra
-     character sometimes needed under Windows (see below), and
-     then the closing \000 character.  */
-  strncpy (dir_name, filename, base_name - filename);
-  dir_name[base_name - filename] = '\000';
-
-#ifdef HAVE_DOS_BASED_FILE_SYSTEM
-  /* We need to be careful when filename is of the form 'd:foo', which
-     is equivalent of d:./foo, which is totally different from d:/foo.  */
-  if (strlen (dir_name) == 2 && isalpha (dir_name[0]) && dir_name[1] == ':')
-    {
-      dir_name[2] = '.';
-      dir_name[3] = '\000';
-    }
-#endif
-
-  /* Canonicalize the directory prefix, and build the resulting
-     filename.  If the dirname realpath already contains an ending
-     directory separator, avoid doubling it.  */
-  gdb::unique_xmalloc_ptr<char> path_storage = gdb_realpath (dir_name);
-  const char *real_path = path_storage.get ();
-  if (IS_DIR_SEPARATOR (real_path[strlen (real_path) - 1]))
-    result = concat (real_path, base_name, (char *) NULL);
-  else
-    result = concat (real_path, SLASH_STRING, base_name, (char *) NULL);
-
-  return gdb::unique_xmalloc_ptr<char> (result);
-}
-
-/* Return PATH in absolute form, performing tilde-expansion if necessary.
-   PATH cannot be NULL or the empty string.
-   This does not resolve symlinks however, use gdb_realpath for that.  */
-
-gdb::unique_xmalloc_ptr<char>
-gdb_abspath (const char *path)
-{
-  gdb_assert (path != NULL && path[0] != '\0');
-
-  if (path[0] == '~')
-    return gdb::unique_xmalloc_ptr<char> (tilde_expand (path));
-
-  if (IS_ABSOLUTE_PATH (path))
-    return gdb::unique_xmalloc_ptr<char> (xstrdup (path));
-
-  /* Beware the // my son, the Emacs barfs, the botch that catch...  */
-  return gdb::unique_xmalloc_ptr<char>
-    (concat (current_directory,
-            IS_DIR_SEPARATOR (current_directory[strlen (current_directory) - 1])
-            ? "" : SLASH_STRING,
-            path, (char *) NULL));
-}
-
 ULONGEST
 align_up (ULONGEST v, int n)
 {
index b2347629296ff5931e764821d9bbd16f0b3f6aa6..8ca3eb0369a9719004ba6a256eff96c52d84e7d8 100644 (file)
@@ -295,12 +295,6 @@ extern struct cleanup *make_bpstat_clear_actions_cleanup (void);
 \f
 /* Path utilities.  */
 
-extern gdb::unique_xmalloc_ptr<char> gdb_realpath (const char *);
-
-extern gdb::unique_xmalloc_ptr<char> gdb_realpath_keepfile (const char *);
-
-extern gdb::unique_xmalloc_ptr<char> gdb_abspath (const char *);
-
 extern int gdb_filename_fnmatch (const char *pattern, const char *string,
                                 int flags);