aboutsummaryrefslogtreecommitdiff
path: root/gdbsupport/pathstuff.cc
diff options
context:
space:
mode:
authorAndrew Burgess <andrew.burgess@embecosm.com>2020-09-25 14:50:56 +0100
committerAndrew Burgess <andrew.burgess@embecosm.com>2020-11-02 17:42:11 +0000
commit64aaad6349d2b2c45063a5383f877ce9a3a0c354 (patch)
tree80261e6099c2421820a8e8a8f025a13cd9995c27 /gdbsupport/pathstuff.cc
parent8768c3e3629657d9728487c680b173868baeee7f (diff)
downloadbinutils-64aaad6349d2b2c45063a5383f877ce9a3a0c354.zip
binutils-64aaad6349d2b2c45063a5383f877ce9a3a0c354.tar.gz
binutils-64aaad6349d2b2c45063a5383f877ce9a3a0c354.tar.bz2
gdb: use get_standard_config_dir when looking for .gdbinit
This commit effectively changes the default location of the .gdbinit file, while maintaining backward compatibility. For non Apple hosts the .gdbinit file will now be looked for in the following locations: $XDG_CONFIG_HOME/gdb/gdbinit $HOME/.config/gdb/gdbinit $HOME/.gdbinit On Apple hosts the search order is instead: $HOME/Library/Preferences/gdb/gdbinit $HOME/.gdbinit I've performed an extensive rewrite of the documentation, moving all information about initialization files and where to find them into a new @node, text from other areas has been moved into this one location, and other areas cross-reference to this new @node as much as possible. gdb/ChangeLog: * NEWS: Mention changes to config file search path. * main.c gdb/doc/ChangeLog: * gdb.texinfo (Mode Options): Descriptions of initialization files has been moved to 'Initialization Files'. (Startup): Likewise. (Initialization Files): New node. (gdb man): Update to mention alternative file paths. (gdbinit man): Likewise.
Diffstat (limited to 'gdbsupport/pathstuff.cc')
-rw-r--r--gdbsupport/pathstuff.cc49
1 files changed, 49 insertions, 0 deletions
diff --git a/gdbsupport/pathstuff.cc b/gdbsupport/pathstuff.cc
index 9fb5e5c..a52e53b 100644
--- a/gdbsupport/pathstuff.cc
+++ b/gdbsupport/pathstuff.cc
@@ -23,6 +23,10 @@
#include "filenames.h"
#include "gdb_tilde_expand.h"
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <unistd.h>
+
#ifdef USE_WIN32API
#include <windows.h>
#endif
@@ -298,6 +302,51 @@ get_standard_config_dir ()
return {};
}
+/* See pathstuff.h. */
+
+std::string
+get_standard_config_filename (const char *filename)
+{
+ std::string config_dir = get_standard_config_dir ();
+ if (config_dir != "")
+ {
+ const char *tmp = (*filename == '.') ? (filename + 1) : filename;
+ std::string path = config_dir + SLASH_STRING + std::string (tmp);
+ return path;
+ }
+
+ return {};
+}
+
+/* See pathstuff.h. */
+
+std::string
+find_gdb_home_config_file (const char *name, struct stat *buf)
+{
+ gdb_assert (name != nullptr);
+ gdb_assert (*name != '\0');
+
+ std::string config_dir_file = get_standard_config_filename (name);
+ if (!config_dir_file.empty ())
+ {
+ if (stat (config_dir_file.c_str (), buf) == 0)
+ return config_dir_file;
+ }
+
+ const char *homedir = getenv ("HOME");
+ if (homedir != nullptr)
+ {
+ /* Make sure the path is absolute and tilde-expanded. */
+ gdb::unique_xmalloc_ptr<char> abs (gdb_abspath (homedir));
+ std::string path = (std::string (abs.get ()) + SLASH_STRING
+ + std::string (name));
+ if (stat (path.c_str (), buf) == 0)
+ return path;
+ }
+
+ return {};
+}
+
/* See gdbsupport/pathstuff.h. */
const char *