diff options
author | mux <mux@FreeBSD.org> | 2002-11-13 15:15:59 +0000 |
---|---|---|
committer | mux <mux@FreeBSD.org> | 2002-11-13 15:15:59 +0000 |
commit | 06657e3da637adc5c3bf0ec833d3a117f55cf08b (patch) | |
tree | b2009116f4597f2eaf9858226b92138c94c9402d /sys/kern/subr_prf.c | |
parent | 8541a1e43c7c279070b24f811f3857836b02824b (diff) | |
download | FreeBSD-src-06657e3da637adc5c3bf0ec833d3a117f55cf08b.zip FreeBSD-src-06657e3da637adc5c3bf0ec833d3a117f55cf08b.tar.gz |
Add support for the C99 %t format modifier.
Diffstat (limited to 'sys/kern/subr_prf.c')
-rw-r--r-- | sys/kern/subr_prf.c | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/sys/kern/subr_prf.c b/sys/kern/subr_prf.c index 910cf13..b7a818b 100644 --- a/sys/kern/subr_prf.c +++ b/sys/kern/subr_prf.c @@ -48,6 +48,7 @@ #include <sys/msgbuf.h> #include <sys/malloc.h> #include <sys/proc.h> +#include <sys/stddef.h> #include <sys/stdint.h> #include <sys/sysctl.h> #include <sys/tty.h> @@ -478,7 +479,7 @@ kvprintf(char const *fmt, void (*func)(int, void*), void *arg, int radix, va_lis int ch, n; uintmax_t num; int base, lflag, qflag, tmp, width, ladjust, sharpflag, neg, sign, dot; - int jflag, zflag; + int jflag, tflag, zflag; int dwidth; char padc; int retval = 0; @@ -506,7 +507,7 @@ kvprintf(char const *fmt, void (*func)(int, void*), void *arg, int radix, va_lis percent = fmt - 1; qflag = 0; lflag = 0; ladjust = 0; sharpflag = 0; neg = 0; sign = 0; dot = 0; dwidth = 0; - jflag = 0; zflag = 0; + jflag = 0; tflag = 0; zflag = 0; reswitch: switch (ch = (u_char)*fmt++) { case '.': dot = 1; @@ -657,6 +658,10 @@ reswitch: switch (ch = (u_char)*fmt++) { while (width--) PCHAR(padc); break; + case 't': + tflag = 1; + goto reswitch; + break; case 'u': base = 10; goto handle_nosign; @@ -677,6 +682,8 @@ handle_nosign: num = va_arg(ap, uintmax_t); else if (qflag) num = va_arg(ap, u_quad_t); + else if (tflag) + num = va_arg(ap, ptrdiff_t); else if (lflag) num = va_arg(ap, u_long); else if (zflag) @@ -689,6 +696,8 @@ handle_sign: num = va_arg(ap, intmax_t); else if (qflag) num = va_arg(ap, quad_t); + else if (tflag) + num = va_arg(ap, ptrdiff_t); else if (lflag) num = va_arg(ap, long); else if (zflag) |