summaryrefslogtreecommitdiff
path: root/libc/stdio/scanf.c
diff options
context:
space:
mode:
Diffstat (limited to 'libc/stdio/scanf.c')
-rw-r--r--libc/stdio/scanf.c23
1 files changed, 20 insertions, 3 deletions
diff --git a/libc/stdio/scanf.c b/libc/stdio/scanf.c
index 5ed7f8366..9e7ccef3c 100644
--- a/libc/stdio/scanf.c
+++ b/libc/stdio/scanf.c
@@ -169,7 +169,11 @@ register const char *fmt;
va_list ap;
{
+#if WANT_LONG_LONG
+ long long n;
+#else
register long n;
+#endif
register int c, width, lval, cnt = 0;
int store, neg, base, wide1, endnull, rngflag, c2;
register unsigned char *p;
@@ -219,9 +223,13 @@ va_list ap;
case '*':
endnull = store = 0;
goto fmtnxt;
-
case 'l': /* long data */
lval = 1;
+#if WANT_LONG_LONG
+ if (*fmt == 'L') { /* long long data */
+ lval = 2;
+ }
+#endif
goto fmtnxt;
case 'h': /* short data */
lval = 0;
@@ -250,8 +258,10 @@ va_list ap;
case 'u': /* unsigned decimal */
numfmt:skip();
+#if 0
if (isupper(*fmt))
lval = 1;
+#endif
if (!base) {
base = 10;
@@ -300,7 +310,13 @@ va_list ap;
if (store) {
if (neg == 1)
n = -n;
- if (lval)
+#if WANT_LONG_LONG
+ if (lval == 2)
+ *va_arg(ap, long long *) = n;
+
+ else
+#endif
+ if (lval == 1)
*va_arg(ap, long *) = n;
else
@@ -316,9 +332,10 @@ va_list ap;
case 'g':
skip();
fprintf(stderr, "LIBM:SCANF");
-
+#if 0
if (isupper(*fmt))
lval = 1;
+#endif
fstate = FS_INIT;
neg = 0;