Now, the following locations are searched, and the first existing file
is used as user config file:
- $XDG_CONFIG_HOME/wget/config
- ~/.config/wget/config
- ~/.wgetrc
This is a backward-compatible change, and care have been taked to preserve
fuzzing-related logic: when fuzzing expansion of "~/.wgetrc" is returned even
if it doesn't exist.
* src/init.c (wgetrc_user_file_name): Search for the config file in
locations prescribed by XDG standard.
---
doc/wget.texi | 6 ++++--
src/init.c | 29 +++++++++++++++++++++++++++++
2 files changed, 33 insertions(+), 2 deletions(-)
diff --git a/doc/wget.texi b/doc/wget.texi
index ab4ff1dc..04df4591 100644
--- a/doc/wget.texi
+++ b/doc/wget.texi
@@ -207,7 +207,7 @@ If both --config and --no-config are given, --no-config is
ignored.
@item /usr/local/etc/wgetrc
Default location of the @dfn{global} startup file.
-@item .wgetrc
+@item ${XDG_CONFIG_HOME:-~/.config}/wget/config, ~/.wgetrc
User startup file.
@end table
@c man end
@@ -3196,7 +3196,9 @@ Then it will look for the user's file. If the
environmental variable
@code{WGETRC} is set, Wget will try to load that file. Failing that, no
further attempts will be made.
-If @code{WGETRC} is not set, Wget will try to load @file{$HOME/.wgetrc}.
+If @code{WGETRC} is not set, Wget will load first existing of
+@file{$XDG_CONFIG_HOME:-~/.config}/, @file{$HOME/.config/wget/config}
+and @file{$HOME/.wgetrc}, if any.
The fact that user's settings are loaded after the system-wide ones
means that in case of collision user's wgetrc @emph{overrides} the
diff --git a/src/init.c b/src/init.c
index 1c452836..f2835f82 100644
--- a/src/init.c
+++ b/src/init.c
@@ -611,6 +611,35 @@ char *
wgetrc_user_file_name (void)
{
char *file = NULL;
+ const char *base = NULL;
+ const char *suffix = NULL;
+
+ base = getenv("XDG_CONFIG_HOME");
+ suffix = "wget/config";
+
+ // Two conditions, since XDG standard uses "is either not set or empty"
wording.
+ // https://specifications.freedesktop.org/basedir-spec/0.8/#variables
+ if (!(base && *base))
+ {
+ base = opt.homedir;
+ suffix = ".config/wget/config";
+ }
+
+ if (base)
+ {
+ file = ajoin_dir_file (base, suffix);
+ if (!file)
+ return NULL;
+
+ if (file_exists_p (file, NULL))
+ {
+ return file;
+ }
+ else
+ {
+ xfree (file);
+ }
+ }
/* Join opt.homedir ($HOME) and ".wgetrc" */
if (opt.homedir) {
--
2.47.0