diff options
-rw-r--r-- | gdb/ChangeLog | 8 | ||||
-rw-r--r-- | gdb/Makefile.in | 3 | ||||
-rw-r--r-- | gdb/common/gdb_tilde_expand.c | 82 | ||||
-rw-r--r-- | gdb/common/gdb_tilde_expand.h | 27 | ||||
-rw-r--r-- | gdb/gdbserver/ChangeLog | 5 | ||||
-rw-r--r-- | gdb/gdbserver/Makefile.in | 2 |
6 files changed, 127 insertions, 0 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index e9cb48c..6f9c7e6 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,11 @@ +2017-10-04 Sergio Durigan Junior <sergiodj@redhat.com> + + * Makefile.in (SFILES): Add gdb_tilde_expand.c. + (HFILES_NO_SRCDIR): Add gdb_tilde_expand.h. + (COMMON_OBS): Add gdb_tilde_expand.o. + * common/gdb_tilde_expand.c: New file. + * common/gdb_tilde_expand.h: Likewise. + 2017-10-03 Maciej W. Rozycki <macro@imgtec.com> * gdbarch.sh (objfile): Remove duplicate declaration. diff --git a/gdb/Makefile.in b/gdb/Makefile.in index f3f1d40..9454e3a 100644 --- a/gdb/Makefile.in +++ b/gdb/Makefile.in @@ -1248,6 +1248,7 @@ SFILES = \ common/filestuff.c \ common/format.c \ common/job-control.c \ + common/gdb_tilde_expand.c \ common/gdb_vecs.c \ common/new-op.c \ common/print-utils.c \ @@ -1532,6 +1533,7 @@ HFILES_NO_SRCDIR = \ common/fileio.h \ common/format.h \ common/gdb_assert.h \ + common/gdb_tilde_expand.h \ common/gdb_locale.h \ common/gdb_setjmp.h \ common/gdb_signals.h \ @@ -1737,6 +1739,7 @@ COMMON_OBS = $(DEPFILES) $(CONFIG_OBS) $(YYOBJ) \ frame-unwind.o \ gcore.o \ gdb_bfd.o \ + gdb_tilde_expand.o \ gdb-dlfcn.o \ gdb_obstack.o \ gdb_regex.o \ diff --git a/gdb/common/gdb_tilde_expand.c b/gdb/common/gdb_tilde_expand.c new file mode 100644 index 0000000..8dd9423 --- /dev/null +++ b/gdb/common/gdb_tilde_expand.c @@ -0,0 +1,82 @@ +/* Perform tilde expansion on paths for GDB and gdbserver. + + Copyright (C) 2017 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 "gdb_tilde_expand.h" +#include <glob.h> + +/* RAII-style class wrapping "glob". */ + +class gdb_glob +{ +public: + /* Construct a "gdb_glob" object by calling "glob" with the provided + parameters. This function can throw if "glob" fails. */ + gdb_glob (const char *pattern, int flags, + int (*errfunc) (const char *epath, int eerrno)) + { + int ret = glob (pattern, flags, errfunc, &m_glob); + + if (ret != 0) + { + if (ret == GLOB_NOMATCH) + error (_("Could not find a match for '%s'."), pattern); + else + error (_("glob could not process pattern '%s'."), + pattern); + } + } + + /* Destroy the object and free M_GLOB. */ + ~gdb_glob () + { + globfree (&m_glob); + } + + /* Return the GL_PATHC component of M_GLOB. */ + int pathc () const + { + return m_glob.gl_pathc; + } + + /* Return the GL_PATHV component of M_GLOB. */ + char **pathv () const + { + return m_glob.gl_pathv; + } + +private: + /* The actual glob object we're dealing with. */ + glob_t m_glob; +}; + +/* See common/gdb_tilde_expand.h. */ + +std::string +gdb_tilde_expand (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. */ + std::string expanded_dir = glob.pathv ()[0]; + + return expanded_dir; +} diff --git a/gdb/common/gdb_tilde_expand.h b/gdb/common/gdb_tilde_expand.h new file mode 100644 index 0000000..2ec0563 --- /dev/null +++ b/gdb/common/gdb_tilde_expand.h @@ -0,0 +1,27 @@ +/* Perform tilde expansion on paths for GDB and gdbserver. + + Copyright (C) 2017 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 GDB_TILDE_EXPAND_H +#define GDB_TILDE_EXPAND_H + +/* Perform path expansion (i.e., tilde expansion) on DIR, and return + the full path. */ +extern std::string gdb_tilde_expand (const char *dir); + +#endif /* ! GDB_TILDE_EXPAND_H */ diff --git a/gdb/gdbserver/ChangeLog b/gdb/gdbserver/ChangeLog index 67223a0..3de4b10 100644 --- a/gdb/gdbserver/ChangeLog +++ b/gdb/gdbserver/ChangeLog @@ -1,3 +1,8 @@ +2017-10-04 Sergio Durigan Junior <sergiodj@redhat.com> + + * Makefile.in (SFILES): Add $(srcdir)/common/gdb_tilde_expand.c. + (OBS): Add gdb_tilde_expand.o. + 2017-10-02 Simon Marchi <simon.marchi@ericsson.com> * lynx-i386-low.c (lynx_i386_arch_setup): Call init_target_desc. diff --git a/gdb/gdbserver/Makefile.in b/gdb/gdbserver/Makefile.in index 1bbe515..6c931ba 100644 --- a/gdb/gdbserver/Makefile.in +++ b/gdb/gdbserver/Makefile.in @@ -205,6 +205,7 @@ SFILES = \ $(srcdir)/common/fileio.c \ $(srcdir)/common/filestuff.c \ $(srcdir)/common/job-control.c \ + $(srcdir)/common/gdb_tilde_expand.c \ $(srcdir)/common/gdb_vecs.c \ $(srcdir)/common/new-op.c \ $(srcdir)/common/print-utils.c \ @@ -247,6 +248,7 @@ OBS = \ fileio.o \ filestuff.o \ format.o \ + gdb_tilde_expand.o \ gdb_vecs.o \ hostio.o \ inferiors.o \ |