Add mksnpath which allows you to specify the output buffer
This is just vsnprintf's but additionally calls cleanup_path() on the result. To be used as alternatives to mkpath() where the buffer for the created path may not be reused by subsequent calls of the same formatting function. Signed-off-by: Alex Riesen <raa.lkml@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
9fe7a643fc
commit
108bebeab3
3
cache.h
3
cache.h
@ -480,6 +480,9 @@ extern int check_repository_format(void);
|
|||||||
#define DATA_CHANGED 0x0020
|
#define DATA_CHANGED 0x0020
|
||||||
#define TYPE_CHANGED 0x0040
|
#define TYPE_CHANGED 0x0040
|
||||||
|
|
||||||
|
extern char *mksnpath(char *buf, size_t n, const char *fmt, ...)
|
||||||
|
__attribute__((format (printf, 3, 4)));
|
||||||
|
|
||||||
/* Return a statically allocated filename matching the sha1 signature */
|
/* Return a statically allocated filename matching the sha1 signature */
|
||||||
extern char *mkpath(const char *fmt, ...) __attribute__((format (printf, 1, 2)));
|
extern char *mkpath(const char *fmt, ...) __attribute__((format (printf, 1, 2)));
|
||||||
extern char *git_path(const char *fmt, ...) __attribute__((format (printf, 1, 2)));
|
extern char *git_path(const char *fmt, ...) __attribute__((format (printf, 1, 2)));
|
||||||
|
15
path.c
15
path.c
@ -32,6 +32,21 @@ static char *cleanup_path(char *path)
|
|||||||
return path;
|
return path;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
char *mksnpath(char *buf, size_t n, const char *fmt, ...)
|
||||||
|
{
|
||||||
|
va_list args;
|
||||||
|
unsigned len;
|
||||||
|
|
||||||
|
va_start(args, fmt);
|
||||||
|
len = vsnprintf(buf, n, fmt, args);
|
||||||
|
va_end(args);
|
||||||
|
if (len >= n) {
|
||||||
|
snprintf(buf, n, bad_path);
|
||||||
|
return buf;
|
||||||
|
}
|
||||||
|
return cleanup_path(buf);
|
||||||
|
}
|
||||||
|
|
||||||
char *mkpath(const char *fmt, ...)
|
char *mkpath(const char *fmt, ...)
|
||||||
{
|
{
|
||||||
va_list args;
|
va_list args;
|
||||||
|
Loading…
Reference in New Issue
Block a user