source: bootcd/isolinux/syslinux-6.03/com32/lib/bufprintf.c

Last change on this file was e16e8f2, checked in by Edwin Eefting <edwin@datux.nl>, 3 years ago

bootstuff

  • Property mode set to 100644
File size: 870 bytes
Line 
1#include <stdarg.h>
2#include <stdio.h>
3#include <stdlib.h>
4#include <bufprintf.h>
5
6int vbufprintf(struct print_buf *buf, const char *format, va_list ap)
7{
8    va_list ap2;
9    int rv;
10
11    va_copy(ap2, ap);
12    rv = vsnprintf(NULL, 0, format, ap);
13
14    /* >= to make sure we have space for terminating null */
15    if (rv + buf->len >= buf->size) {
16        size_t newsize = rv + buf->len + BUFPAD;
17        char *newbuf;
18
19        newbuf = realloc(buf->buf, newsize);
20        if (!newbuf) {
21            rv = -1;
22            goto bail;
23        }
24
25        buf->buf = newbuf;
26        buf->size = newsize;
27    }
28
29    rv = vsnprintf(buf->buf + buf->len, buf->size - buf->len, format, ap2);
30    buf->len += rv;
31bail:
32    va_end(ap2);
33    return rv;
34}
35
36int bufprintf(struct print_buf *buf, const char *format, ...)
37{
38    va_list ap;
39    int rv;
40
41    va_start(ap, format);
42    rv = vbufprintf(buf, format, ap);
43    va_end(ap);
44    return rv;
45}
Note: See TracBrowser for help on using the repository browser.