]> rtime.felk.cvut.cz Git - ulut.git/blob - ulut/ul_dbuffprintf.c
uLUt: Function to append printf formatted text to dbuff moved to common library.
[ulut.git] / ulut / ul_dbuffprintf.c
1 #include <stdarg.h>
2 #include <stdio.h>
3 #include "ul_dbuff.h"
4 #include "ul_dbuffprintf.h"
5
6 int ul_dbuff_printf(ul_dbuff_t *dbuf, const char *format, ...)
7 {
8   int len;
9   va_list ap;
10   va_start(ap, format);
11   len = ul_dbuff_vprintf(dbuf, format, ap);
12   va_end(ap);
13   return len;
14 }
15
16 int ul_dbuff_vprintf(ul_dbuff_t *dbuf, const char *format, va_list ap)
17 {
18   int space = dbuf->capacity - dbuf->len;
19   int len, pos;
20   va_list aq;
21
22   va_copy(aq, ap);
23   pos = dbuf->len;
24   len = vsnprintf((char*)dbuf->data + pos, space, format, ap);
25   if(len >= space) {
26     ul_dbuff_set_len(dbuf, pos + len + 2);
27     if(dbuf->capacity > pos) {
28       space = dbuf->capacity - pos;
29       len = vsnprintf((char*)dbuf->data + pos, space, format, aq);
30     }
31   }
32   va_end(aq);
33   dbuf->len = pos + len;
34   if(dbuf->len > dbuf->capacity)
35     dbuf->len = dbuf->capacity;
36   return len;
37 }