31 #include <stdio.h> |
31 #include <stdio.h> |
32 #include <string.h> |
32 #include <string.h> |
33 |
33 |
34 #define UCX_PRINTF_BUFSIZE 256 |
34 #define UCX_PRINTF_BUFSIZE 256 |
35 |
35 |
36 int cx_fprintf(void *stream, cx_write_func wfc, const char *fmt, ...) { |
36 int cx_fprintf(void *stream, cx_write_func wfc, char const *fmt, ...) { |
37 int ret; |
37 int ret; |
38 va_list ap; |
38 va_list ap; |
39 va_start(ap, fmt); |
39 va_start(ap, fmt); |
40 ret = cx_vfprintf(stream, wfc, fmt, ap); |
40 ret = cx_vfprintf(stream, wfc, fmt, ap); |
41 va_end(ap); |
41 va_end(ap); |
42 return ret; |
42 return ret; |
43 } |
43 } |
44 |
44 |
45 int cx_vfprintf(void *stream, cx_write_func wfc, const char *fmt, va_list ap) { |
45 int cx_vfprintf(void *stream, cx_write_func wfc, char const *fmt, va_list ap) { |
46 char buf[UCX_PRINTF_BUFSIZE]; |
46 char buf[UCX_PRINTF_BUFSIZE]; |
47 va_list ap2; |
47 va_list ap2; |
48 va_copy(ap2, ap); |
48 va_copy(ap2, ap); |
49 int ret = vsnprintf(buf, UCX_PRINTF_BUFSIZE, fmt, ap); |
49 int ret = vsnprintf(buf, UCX_PRINTF_BUFSIZE, fmt, ap); |
50 if (ret < 0) { |
50 if (ret < 0) { |
65 free(newbuf); |
65 free(newbuf); |
66 } |
66 } |
67 return ret; |
67 return ret; |
68 } |
68 } |
69 |
69 |
70 cxmutstr cx_asprintf_a(CxAllocator *allocator, const char *fmt, ...) { |
70 cxmutstr cx_asprintf_a(CxAllocator *allocator, char const *fmt, ...) { |
71 va_list ap; |
71 va_list ap; |
72 cxmutstr ret; |
72 cxmutstr ret; |
73 va_start(ap, fmt); |
73 va_start(ap, fmt); |
74 ret = cx_vasprintf_a(allocator, fmt, ap); |
74 ret = cx_vasprintf_a(allocator, fmt, ap); |
75 va_end(ap); |
75 va_end(ap); |
76 return ret; |
76 return ret; |
77 } |
77 } |
78 |
78 |
79 cxmutstr cx_vasprintf_a(CxAllocator *a, const char *fmt, va_list ap) { |
79 cxmutstr cx_vasprintf_a(CxAllocator *a, char const *fmt, va_list ap) { |
80 cxmutstr s; |
80 cxmutstr s; |
81 s.ptr = NULL; |
81 s.ptr = NULL; |
82 s.length = 0; |
82 s.length = 0; |
83 char buf[UCX_PRINTF_BUFSIZE]; |
83 char buf[UCX_PRINTF_BUFSIZE]; |
84 va_list ap2; |
84 va_list ap2; |