aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlex Riesen <raa.lkml@gmail.com>2008-10-26 22:59:13 +0100
committerJunio C Hamano <gitster@pobox.com>2008-10-26 22:08:58 -0700
commit108bebeab31881654b7b0f1b5b393a6655d74d3f (patch)
tree49568beafbd6e9d84bcd200f6070b45b6ea74c8e
parent9fe7a643fcc56ca1c17afec5d5f8adca10cabdd1 (diff)
downloadgit-108bebeab31881654b7b0f1b5b393a6655d74d3f.tar.gz
git-108bebeab31881654b7b0f1b5b393a6655d74d3f.tar.xz
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>
-rw-r--r--cache.h3
-rw-r--r--path.c15
2 files changed, 18 insertions, 0 deletions
diff --git a/cache.h b/cache.h
index 884fae826..aea13b082 100644
--- a/cache.h
+++ b/cache.h
@@ -480,6 +480,9 @@ extern int check_repository_format(void);
#define DATA_CHANGED 0x0020
#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 */
extern char *mkpath(const char *fmt, ...) __attribute__((format (printf, 1, 2)));
extern char *git_path(const char *fmt, ...) __attribute__((format (printf, 1, 2)));
diff --git a/path.c b/path.c
index 76e887262..8b64878c2 100644
--- a/path.c
+++ b/path.c
@@ -32,6 +32,21 @@ static char *cleanup_path(char *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, ...)
{
va_list args;