From 2c4b7707f7e1d591ec1765ab7057a03283841c3e Mon Sep 17 00:00:00 2001 From: "Shawn O. Pearce" Date: Wed, 31 Dec 2008 16:06:48 -0800 Subject: [PATCH] Add git__fmt as an easier to use snprintf Checking the return value of snprintf is a pain, as it must be >= 0 and < sizeof(buffer). git__fmt is a simple wrapper to perform these checks. Signed-off-by: Shawn O. Pearce --- src/common.h | 1 + src/util.c | 15 +++++++++++++++ src/util.h | 2 ++ 3 files changed, 18 insertions(+) diff --git a/src/common.h b/src/common.h index 61950787a..9a827fad4 100644 --- a/src/common.h +++ b/src/common.h @@ -19,6 +19,7 @@ #endif #include "cc-compat.h" +#include "git/common.h" #include "util.h" #include "thread-utils.h" #include "errors.h" diff --git a/src/util.c b/src/util.c index feb1bd8ab..80829e69e 100644 --- a/src/util.c +++ b/src/util.c @@ -1,5 +1,7 @@ #define GIT__NO_HIDE_MALLOC #include "common.h" +#include +#include void *git__malloc(size_t n) { @@ -25,6 +27,19 @@ char *git__strdup(const char *s) return r; } +int git__fmt(char *buf, size_t buf_sz, const char *fmt, ...) +{ + va_list va; + int r; + + va_start(va, fmt); + r = vsnprintf(buf, buf_sz, fmt, va); + va_end(va); + if (r < 0 || r >= buf_sz) + return GIT_ERROR; + return r; +} + int git__prefixcmp(const char *str, const char *prefix) { for (;;) { diff --git a/src/util.h b/src/util.h index 8e8169ce5..018fce57e 100644 --- a/src/util.h +++ b/src/util.h @@ -26,6 +26,8 @@ extern char *git__strdup(const char *); # define strdup(a) GIT__FORBID_MALLOC #endif +extern int git__fmt(char *, size_t, const char *, ...) + GIT_FORMAT_PRINTF(3, 4); extern int git__prefixcmp(const char *str, const char *prefix); extern int git__suffixcmp(const char *str, const char *suffix);