mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-01-18 16:15:00 +08:00
iostream.cc: Add missing calls to isfx and setup a cleanup region for the locked stream.
* iostream.cc: Add missing calls to isfx and setup a cleanup region for the locked stream. * iostream.h: Likewise. * isgetline.cc: Likewise. * isgetsb.cc: Likewise. * isscan.cc: Likewise. From-SVN: r28573
This commit is contained in:
parent
80832cf27b
commit
ff76d1ee86
@ -1,3 +1,12 @@
|
||||
1999-08-07 Andreas Schwab <schwab@suse.de>
|
||||
|
||||
* iostream.cc: Add missing calls to isfx and setup a cleanup
|
||||
region for the locked stream.
|
||||
* iostream.h: Likewise.
|
||||
* isgetline.cc: Likewise.
|
||||
* isgetsb.cc: Likewise.
|
||||
* isscan.cc: Likewise.
|
||||
|
||||
Mon Jun 28 09:25:23 1999 Hans-Peter Nilsson <hp@bitrange.com>
|
||||
|
||||
* configure.in (post-target): Use "$(topsrcdir)", not "$(srcdir)/..".
|
||||
|
@ -71,6 +71,8 @@ int skip_ws(streambuf* sb)
|
||||
istream& istream::get(char& c)
|
||||
{
|
||||
if (ipfx1()) {
|
||||
_IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile,
|
||||
_strbuf);
|
||||
int ch = _strbuf->sbumpc();
|
||||
if (ch == EOF) {
|
||||
set(ios::eofbit|ios::failbit);
|
||||
@ -80,6 +82,8 @@ istream& istream::get(char& c)
|
||||
c = (char)ch;
|
||||
_gcount = 1;
|
||||
}
|
||||
isfx();
|
||||
_IO_cleanup_region_end (0);
|
||||
}
|
||||
else
|
||||
_gcount = 0;
|
||||
@ -102,10 +106,12 @@ istream& istream::ignore(int n /* = 1 */, int delim /* = EOF */)
|
||||
{
|
||||
_gcount = 0;
|
||||
if (ipfx1()) {
|
||||
_IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile,
|
||||
_strbuf);
|
||||
register streambuf* sb = _strbuf;
|
||||
if (delim == EOF) {
|
||||
_gcount = sb->ignore(n);
|
||||
return *this;
|
||||
goto unlock;
|
||||
}
|
||||
for (;;) {
|
||||
#if 0
|
||||
@ -122,6 +128,9 @@ istream& istream::ignore(int n /* = 1 */, int delim /* = EOF */)
|
||||
if (ch == delim)
|
||||
break;
|
||||
}
|
||||
unlock:
|
||||
isfx();
|
||||
_IO_cleanup_region_end (0);
|
||||
}
|
||||
return *this;
|
||||
}
|
||||
@ -129,9 +138,13 @@ istream& istream::ignore(int n /* = 1 */, int delim /* = EOF */)
|
||||
istream& istream::read(char *s, streamsize n)
|
||||
{
|
||||
if (ipfx1()) {
|
||||
_IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile,
|
||||
_strbuf);
|
||||
_gcount = _strbuf->sgetn(s, n);
|
||||
if (_gcount != n)
|
||||
set(ios::failbit|ios::eofbit);
|
||||
isfx();
|
||||
_IO_cleanup_region_end (0);
|
||||
}
|
||||
else
|
||||
_gcount = 0;
|
||||
@ -184,11 +197,15 @@ streampos istream::tellg()
|
||||
istream& istream::operator>>(char& c)
|
||||
{
|
||||
if (ipfx0()) {
|
||||
_IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile,
|
||||
_strbuf);
|
||||
int ch = _strbuf->sbumpc();
|
||||
if (ch == EOF)
|
||||
set(ios::eofbit|ios::failbit);
|
||||
else
|
||||
c = (char)ch;
|
||||
isfx();
|
||||
_IO_cleanup_region_end (0);
|
||||
}
|
||||
return *this;
|
||||
}
|
||||
@ -200,6 +217,8 @@ istream::operator>> (char* ptr)
|
||||
int w = width(0);
|
||||
if (ipfx0())
|
||||
{
|
||||
_IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile,
|
||||
_strbuf);
|
||||
register streambuf* sb = _strbuf;
|
||||
for (;;)
|
||||
{
|
||||
@ -219,6 +238,8 @@ istream::operator>> (char* ptr)
|
||||
}
|
||||
if (p == ptr)
|
||||
set(ios::failbit);
|
||||
isfx();
|
||||
_IO_cleanup_region_end (0);
|
||||
}
|
||||
*p = '\0';
|
||||
return *this;
|
||||
@ -234,6 +255,9 @@ static int read_int(istream& stream, unsigned LONGEST& val, int& neg)
|
||||
{
|
||||
if (!stream.ipfx0())
|
||||
return 0;
|
||||
int retval;
|
||||
_IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile,
|
||||
stream._strbuf);
|
||||
register streambuf* sb = stream.rdbuf();
|
||||
int base = 10;
|
||||
int ndigits = 0;
|
||||
@ -254,7 +278,7 @@ static int read_int(istream& stream, unsigned LONGEST& val, int& neg)
|
||||
ch = sb->sbumpc();
|
||||
if (ch == EOF) {
|
||||
val = 0;
|
||||
return 1;
|
||||
goto unlock;
|
||||
}
|
||||
if (ch == 'x' || ch == 'X') {
|
||||
base = 16;
|
||||
@ -290,19 +314,26 @@ static int read_int(istream& stream, unsigned LONGEST& val, int& neg)
|
||||
if (ndigits == 0)
|
||||
goto fail;
|
||||
else
|
||||
return 1;
|
||||
goto unlock;
|
||||
}
|
||||
ndigits++;
|
||||
val = base * val + digit;
|
||||
ch = sb->sbumpc();
|
||||
}
|
||||
return 1;
|
||||
unlock:
|
||||
retval = 1;
|
||||
goto out;
|
||||
fail:
|
||||
stream.set(ios::failbit);
|
||||
return 0;
|
||||
retval = 0;
|
||||
goto out;
|
||||
eof_fail:
|
||||
stream.set(ios::failbit|ios::eofbit);
|
||||
return 0;
|
||||
retval = 0;
|
||||
out:
|
||||
stream.isfx();
|
||||
_IO_cleanup_region_end (0);
|
||||
return retval;
|
||||
}
|
||||
|
||||
#define READ_INT(TYPE) \
|
||||
@ -334,6 +365,8 @@ istream& istream::operator>>(long double& x)
|
||||
{
|
||||
if (ipfx0())
|
||||
{
|
||||
_IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile,
|
||||
_strbuf);
|
||||
#if _G_HAVE_LONG_DOUBLE_IO
|
||||
scan("%Lg", &x);
|
||||
#else
|
||||
@ -341,6 +374,8 @@ istream& istream::operator>>(long double& x)
|
||||
scan("%lg", &y);
|
||||
x = y;
|
||||
#endif
|
||||
isfx();
|
||||
_IO_cleanup_region_end (0);
|
||||
}
|
||||
return *this;
|
||||
}
|
||||
@ -348,20 +383,34 @@ istream& istream::operator>>(long double& x)
|
||||
istream& istream::operator>>(double& x)
|
||||
{
|
||||
if (ipfx0())
|
||||
{
|
||||
_IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile,
|
||||
_strbuf);
|
||||
scan("%lg", &x);
|
||||
isfx();
|
||||
_IO_cleanup_region_end (0);
|
||||
}
|
||||
return *this;
|
||||
}
|
||||
|
||||
istream& istream::operator>>(float& x)
|
||||
{
|
||||
if (ipfx0())
|
||||
{
|
||||
_IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile,
|
||||
_strbuf);
|
||||
scan("%g", &x);
|
||||
isfx();
|
||||
_IO_cleanup_region_end (0);
|
||||
}
|
||||
return *this;
|
||||
}
|
||||
|
||||
istream& istream::operator>>(register streambuf* sbuf)
|
||||
{
|
||||
if (ipfx0()) {
|
||||
_IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile,
|
||||
_strbuf);
|
||||
register streambuf* inbuf = rdbuf();
|
||||
// FIXME: Should optimize!
|
||||
for (;;) {
|
||||
@ -375,6 +424,8 @@ istream& istream::operator>>(register streambuf* sbuf)
|
||||
break;
|
||||
}
|
||||
}
|
||||
isfx();
|
||||
_IO_cleanup_region_end (0);
|
||||
}
|
||||
return *this;
|
||||
}
|
||||
@ -789,8 +840,8 @@ ostream& ostream::operator<<(const char *s)
|
||||
if (flags() & ios::left && padding > 0) // Left adjustment.
|
||||
if (_IO_padn(sbuf, fill_char, padding) != padding)
|
||||
set(ios::badbit);
|
||||
osfx();
|
||||
failed:
|
||||
osfx();
|
||||
_IO_cleanup_region_end (0);
|
||||
}
|
||||
return *this;
|
||||
|
@ -173,6 +173,7 @@ protected:
|
||||
int get() { if (!ipfx1()) return EOF;
|
||||
else { int ch = _strbuf->sbumpc();
|
||||
if (ch == EOF) set(ios::eofbit);
|
||||
isfx();
|
||||
return ch;
|
||||
} }
|
||||
int peek();
|
||||
|
@ -37,6 +37,8 @@ istream& istream::getline(char* buf, int len, char delim)
|
||||
int ch;
|
||||
if (ipfx1())
|
||||
{
|
||||
_IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile,
|
||||
_strbuf);
|
||||
streambuf *sb = rdbuf();
|
||||
_gcount = _IO_getline_info(sb, buf, len - 1, delim, -1, &ch);
|
||||
if (ch != EOF)
|
||||
@ -48,6 +50,8 @@ istream& istream::getline(char* buf, int len, char delim)
|
||||
set(ios::failbit);
|
||||
sb->sungetc(); // Leave delimiter unread.
|
||||
}
|
||||
isfx();
|
||||
_IO_cleanup_region_end (0);
|
||||
}
|
||||
else
|
||||
ch = EOF;
|
||||
@ -67,11 +71,15 @@ istream& istream::get(char* buf, int len, char delim)
|
||||
}
|
||||
if (ipfx1())
|
||||
{
|
||||
_IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile,
|
||||
_strbuf);
|
||||
streambuf *sbuf = rdbuf();
|
||||
int ch;
|
||||
_gcount = _IO_getline_info(sbuf, buf, len - 1, delim, -1, &ch);
|
||||
if (_gcount == 0 && ch == EOF)
|
||||
set(ios::failbit|ios::eofbit);
|
||||
isfx();
|
||||
_IO_cleanup_region_end (0);
|
||||
}
|
||||
buf[_gcount] = '\0';
|
||||
return *this;
|
||||
@ -123,6 +131,8 @@ char *_sb_readline (streambuf *sb, long& total, char terminator)
|
||||
istream& istream::gets(char **s, char delim /* = '\n' */)
|
||||
{
|
||||
if (ipfx1()) {
|
||||
_IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile,
|
||||
_strbuf);
|
||||
long size = 0;
|
||||
streambuf *sb = rdbuf();
|
||||
*s = _sb_readline (sb, size, delim);
|
||||
@ -132,6 +142,8 @@ istream& istream::gets(char **s, char delim /* = '\n' */)
|
||||
if (_gcount == 0)
|
||||
set(ios::failbit);
|
||||
}
|
||||
isfx();
|
||||
_IO_cleanup_region_end (0);
|
||||
}
|
||||
else {
|
||||
_gcount = 0;
|
||||
|
@ -31,6 +31,8 @@ istream& istream::get(streambuf& sb, char delim /* = '\n' */)
|
||||
_gcount = 0;
|
||||
if (ipfx1())
|
||||
{
|
||||
_IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile,
|
||||
_strbuf);
|
||||
register streambuf* isb = rdbuf();
|
||||
for (;;)
|
||||
{
|
||||
@ -54,6 +56,8 @@ istream& istream::get(streambuf& sb, char delim /* = '\n' */)
|
||||
if (delimp != NULL)
|
||||
break;
|
||||
}
|
||||
isfx();
|
||||
_IO_cleanup_region_end (0);
|
||||
}
|
||||
return *this;
|
||||
}
|
||||
|
@ -29,10 +29,14 @@ the executable file might be covered by the GNU General Public License. */
|
||||
istream& istream::scan(const char *format ...)
|
||||
{
|
||||
if (ipfx0()) {
|
||||
_IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile,
|
||||
_strbuf);
|
||||
va_list ap;
|
||||
va_start(ap, format);
|
||||
_strbuf->vscan(format, ap, this);
|
||||
va_end(ap);
|
||||
isfx();
|
||||
_IO_cleanup_region_end (0);
|
||||
}
|
||||
return *this;
|
||||
}
|
||||
@ -40,6 +44,12 @@ istream& istream::scan(const char *format ...)
|
||||
istream& istream::vscan(const char *format, _IO_va_list args)
|
||||
{
|
||||
if (ipfx0())
|
||||
{
|
||||
_IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile,
|
||||
_strbuf);
|
||||
_strbuf->vscan(format, args, this);
|
||||
isfx();
|
||||
_IO_cleanup_region_end (0);
|
||||
}
|
||||
return *this;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user