Add get_standard_config_dir function
authorTom Tromey <tom@tromey.com>
Sun, 5 Jul 2020 19:02:40 +0000 (13:02 -0600)
committerAndrew Burgess <andrew.burgess@embecosm.com>
Mon, 2 Nov 2020 17:42:10 +0000 (17:42 +0000)
This adds a new get_standard_config_dir, which returns the name of the
configuration directory.  In XDG, this is ~/.config/gdb/.  Future
patches will make use of this.

2020-07-05  Tom Tromey  <tom@tromey.com>

* pathstuff.h (get_standard_config_dir): Declare.
* pathstuff.cc (get_standard_config_dir): New function.

gdbsupport/ChangeLog
gdbsupport/pathstuff.cc
gdbsupport/pathstuff.h

index e6319d64e9475f1110e7bae6528d3c2eebb6859b..1d83cbb505ef85b2abadd783357590cb8cf106cc 100644 (file)
@@ -1,3 +1,8 @@
+2020-11-02  Tom Tromey  <tom@tromey.com>
+
+       * pathstuff.h (get_standard_config_dir): Declare.
+       * pathstuff.cc (get_standard_config_dir): New function.
+
 2020-11-02  Simon Marchi  <simon.marchi@efficios.com>
 
        * common-exceptions.h: Fix indentation.
index 1f60fd0c986bce792d21a235f3e34d6736ac3361..9fb5e5cf614de123721570a64fd0ab390ca80468 100644 (file)
@@ -266,6 +266,38 @@ get_standard_temp_dir ()
 #endif
 }
 
+/* See pathstuff.h.  */
+
+std::string
+get_standard_config_dir ()
+{
+#ifdef __APPLE__
+#define HOME_CONFIG_DIR "Library/Preferences"
+#else
+#define HOME_CONFIG_DIR ".config"
+#endif
+
+#ifndef __APPLE__
+  const char *xdg_config_home = getenv ("XDG_CONFIG_HOME");
+  if (xdg_config_home != NULL)
+    {
+      /* Make sure the path is absolute and tilde-expanded.  */
+      gdb::unique_xmalloc_ptr<char> abs (gdb_abspath (xdg_config_home));
+      return string_printf ("%s/gdb", abs.get ());
+    }
+#endif
+
+  const char *home = getenv ("HOME");
+  if (home != NULL)
+    {
+      /* Make sure the path is absolute and tilde-expanded.  */
+      gdb::unique_xmalloc_ptr<char> abs (gdb_abspath (home));
+      return string_printf ("%s/" HOME_CONFIG_DIR "/gdb", abs.get ());
+    }
+
+  return {};
+}
+
 /* See gdbsupport/pathstuff.h.  */
 
 const char *
index 4bc0d892119d6ac69c807044202c9119653020a1..85241bc8c7c483e74c73ec42104ebc42ca7ea64b 100644 (file)
@@ -85,6 +85,20 @@ extern std::string get_standard_cache_dir ();
 
 extern std::string get_standard_temp_dir ();
 
+/* Get the usual user config directory for the current platform.
+
+   On Linux, it follows the XDG Base Directory specification: use
+   $XDG_CONFIG_HOME/gdb if the XDG_CONFIG_HOME environment variable is
+   defined, otherwise $HOME/.config.
+
+   On macOS, it follows the local convention and uses
+   ~/Library/Preferences/gdb.
+
+  The return value is absolute and tilde-expanded.  Return an empty
+  string if neither XDG_CONFIG_HOME (on Linux) or HOME are defined.  */
+
+extern std::string get_standard_config_dir ();
+
 /* Return the file name of the user's shell.  Normally this comes from
    the SHELL environment variable.  */