Annotation of embedaddon/ntp/sntp/libopts/compat/snprintf.c, revision 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>