]>
jfr.im git - irc/quakenet/newserv.git/blob - chanserv/q9snprintf.c
6 #include "../lib/sstring.h"
7 #include "../lib/stringbuf.h"
8 #include "../lib/ccassert.h"
9 #include "../core/error.h"
10 #include "chanserv_messages.h"
15 void q9strftime(char *buf
, size_t size
, time_t t
) {
16 strftime(buf
, size
, Q9_FORMAT_TIME
, gmtime(&t
));
19 void q9vsnprintf(char *buf
, size_t size
, const char *format
, const char *args
, va_list ap
) {
24 char convbuf
[MAXARGS
][CONVBUF
];
26 CCASSERT(CONVBUF
> TIMELEN
);
40 for(i
=0;i
<MAXARGS
;i
++)
44 char *cb
= convbuf
[argno
++];
48 s
= va_arg(ap
, char *);
49 snprintf(cb
, CONVBUF
, "%s", s
);
53 snprintf(cb
, CONVBUF
, "%d", d
);
56 u
= va_arg(ap
, unsigned int);
57 snprintf(cb
, CONVBUF
, "%u", u
);
60 g
= va_arg(ap
, double);
61 snprintf(cb
, CONVBUF
, "%.1f", g
);
64 t
= va_arg(ap
, time_t);
65 q9strftime(cb
, CONVBUF
, t
);
69 Error("chanserv", ERR_STOP
, "Bad format specifier '%c' supplied in q9vsnprintf, format: '%s'", *args
, format
);
74 sbinit(&b
, buf
, size
);
76 for(p
=format
;*p
;p
++) {
78 if(!sbaddchar(&b
, *p
))
86 if(!sbaddchar(&b
, *p
))
109 c
= convbuf
[*p
- '0']; break;
111 c
= "(bad format specifier)";
126 void q9snprintf(char *buf
, size_t size
, const char *format
, const char *args
, ...) {
130 q9vsnprintf(buf
, size
, format
, args
, ap
);