]> git.ipfire.org Git - thirdparty/git.git/commitdiff
cache.h: Introduce a generic "xdg_config_home_for(…)" function
authorLénaïc Huard <lenaic@lhuard.fr>
Sat, 4 Sep 2021 20:54:58 +0000 (22:54 +0200)
committerJunio C Hamano <gitster@pobox.com>
Tue, 7 Sep 2021 17:57:04 +0000 (10:57 -0700)
Current implementation of `xdg_config_home(filename)` returns
`$XDG_CONFIG_HOME/git/$filename`, with the `git` subdirectory inserted
between the `XDG_CONFIG_HOME` environment variable and the parameter.

This patch introduces a `xdg_config_home_for(subdir, filename)` function
which is more generic. It only concatenates "$XDG_CONFIG_HOME", or
"$HOME/.config" if the former isn’t defined, with the parameters,
without adding `git` in between.

`xdg_config_home(filename)` is now implemented by calling
`xdg_config_home_for("git", filename)` but this new generic function can
be used to compute the configuration directory of other programs.

Signed-off-by: Lénaïc Huard <lenaic@lhuard.fr>
Acked-by: Derrick Stolee <dstolee@microsoft.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
cache.h
path.c

diff --git a/cache.h b/cache.h
index ba04ff8bd36b3627c95fc7b9b3fc2aec2d55c205..2a0fb3e4ba16f00ddb6ab3de4531eb2a65ed8c9f 100644 (file)
--- a/cache.h
+++ b/cache.h
@@ -1286,6 +1286,13 @@ int is_ntfs_dotmailmap(const char *name);
  */
 int looks_like_command_line_option(const char *str);
 
+/**
+ * Return a newly allocated string with the evaluation of
+ * "$XDG_CONFIG_HOME/$subdir/$filename" if $XDG_CONFIG_HOME is non-empty, otherwise
+ * "$HOME/.config/$subdir/$filename". Return NULL upon error.
+ */
+char *xdg_config_home_for(const char *subdir, const char *filename);
+
 /**
  * Return a newly allocated string with the evaluation of
  * "$XDG_CONFIG_HOME/git/$filename" if $XDG_CONFIG_HOME is non-empty, otherwise
diff --git a/path.c b/path.c
index 7bccd830e95890c16a93a52801c008a2b634ca24..1b1de3be0932d8fb5a6380f2dd1a579b4d020f71 100644 (file)
--- a/path.c
+++ b/path.c
@@ -1503,21 +1503,28 @@ int looks_like_command_line_option(const char *str)
        return str && str[0] == '-';
 }
 
-char *xdg_config_home(const char *filename)
+char *xdg_config_home_for(const char *subdir, const char *filename)
 {
        const char *home, *config_home;
 
+       assert(subdir);
        assert(filename);
        config_home = getenv("XDG_CONFIG_HOME");
        if (config_home && *config_home)
-               return mkpathdup("%s/git/%s", config_home, filename);
+               return mkpathdup("%s/%s/%s", config_home, subdir, filename);
 
        home = getenv("HOME");
        if (home)
-               return mkpathdup("%s/.config/git/%s", home, filename);
+               return mkpathdup("%s/.config/%s/%s", home, subdir, filename);
+
        return NULL;
 }
 
+char *xdg_config_home(const char *filename)
+{
+       return xdg_config_home_for("git", filename);
+}
+
 char *xdg_cache_home(const char *filename)
 {
        const char *home, *cache_home;