Browse Source

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 <gitster@pobox.com>
maint
Alex Riesen 17 years ago committed by Junio C Hamano
parent
commit
fe2d7776d5
  1. 2
      cache.h
  2. 23
      path.c

2
cache.h

@ -482,6 +482,8 @@ extern int check_repository_format(void); @@ -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)));

23
path.c

@ -47,6 +47,29 @@ char *mksnpath(char *buf, size_t n, const char *fmt, ...) @@ -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;

Loading…
Cancel
Save