path.c: add git_common_path() and strbuf_git_common_path()
[gitweb.git] / path.c
diff --git a/path.c b/path.c
index a6f1cd69a06e02fb2a3881d87a32d34c1f8af854..2ebb23dd10e70b6c2ffc13a53477e515f6b080ca 100644 (file)
--- a/path.c
+++ b/path.c
@@ -503,6 +503,35 @@ void strbuf_git_path_submodule(struct strbuf *buf, const char *path,
        va_end(args);
 }
 
+static void do_git_common_path(struct strbuf *buf,
+                              const char *fmt,
+                              va_list args)
+{
+       strbuf_addstr(buf, get_git_common_dir());
+       if (buf->len && !is_dir_sep(buf->buf[buf->len - 1]))
+               strbuf_addch(buf, '/');
+       strbuf_vaddf(buf, fmt, args);
+       strbuf_cleanup_path(buf);
+}
+
+const char *git_common_path(const char *fmt, ...)
+{
+       struct strbuf *pathname = get_pathname();
+       va_list args;
+       va_start(args, fmt);
+       do_git_common_path(pathname, fmt, args);
+       va_end(args);
+       return pathname->buf;
+}
+
+void strbuf_git_common_path(struct strbuf *sb, const char *fmt, ...)
+{
+       va_list args;
+       va_start(args, fmt);
+       do_git_common_path(sb, fmt, args);
+       va_end(args);
+}
+
 int validate_headref(const char *path)
 {
        struct stat st;
@@ -584,6 +613,9 @@ char *expand_user_path(const char *path)
                        if (!home)
                                goto return_null;
                        strbuf_addstr(&user_path, home);
+#ifdef GIT_WINDOWS_NATIVE
+                       convert_slashes(user_path.buf);
+#endif
                } else {
                        struct passwd *pw = getpw_str(username, username_len);
                        if (!pw)