From: Alex Riesen Date: Mon, 27 Oct 2008 09:22:21 +0000 (+0100) Subject: Add git_snpath: a .git path formatting routine with output buffer X-Git-Tag: v1.6.0.4~4^2~3 X-Git-Url: https://git.tokkee.org/?a=commitdiff_plain;h=fe2d7776d5191896e361973f478ca078fa95b324;p=git.git Add git_snpath: a .git path formatting routine with output buffer The function's purpose is to replace git_path where the buffer of formatted path may not be reused by subsequent calls of the function or will be copied anyway. Signed-off-by: Junio C Hamano --- diff --git a/cache.h b/cache.h index aea13b082..3d5a08ea8 100644 --- a/cache.h +++ b/cache.h @@ -482,6 +482,8 @@ extern int check_repository_format(void); extern char *mksnpath(char *buf, size_t n, const char *fmt, ...) __attribute__((format (printf, 3, 4))); +extern char *git_snpath(char *buf, size_t n, const char *fmt, ...) + __attribute__((format (printf, 3, 4))); /* Return a statically allocated filename matching the sha1 signature */ extern char *mkpath(const char *fmt, ...) __attribute__((format (printf, 1, 2))); diff --git a/path.c b/path.c index 8b64878c2..85ab28a0f 100644 --- a/path.c +++ b/path.c @@ -47,6 +47,29 @@ char *mksnpath(char *buf, size_t n, const char *fmt, ...) return cleanup_path(buf); } +char *git_snpath(char *buf, size_t n, const char *fmt, ...) +{ + const char *git_dir = get_git_dir(); + va_list args; + size_t len; + + len = strlen(git_dir); + if (n < len + 1) + goto bad; + memcpy(buf, git_dir, len); + if (len && !is_dir_sep(git_dir[len-1])) + buf[len++] = '/'; + va_start(args, fmt); + len += vsnprintf(buf + len, n - len, fmt, args); + va_end(args); + if (len >= n) + goto bad; + return cleanup_path(buf); +bad: + snprintf(buf, n, bad_path); + return buf; +} + char *mkpath(const char *fmt, ...) { va_list args;