Annotation of embedaddon/ntp/sntp/libopts/compat/snprintf.c, revision 1.1.1.1
1.1 misho 1:
2: #ifndef HAVE_VPRINTF
3: #include "choke-me: no vprintf and no snprintf"
4: #endif
5:
6: #if defined(HAVE_STDARG_H)
7: # include <stdarg.h>
8: # ifndef VA_START
9: # define VA_START(a, f) va_start(a, f)
10: # define VA_END(a) va_end(a)
11: # endif /* VA_START */
12: # define SNV_USING_STDARG_H
13:
14: #elif defined(HAVE_VARARGS_H)
15: # include <varargs.h>
16: # ifndef VA_START
17: # define VA_START(a, f) va_start(a)
18: # define VA_END(a) va_end(a)
19: # endif /* VA_START */
20: # undef SNV_USING_STDARG_H
21:
22: #else
23: # include "must-have-stdarg-or-varargs"
24: #endif
25:
26: static int
27: snprintf(char *str, size_t n, char const *fmt, ...)
28: {
29: va_list ap;
30: int rval;
31:
32: #ifdef VSPRINTF_CHARSTAR
33: char *rp;
34: VA_START(ap, fmt);
35: rp = vsprintf(str, fmt, ap);
36: VA_END(ap);
37: rval = strlen(rp);
38:
39: #else
40: VA_START(ap, fmt);
41: rval = vsprintf(str, fmt, ap);
42: VA_END(ap);
43: #endif
44:
45: if (rval > n) {
46: fprintf(stderr, "snprintf buffer overrun %d > %d\n", rval, (int)n);
47: abort();
48: }
49: return rval;
50: }
51:
52: static int
53: vsnprintf( char *str, size_t n, char const *fmt, va_list ap )
54: {
55: #ifdef VSPRINTF_CHARSTAR
56: return (strlen(vsprintf(str, fmt, ap)));
57: #else
58: return (vsprintf(str, fmt, ap));
59: #endif
60: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>