Add get_standard_config_dir function

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.
This commit is contained in:
Tom Tromey
2020-07-05 13:02:40 -06:00
committed by Andrew Burgess
parent 5b3d3560e9
commit 8768c3e362
3 changed files with 51 additions and 0 deletions

View 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.

View 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 *

View 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. */