summaryrefslogtreecommitdiffstats
path: root/sys/kern/subr_prf.c
diff options
context:
space:
mode:
authorangelos <angelos@openbsd.org>1997-10-01 02:22:59 +0000
committerangelos <angelos@openbsd.org>1997-10-01 02:22:59 +0000
commit7aaf2339600da4dd1d715680a02a1cb32ba5252b (patch)
tree96d76446ef0ac7e2f8a23e94187e87396e44fc6b /sys/kern/subr_prf.c
parentverify decryption by checking last padding bytes (diff)
downloadwireguard-openbsd-7aaf2339600da4dd1d715680a02a1cb32ba5252b.tar.xz
wireguard-openbsd-7aaf2339600da4dd1d715680a02a1cb32ba5252b.zip
added 'q' modifier (64-bit integers) in kernel vsprintf/kprintf
Diffstat (limited to 'sys/kern/subr_prf.c')
-rw-r--r--sys/kern/subr_prf.c83
1 files changed, 64 insertions, 19 deletions
diff --git a/sys/kern/subr_prf.c b/sys/kern/subr_prf.c
index 1ad61748f6b..59083c6bc41 100644
--- a/sys/kern/subr_prf.c
+++ b/sys/kern/subr_prf.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: subr_prf.c,v 1.15 1996/12/06 08:08:17 niklas Exp $ */
+/* $OpenBSD: subr_prf.c,v 1.16 1997/10/01 02:22:59 angelos Exp $ */
/* $NetBSD: subr_prf.c,v 1.25 1996/04/22 01:38:46 christos Exp $ */
/*-
@@ -352,6 +352,9 @@ printf(fmt, va_alist)
return (0);
}
+#define FLAG_LONG 0x1
+#define FLAG_QUAD 0x2
+
/*
* Scaled down version of printf(3).
*
@@ -397,7 +400,7 @@ kprintf(fmt, flags, tp, ap)
{
register char *p, *q;
register int ch, n;
- u_long ul;
+ u_int64_t ul;
int base, lflag, tmp, width;
char padc;
@@ -430,7 +433,10 @@ reswitch: switch (ch = *(const u_char *)fmt++) {
}
goto reswitch;
case 'l':
- lflag = 1;
+ lflag |= FLAG_LONG;
+ goto reswitch;
+ case 'q':
+ lflag |= FLAG_QUAD;
goto reswitch;
case 'b':
ul = va_arg(ap, int);
@@ -468,19 +474,31 @@ reswitch: switch (ch = *(const u_char *)fmt++) {
putchar(ch, flags, tp);
break;
case 'd':
- ul = lflag ? va_arg(ap, long) : va_arg(ap, int);
- if ((long)ul < 0) {
+ if (lflag & FLAG_QUAD)
+ ul = va_arg(ap, int64_t);
+ else
+ ul = lflag & FLAG_LONG ?
+ va_arg(ap, long) : va_arg(ap, int);
+ if ((int64_t)ul < 0) {
putchar('-', flags, tp);
- ul = -(long)ul;
+ ul = -(int64_t)ul;
}
base = 10;
goto number;
case 'o':
- ul = lflag ? va_arg(ap, u_long) : va_arg(ap, u_int);
+ if (lflag & FLAG_QUAD)
+ ul = va_arg(ap, u_int64_t);
+ else
+ ul = lflag & FLAG_LONG ?
+ va_arg(ap, u_long) : va_arg(ap, u_int);
base = 8;
goto number;
case 'u':
- ul = lflag ? va_arg(ap, u_long) : va_arg(ap, u_int);
+ if (lflag & FLAG_QUAD)
+ ul = va_arg(ap, u_int64_t);
+ else
+ ul = lflag & FLAG_LONG ?
+ va_arg(ap, u_long) : va_arg(ap, u_int);
base = 10;
goto number;
case 'p':
@@ -490,7 +508,11 @@ reswitch: switch (ch = *(const u_char *)fmt++) {
base = 16;
goto number;
case 'x':
- ul = lflag ? va_arg(ap, u_long) : va_arg(ap, u_int);
+ if (lflag & FLAG_QUAD)
+ ul = va_arg(ap, u_int64_t);
+ else
+ ul = lflag & FLAG_LONG ?
+ va_arg(ap, u_long) : va_arg(ap, u_int);
base = 16;
number: p = ksprintn(ul, base, &tmp);
if (width && (width -= tmp) > 0)
@@ -501,7 +523,9 @@ number: p = ksprintn(ul, base, &tmp);
break;
default:
putchar('%', flags, tp);
- if (lflag)
+ if (lflag & FLAG_QUAD)
+ putchar('q', flags, tp);
+ if (lflag & FLAG_LONG)
putchar('l', flags, tp);
/* FALLTHROUGH */
case '%':
@@ -563,7 +587,7 @@ vsprintf(buf, cfmt, ap)
register const char *fmt = cfmt;
register char *p, *bp;
register int ch, base;
- u_long ul;
+ u_int64_t ul;
int lflag, tmp, width;
char padc;
@@ -594,8 +618,11 @@ reswitch: switch (ch = *(const u_char *)fmt++) {
break;
}
goto reswitch;
+ case 'q':
+ lflag |= FLAG_QUAD;
+ goto reswitch;
case 'l':
- lflag = 1;
+ lflag |= FLAG_LONG;
goto reswitch;
/* case 'b': ... break; XXX */
case 'c':
@@ -609,21 +636,33 @@ reswitch: switch (ch = *(const u_char *)fmt++) {
--bp;
break;
case 'd':
- ul = lflag ? va_arg(ap, long) : va_arg(ap, int);
- if ((long)ul < 0) {
+ if (lflag & FLAG_QUAD)
+ ul = va_arg(ap, int64_t);
+ else
+ ul = lflag & FLAG_LONG ?
+ va_arg(ap, long) : va_arg(ap, int);
+ if ((int64_t)ul < 0) {
*bp++ = '-';
- ul = -(long)ul;
+ ul = -(int64_t)ul;
}
base = 10;
goto number;
break;
case 'o':
- ul = lflag ? va_arg(ap, u_long) : va_arg(ap, u_int);
+ if (lflag & FLAG_QUAD)
+ ul = va_arg(ap, u_int64_t);
+ else
+ ul = lflag & FLAG_LONG ?
+ va_arg(ap, u_long) : va_arg(ap, u_int);
base = 8;
goto number;
break;
case 'u':
- ul = lflag ? va_arg(ap, u_long) : va_arg(ap, u_int);
+ if (lflag & FLAG_QUAD)
+ ul = va_arg(ap, u_int64_t);
+ else
+ ul = lflag & FLAG_LONG ?
+ va_arg(ap, u_long) : va_arg(ap, u_int);
base = 10;
goto number;
break;
@@ -634,7 +673,11 @@ reswitch: switch (ch = *(const u_char *)fmt++) {
base = 16;
goto number;
case 'x':
- ul = lflag ? va_arg(ap, u_long) : va_arg(ap, u_int);
+ if (lflag & FLAG_QUAD)
+ ul = va_arg(ap, u_int64_t);
+ else
+ ul = lflag & FLAG_LONG ?
+ va_arg(ap, u_long) : va_arg(ap, u_int);
base = 16;
number: p = ksprintn(ul, base, &tmp);
if (width && (width -= tmp) > 0)
@@ -645,7 +688,9 @@ number: p = ksprintn(ul, base, &tmp);
break;
default:
*bp++ = '%';
- if (lflag)
+ if (lflag & FLAG_QUAD)
+ *bp++ = 'q';
+ if (lflag & FLAG_LONG)
*bp++ = 'l';
/* FALLTHROUGH */
case '%':