1
0
mirror of https://sourceware.org/git/glibc.git synced 2025-08-07 06:43:00 +03:00

* stdio-common/vfscanf.c (_IO_vfscanf): Add additional test for EOF

in loop to look for conversion specifier to avoid testing of
	wrong errno value.
	* stdio-common/Makefile (tests): Add bug18, bug18a, bug19, bug19a.
	* stdio-common/bug18a.c: New file.
	* stdio-common/bug19.c: New file.
	* stdio-common/bug19a.c: New file.
This commit is contained in:
Ulrich Drepper
2007-07-08 04:41:34 +00:00
parent e9055017f6
commit 0923a2c896
7 changed files with 86 additions and 27 deletions

View File

@@ -54,7 +54,8 @@ tests := tstscanf test_rdwr test-popen tstgetln test-fseek \
tst-swprintf tst-fseek tst-fmemopen test-vfprintf tst-gets \
tst-perror tst-sprintf tst-rndseek tst-fdopen tst-fphex bug14 bug15 \
tst-popen tst-unlockedio tst-fmemopen2 tst-put-error tst-fgets \
tst-fwrite bug16 bug17 tst-swscanf tst-sprintf2 bug18 bug18a
tst-fwrite bug16 bug17 tst-swscanf tst-sprintf2 bug18 bug18a \
bug19 bug19a
test-srcs = tst-unbputc tst-printf

58
stdio-common/bug19.c Normal file
View File

@@ -0,0 +1,58 @@
#include <assert.h>
#include <errno.h>
#include <stdio.h>
#ifndef CHAR
# define CHAR char
# define L(str) str
# define FPUTS fputs
# define FSCANF fscanf
#endif
static int
do_test (void)
{
FILE *fp = tmpfile ();
if (fp == NULL)
{
puts ("cannot open file");
return 1;
}
FPUTS (L("7-11"), fp);
rewind (fp);
printf("setting errno to EINTR\n");
errno = EINTR;
printf("checking sscanf\n");
int i, j, n;
i = j = n = 0;
FSCANF (fp, L(" %i - %i %n"), &i, &j, &n);
printf ("found %i-%i (length=%i)\n", i, j, n);
int result = 0;
if (i != 7)
{
printf ("i is %d, expected 7\n", i);
result = 1;
}
if (j != 11)
{
printf ("j is %d, expected 11\n", j);
result = 1;
}
if (n != 4)
{
printf ("n is %d, expected 4\n", j);
result = 1;
}
return result;
}
#define TEST_FUNCTION do_test ()
#include "../test-skeleton.c"

7
stdio-common/bug19a.c Normal file
View File

@@ -0,0 +1,7 @@
#include <wchar.h>
#define CHAR wchar_t
#define L(str) L##str
#define FPUTS fputws
#define FSCANF fwscanf
#include "bug19.c"

View File

@@ -530,12 +530,17 @@ _IO_vfscanf_internal (_IO_FILE *s, const char *format, _IO_va_list argptr,
{
/* Eat whitespace. */
int save_errno = errno;
errno = 0;
__set_errno (0);
do
if (__builtin_expect (inchar () == EOF && errno == EINTR, 0))
/* We add the additional test for EOF here since otherwise
inchar will restore the old errno value which might be
EINTR but does not indicate an interrupt since nothing
was read at this time. */
if (__builtin_expect ((c == EOF || inchar () == EOF)
&& errno == EINTR, 0))
input_error ();
while (ISSPACE (c));
errno = save_errno;
__set_errno (save_errno);
ungetc (c, s);
skip_space = 0;
}