Mail Archives: djgpp/1996/08/10/23:45:40
Xref: | news2.mv.net comp.os.msdos.djgpp:7053
|
From: | rhawes AT dma DOT org (Richard L. Hawes)
|
Newsgroups: | comp.os.msdos.djgpp
|
Subject: | bug fix for libc in version 2 of djgpp
|
Date: | 11 Aug 1996 03:12:13 GMT
|
Organization: | Dayton Microcomputer Association; Dayton OH
|
Lines: | 76
|
Distribution: | oh
|
Message-ID: | <4ujj2d$s1@sally.dma.org>
|
NNTP-Posting-Host: | dmapub.dma.org
|
Summary: | sscanf sometimes returns incorrect values, patch fix included.
|
Keywords: | sscanf bugs patch libc
|
To: | djgpp AT delorie DOT com
|
DJ-Gateway: | from newsgroup comp.os.msdos.djgpp
|
By Richard L. Hawes rhawes AT dma DOT org
Sometime sscanf will return the incorrect value. For example,
run the following program with the first argument as "5" and it will
return -1 (EOF) when it should return 1:
- - - - - - - -
#include<stdio.h>
int main(int argc, char *argv[])
{
int i,j;
i=j=0;
printf(" %d \n", sscanf(argv[1], "%d-%d", &i, &j));
printf(" %d-%d\n", i, j);
}
- - - - - - - -
At the end of this file is a patch for it. Place this file in
your djgpp directory (after you unzip the library source code first of
coarse). Then type in the following lines at the dos prompt to fix it:
>patch <thisfile
>gcc -c src\libc\ansi\stdio\doscan.c
>ar r lib\liba src\libc\ansi\stdio\docan.o
Patch will ignore this note.
*** src\libc\ansi\stdio/doscan.c Wed Jan 24 04:31:46 1996
--- doscan.c Sun Aug 11 01:22:08 1996
***************
*** 57,61 ****
for (;;) switch (ch = *fmt++) {
case '\0':
! return (nmatch);
case '%':
if ((ch = *fmt++) == '%')
--- 57,61 ----
for (;;) switch (ch = *fmt++) {
case '\0':
! return (nmatch? nmatch: -1);
case '%':
if ((ch = *fmt++) == '%')
***************
*** 100,104 ****
}
if (ch == '\0')
! return(-1);
if (_innum(ptr, ch, len, size, iop, scan_getc, scan_ungetc,
&fileended) && ptr)
--- 100,104 ----
}
if (ch == '\0')
! return(nmatch? nmatch: -1);
if (_innum(ptr, ch, len, size, iop, scan_getc, scan_ungetc,
&fileended) && ptr)
***************
*** 130,137 ****
if (ch1 != ch) {
if (ch1==EOF)
! return(-1);
scan_ungetc(ch1, iop);
nchars--;
! return(nmatch);
}
}
--- 130,137 ----
if (ch1 != ch) {
if (ch1==EOF)
! return(nmatch? nmatch: -1);
scan_ungetc(ch1, iop);
nchars--;
! return(nmatch? nmatch: -1);
}
}
- Raw text -