]>
jfr.im git - irc/quakenet/newserv.git/blob - chanserv/q9snprintf.c
5 #include "../lib/sstring.h"
6 #include "../core/error.h"
17 static int addchar(struct bufs
*buf
, char c
) {
18 if(buf
->len
>= buf
->capacity
- 1)
21 buf
->buf
[buf
->len
++] = c
;
26 static int addstr(struct bufs
*buf
, char *c
) {
27 int remaining
= buf
->capacity
- buf
->len
- 1;
34 buf
->buf
[buf
->len
++] = *p
;
40 void q9vsnprintf(char *buf
, size_t size
, const char *format
, const char *args
, va_list ap
) {
44 char convbuf
[MAXARGS
][CONVBUF
];
57 for(i
=0;i
<MAXARGS
;i
++)
61 char *cb
= convbuf
[argno
++];
65 s
= va_arg(ap
, char *);
66 snprintf(cb
, CONVBUF
, "%s", s
);
70 snprintf(cb
, CONVBUF
, "%d", d
);
73 u
= va_arg(ap
, unsigned int);
74 snprintf(cb
, CONVBUF
, "%u", u
);
77 g
= va_arg(ap
, double);
78 snprintf(cb
, CONVBUF
, "%.1f", g
);
82 Error("chanserv", ERR_STOP
, "Bad format specifier '%c' supplied in q9vsnprintf, format: '%s'", *args
, format
);
91 for(p
=format
;*p
;p
++) {
124 c
= convbuf
[*p
- '0']; break;
126 c
= "(bad format specifier)";
141 void q9snprintf(char *buf
, size_t size
, const char *format
, const char *args
, ...) {
145 q9vsnprintf(buf
, size
, format
, args
, ap
);