From: Vicent Marti Date: Tue, 22 Feb 2011 12:58:54 +0000 (+0200) Subject: Add printf method to the File Buffer X-Git-Url: https://git.proxmox.com/?a=commitdiff_plain;h=5591ea15a50d3214830a3d152a78a34bcb5f1966;p=libgit2.git Add printf method to the File Buffer Signed-off-by: Vicent Marti --- diff --git a/src/filebuf.c b/src/filebuf.c index 58ff0b648..ace7428e0 100644 --- a/src/filebuf.c +++ b/src/filebuf.c @@ -22,6 +22,7 @@ * the Free Software Foundation, 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301, USA. */ +#include #include "common.h" #include "filebuf.h" @@ -259,3 +260,27 @@ int git_filebuf_reserve(git_filebuf *file, void **buffer, size_t len) return GIT_SUCCESS; } +int git_filebuf_printf(git_filebuf *file, const char *format, ...) +{ + va_list arglist; + size_t space_left = file->buf_size - file->buf_pos; + int len, error; + + va_start(arglist, format); + + len = vsnprintf((char *)file->buffer + file->buf_pos, space_left, format, arglist); + + if (len < 0 || (size_t)len >= space_left) { + if ((error = flush_buffer(file)) < GIT_SUCCESS) + return error; + + len = vsnprintf((char *)file->buffer + file->buf_pos, space_left, format, arglist); + if (len < 0 || (size_t)len > file->buf_size) + return GIT_ENOMEM; + } + + file->buf_pos += len; + return GIT_SUCCESS; + +} + diff --git a/src/filebuf.h b/src/filebuf.h index f2e4dba51..b2b5eaf4b 100644 --- a/src/filebuf.h +++ b/src/filebuf.h @@ -31,6 +31,7 @@ typedef struct git_filebuf git_filebuf; int git_filebuf_write(git_filebuf *lock, void *buff, size_t len); int git_filebuf_reserve(git_filebuf *file, void **buff, size_t len); +int git_filebuf_printf(git_filebuf *file, const char *format, ...); int git_filebuf_open(git_filebuf *lock, const char *path, int flags); int git_filebuf_commit(git_filebuf *lock);