From: Ulrich Drepper Date: Sat, 7 Jul 2007 21:38:43 +0000 (+0000) Subject: * libio/wstrops.c (_IO_wstr_underflow): Clear errno before X-Git-Tag: cvs/glibc-2_6_1~7 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e9055017f6d2015c4c74c94b1c2bf59968db223f;p=thirdparty%2Fglibc.git * libio/wstrops.c (_IO_wstr_underflow): Clear errno before returning WEOF. * stdio-common/Makefile (tests): Add bug18a. * stdio-common/bug18a.c: New file. --- diff --git a/ChangeLog b/ChangeLog index 71e1e5b74e8..a8f842ca14d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,10 @@ 2007-07-07 Ulrich Drepper + * libio/wstrops.c (_IO_wstr_underflow): Clear errno before + returning WEOF. + * stdio-common/Makefile (tests): Add bug18a. + * stdio-common/bug18a.c: New file. + [BZ #4745] * libio/strops.c (_IO_str_underflow): Clear errno before returning EOF. diff --git a/libio/wstrops.c b/libio/wstrops.c index c5aae7bc6a6..dfb312f6b75 100644 --- a/libio/wstrops.c +++ b/libio/wstrops.c @@ -1,4 +1,5 @@ -/* Copyright (C) 1993,1997-1999,2001-2004, 2006 Free Software Foundation, Inc. +/* Copyright (C) 1993,1997-1999,2001-2004,2006,2007 + Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -154,7 +155,12 @@ _IO_wstr_underflow (fp) if (fp->_wide_data->_IO_read_ptr < fp->_wide_data->_IO_read_end) return *fp->_wide_data->_IO_read_ptr; else - return WEOF; + { + /* We have to reset errno since callers check for errno being + EINTR and there has been no such problem here. */ + __set_errno (0); + return WEOF; + } } diff --git a/stdio-common/Makefile b/stdio-common/Makefile index 57797c7f2b3..d8f095ed55b 100644 --- a/stdio-common/Makefile +++ b/stdio-common/Makefile @@ -54,7 +54,7 @@ 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 + tst-fwrite bug16 bug17 tst-swscanf tst-sprintf2 bug18 bug18a test-srcs = tst-unbputc tst-printf diff --git a/stdio-common/bug18.c b/stdio-common/bug18.c index c3a86e57860..2e4c378c134 100644 --- a/stdio-common/bug18.c +++ b/stdio-common/bug18.c @@ -2,6 +2,12 @@ #include #include +#ifndef CHAR +# define CHAR char +# define L(str) str +# define SSCANF sscanf +#endif + static int do_test (void) @@ -11,11 +17,11 @@ do_test (void) printf("checking sscanf\n"); - char str[] = "7-11"; + CHAR str[] = L("7-11"); int i, j, n; i = j = n = 0; - sscanf (str, " %i - %i %n", &i, &j, &n); + SSCANF (str, L(" %i - %i %n"), &i, &j, &n); printf ("found %i-%i (length=%i)\n", i, j, n); int result = 0; diff --git a/stdio-common/bug18a.c b/stdio-common/bug18a.c new file mode 100644 index 00000000000..663cbf4fb7f --- /dev/null +++ b/stdio-common/bug18a.c @@ -0,0 +1,6 @@ +#include +#define CHAR wchar_t +#define L(str) L##str +#define SSCANF swscanf + +#include "bug18.c"