]> rtime.felk.cvut.cz Git - ulut.git/commitdiff
uLUt: Function to append printf formatted text to dbuff moved to common library.
authorPavel Pisa <pisa@cmp.felk.cvut.cz>
Sun, 19 Feb 2012 15:58:37 +0000 (16:58 +0100)
committerPavel Pisa <pisa@cmp.felk.cvut.cz>
Sun, 19 Feb 2012 15:58:37 +0000 (16:58 +0100)
Signed-off-by: Pavel Pisa <pisa@cmp.felk.cvut.cz>
ulut/Makefile.omk
ulut/ul_dbuffprintf.c [new file with mode: 0644]
ulut/ul_dbuffprintf.h [new file with mode: 0644]

index a2680e034607ac30e39df22f730b6755d034ebcc..d93c4df0da5b368654d008c17b049f548a9ad09b 100644 (file)
@@ -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 (file)
index 0000000..33e440d
--- /dev/null
@@ -0,0 +1,37 @@
+#include <stdarg.h>
+#include <stdio.h>
+#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 (file)
index 0000000..9f31374
--- /dev/null
@@ -0,0 +1,10 @@
+#ifndef _UL_DBUFF_PRINTF_H
+#define _UL_DBUFF_PRINTF_H
+
+#include <stdarg.h>
+#include <ul_dbuff.h>
+
+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*/