Mail Archives: djgpp/1996/04/03/05:56:36
Here is the patch which intended to fix two problems with scanf family
recently reported. Those are:
1. scanf returns 0 instead of -1 in some cases when it reaches eof before any
matching failure or conversion.
2. scanf ignores matching failures.
--- doscan.c~ Wed Jan 24 04:31:46 1996
+++ doscan.c Mon Apr 1 15:19:38 1996
@@ -56,6 +56,8 @@
fileended = 0;
for (;;) switch (ch = *fmt++) {
case '\0':
+ if (fileended && nmatch==0)
+ return(-1);
return (nmatch);
case '%':
if ((ch = *fmt++) == '%')
@@ -101,12 +103,17 @@
if (ch == '\0')
return(-1);
if (_innum(ptr, ch, len, size, iop, scan_getc, scan_ungetc,
- &fileended) && ptr)
- nmatch++;
-/* breaks %n */
-/* if (fileended) {
- return(nmatch? nmatch: -1);
- } */
+ &fileended))
+ {
+ if (ptr)
+ nmatch++;
+ }
+ else
+ {
+ if (fileended && nmatch==0)
+ return(-1);
+ return(nmatch);
+ }
break;
case ' ':
case '\n':
- Raw text -