Re: [PATCH v4 1/4] cache.h: Introduce a generic "xdg_config_home_for(…)" function

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Lénaïc

This looks fine to me. I'm not 100% sold on calling the parameter prog as our program name later in the series ends up being "systemd/user" so something like "subdir" might have been better but that is not worth rerolling for.

Best Wishes

Phillip

On 24/05/2021 08:15, Lénaïc Huard wrote:
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(prog, 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@xxxxxxxxx>
---
  cache.h |  7 +++++++
  path.c  | 13 ++++++++++---
  2 files changed, 17 insertions(+), 3 deletions(-)

diff --git a/cache.h b/cache.h
index 148d9ab5f1..8a2969414a 100644
--- a/cache.h
+++ b/cache.h
@@ -1263,6 +1263,13 @@ int is_ntfs_dotgitattributes(const char *name);
   */
  int looks_like_command_line_option(const char *str);
+/**
+ * Return a newly allocated string with the evaluation of
+ * "$XDG_CONFIG_HOME/$prog/$filename" if $XDG_CONFIG_HOME is non-empty, otherwise
+ * "$HOME/.config/$prog/$filename". Return NULL upon error.
+ */
+char *xdg_config_home_for(const char *prog, 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 7b385e5eb2..3641d4c456 100644
--- a/path.c
+++ b/path.c
@@ -1498,21 +1498,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 *prog, const char *filename)
  {
  	const char *home, *config_home;
+ assert(prog);
  	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, prog, filename);
home = getenv("HOME");
  	if (home)
-		return mkpathdup("%s/.config/git/%s", home, filename);
+		return mkpathdup("%s/.config/%s/%s", home, prog, 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;





[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]

  Powered by Linux