From 1ffd0c0ac8da565ef6087782d84b2b61bfb9c19a Mon Sep 17 00:00:00 2001 From: Pavel Pisa Date: Sun, 19 Feb 2012 16:58:37 +0100 Subject: [PATCH] uLUt: Function to append printf formatted text to dbuff moved to common library. Signed-off-by: Pavel Pisa --- ulut/Makefile.omk | 6 +++--- ulut/ul_dbuffprintf.c | 37 +++++++++++++++++++++++++++++++++++++ ulut/ul_dbuffprintf.h | 10 ++++++++++ 3 files changed, 50 insertions(+), 3 deletions(-) create mode 100644 ulut/ul_dbuffprintf.c create mode 100644 ulut/ul_dbuffprintf.h diff --git a/ulut/Makefile.omk b/ulut/Makefile.omk index a2680e0..d93c4df 100644 --- a/ulut/Makefile.omk +++ b/ulut/Makefile.omk @@ -15,7 +15,7 @@ ulut_HEADERS = ul_dbuff.h ul_gavl.h ul_gavlcust.h \ ul_list.h ul_listbase.h ul_utdefs.h ul_utmalloc.h \ ul_uniqid.h ul_dbufflog.h ul_log.h ul_logbase.h \ ul_logreg.h ul_cbuff.h ul_dqfifo.h ul_hashtab.h \ - ul_hashtabcust.h + ul_hashtabcust.h ul_dbuffprintf.h ifneq ($(CONFIG_OC_ULUTMINIMAL),y) ulut_HEADERS += ul_evcbase.h @@ -41,11 +41,11 @@ ulut_SOURCES = ul_dbufbase.c ul_dbufmore.c ul_gsa.c ul_gsacust.c \ ul_gavlprim.c ul_hashtabprim.c ul_hptree.c \ ul_htimer.c ul_htimbase.c ul_htimroot.c \ ul_htimdefault.c ul_dbufflog.c ul_logbase.c \ - ul_cbuff.c + ul_cbuff.c ul_dbuffprintf.c ifneq ($(CONFIG_OC_ULUTMINIMAL),y) ulut_SOURCES += ul_evcbase.c ul_gavl.c ul_htimmstime.c ul_logreg.c \ - ul_uniqid.c + ul_uniqid.c endif lib_LOADLIBES = ulut diff --git a/ulut/ul_dbuffprintf.c b/ulut/ul_dbuffprintf.c new file mode 100644 index 0000000..33e440d --- /dev/null +++ b/ulut/ul_dbuffprintf.c @@ -0,0 +1,37 @@ +#include +#include +#include "ul_dbuff.h" +#include "ul_dbuffprintf.h" + +int ul_dbuff_printf(ul_dbuff_t *dbuf, const char *format, ...) +{ + int len; + va_list ap; + va_start(ap, format); + len = ul_dbuff_vprintf(dbuf, format, ap); + va_end(ap); + return len; +} + +int ul_dbuff_vprintf(ul_dbuff_t *dbuf, const char *format, va_list ap) +{ + int space = dbuf->capacity - dbuf->len; + int len, pos; + va_list aq; + + va_copy(aq, ap); + pos = dbuf->len; + len = vsnprintf((char*)dbuf->data + pos, space, format, ap); + if(len >= space) { + ul_dbuff_set_len(dbuf, pos + len + 2); + if(dbuf->capacity > pos) { + space = dbuf->capacity - pos; + len = vsnprintf((char*)dbuf->data + pos, space, format, aq); + } + } + va_end(aq); + dbuf->len = pos + len; + if(dbuf->len > dbuf->capacity) + dbuf->len = dbuf->capacity; + return len; +} diff --git a/ulut/ul_dbuffprintf.h b/ulut/ul_dbuffprintf.h new file mode 100644 index 0000000..9f31374 --- /dev/null +++ b/ulut/ul_dbuffprintf.h @@ -0,0 +1,10 @@ +#ifndef _UL_DBUFF_PRINTF_H +#define _UL_DBUFF_PRINTF_H + +#include +#include + +int ul_dbuff_printf(ul_dbuff_t *dbuf, const char *format, ...); +int ul_dbuff_vprintf(ul_dbuff_t *dbuf, const char *format, va_list ap); + +#endif /*_UL_DBUFF_PRINTF_H*/ -- 2.39.2