mirror of
https://gcc.gnu.org/git/gcc.git
synced 2025-01-24 05:14:58 +08:00
re PR libstdc++/7744 (streambuf::in_avail() always returns 0 (zero) for cin input stream)
2003-03-09 Paolo Carlini <pcarlini@unitus.it> Nathan Myers <ncm@cantrip.org> PR libstdc++/7744 * config/io/basic_file_stdio.h (__basic_file<>::xsgetn, xsputn, seekoff, seekpos): Add a boolean parameter __stdio. * config/io/basic_file_stdio.cc (__basic_file<>::xsgetn, xsputn, seekoff, seekpos): If __stdio == true, use fread (fwrite, fseek/ftell, fseek/ftell, respectively), otherwise read (write, lseek, lseek, respectively). * include/bits/fstream.tcc (basic_filebuf<>::_M_convert_to_external, _M_really_overflow, seekoff): Use the boolean parameter in the calls. * include/std/std_fstream.h (sync): Likewise. * src/fstream.cc (basic_filebuf<>::_M_underflow_common): Likewise. * src/ios.cc (ios_base::Init::_S_ios_create(bool)): Revert libstdc++/8399 commit involving isatty(0). * acinclude.m4 (GLIBCPP_CHECK_UNISTD_DECL_AND_LINKAGE_1): Remove. (GLIBCPP_CHECK_UNISTD_SUPPORT): Remove * configure.in: Remove call. * aclocal.m4: Regenerate. * config.h.in: Regenerate. * configure: Regenerate. * testsuite/27_io/narrow_stream_objects.cc (test11): Add. Co-Authored-By: Nathan Myers <ncm@cantrip.org> From-SVN: r64051
This commit is contained in:
parent
f7b3ab8ae7
commit
95dca20c9c
@ -1,3 +1,27 @@
|
|||||||
|
2003-03-09 Paolo Carlini <pcarlini@unitus.it>
|
||||||
|
Nathan Myers <ncm@cantrip.org>
|
||||||
|
|
||||||
|
PR libstdc++/7744
|
||||||
|
* config/io/basic_file_stdio.h (__basic_file<>::xsgetn, xsputn,
|
||||||
|
seekoff, seekpos): Add a boolean parameter __stdio.
|
||||||
|
* config/io/basic_file_stdio.cc (__basic_file<>::xsgetn, xsputn,
|
||||||
|
seekoff, seekpos): If __stdio == true, use fread (fwrite, fseek/ftell,
|
||||||
|
fseek/ftell, respectively), otherwise read (write, lseek, lseek,
|
||||||
|
respectively).
|
||||||
|
* include/bits/fstream.tcc (basic_filebuf<>::_M_convert_to_external,
|
||||||
|
_M_really_overflow, seekoff): Use the boolean parameter in the calls.
|
||||||
|
* include/std/std_fstream.h (sync): Likewise.
|
||||||
|
* src/fstream.cc (basic_filebuf<>::_M_underflow_common): Likewise.
|
||||||
|
* src/ios.cc (ios_base::Init::_S_ios_create(bool)): Revert libstdc++/8399
|
||||||
|
commit involving isatty(0).
|
||||||
|
* acinclude.m4 (GLIBCPP_CHECK_UNISTD_DECL_AND_LINKAGE_1): Remove.
|
||||||
|
(GLIBCPP_CHECK_UNISTD_SUPPORT): Remove
|
||||||
|
* configure.in: Remove call.
|
||||||
|
* aclocal.m4: Regenerate.
|
||||||
|
* config.h.in: Regenerate.
|
||||||
|
* configure: Regenerate.
|
||||||
|
* testsuite/27_io/narrow_stream_objects.cc (test11): Add.
|
||||||
|
|
||||||
2003-03-09 Paolo Carlini <pcarlini@unitus.it>
|
2003-03-09 Paolo Carlini <pcarlini@unitus.it>
|
||||||
|
|
||||||
PR libstdc++/9988
|
PR libstdc++/9988
|
||||||
|
@ -590,34 +590,6 @@ AC_DEFUN(GLIBCPP_CHECK_STDLIB_DECL_AND_LINKAGE_3, [
|
|||||||
fi
|
fi
|
||||||
])
|
])
|
||||||
|
|
||||||
dnl
|
|
||||||
dnl Check to see if the (unistd function) argument passed is
|
|
||||||
dnl 1) declared when using the c++ compiler
|
|
||||||
dnl 2) has "C" linkage
|
|
||||||
dnl
|
|
||||||
dnl argument 1 is name of function to check
|
|
||||||
dnl
|
|
||||||
dnl ASSUMES argument is a function with ONE parameter
|
|
||||||
dnl
|
|
||||||
dnl GLIBCPP_CHECK_UNISTD_DECL_AND_LINKAGE_1
|
|
||||||
AC_DEFUN(GLIBCPP_CHECK_UNISTD_DECL_AND_LINKAGE_1, [
|
|
||||||
AC_MSG_CHECKING([for $1 declaration])
|
|
||||||
if test x${glibcpp_cv_func_$1_use+set} != xset; then
|
|
||||||
AC_CACHE_VAL(glibcpp_cv_func_$1_use, [
|
|
||||||
AC_LANG_SAVE
|
|
||||||
AC_LANG_CPLUSPLUS
|
|
||||||
AC_TRY_COMPILE([#include <unistd.h>],
|
|
||||||
[ $1(0);],
|
|
||||||
[glibcpp_cv_func_$1_use=yes], [glibcpp_cv_func_$1_use=no])
|
|
||||||
AC_LANG_RESTORE
|
|
||||||
])
|
|
||||||
fi
|
|
||||||
AC_MSG_RESULT($glibcpp_cv_func_$1_use)
|
|
||||||
if test x$glibcpp_cv_func_$1_use = x"yes"; then
|
|
||||||
AC_CHECK_FUNCS($1)
|
|
||||||
fi
|
|
||||||
])
|
|
||||||
|
|
||||||
dnl
|
dnl
|
||||||
dnl Because the builtins are picky picky picky about the arguments they take,
|
dnl Because the builtins are picky picky picky about the arguments they take,
|
||||||
dnl do an explict linkage tests here.
|
dnl do an explict linkage tests here.
|
||||||
@ -752,26 +724,6 @@ AC_DEFUN(GLIBCPP_CHECK_STDLIB_SUPPORT, [
|
|||||||
CXXFLAGS="$ac_save_CXXFLAGS"
|
CXXFLAGS="$ac_save_CXXFLAGS"
|
||||||
])
|
])
|
||||||
|
|
||||||
dnl
|
|
||||||
dnl Check to see what the underlying c library is like
|
|
||||||
dnl These checks need to do two things:
|
|
||||||
dnl 1) make sure the name is declared when using the c++ compiler
|
|
||||||
dnl 2) make sure the name has "C" linkage
|
|
||||||
dnl This might seem like overkill but experience has shown that it's not...
|
|
||||||
dnl
|
|
||||||
dnl Define HAVE_ISATTY if "isatty" is declared and links
|
|
||||||
dnl
|
|
||||||
dnl GLIBCPP_CHECK_UNISTD_SUPPORT
|
|
||||||
AC_DEFUN(GLIBCPP_CHECK_UNISTD_SUPPORT, [
|
|
||||||
ac_test_CXXFLAGS="${CXXFLAGS+set}"
|
|
||||||
ac_save_CXXFLAGS="$CXXFLAGS"
|
|
||||||
CXXFLAGS='-fno-builtins -D_GNU_SOURCE'
|
|
||||||
|
|
||||||
GLIBCPP_CHECK_UNISTD_DECL_AND_LINKAGE_1(isatty)
|
|
||||||
|
|
||||||
CXXFLAGS="$ac_save_CXXFLAGS"
|
|
||||||
])
|
|
||||||
|
|
||||||
dnl
|
dnl
|
||||||
dnl Check to see what the underlying c library or math library is like.
|
dnl Check to see what the underlying c library or math library is like.
|
||||||
dnl These checks need to do two things:
|
dnl These checks need to do two things:
|
||||||
|
90
libstdc++-v3/aclocal.m4
vendored
90
libstdc++-v3/aclocal.m4
vendored
@ -1,4 +1,4 @@
|
|||||||
dnl aclocal.m4 generated automatically by aclocal 1.4-p5
|
dnl aclocal.m4 generated automatically by aclocal 1.4-p6
|
||||||
|
|
||||||
dnl Copyright (C) 1994, 1995-8, 1999, 2001 Free Software Foundation, Inc.
|
dnl Copyright (C) 1994, 1995-8, 1999, 2001 Free Software Foundation, Inc.
|
||||||
dnl This file is free software; the Free Software Foundation
|
dnl This file is free software; the Free Software Foundation
|
||||||
@ -602,34 +602,6 @@ AC_DEFUN(GLIBCPP_CHECK_STDLIB_DECL_AND_LINKAGE_3, [
|
|||||||
fi
|
fi
|
||||||
])
|
])
|
||||||
|
|
||||||
dnl
|
|
||||||
dnl Check to see if the (unistd function) argument passed is
|
|
||||||
dnl 1) declared when using the c++ compiler
|
|
||||||
dnl 2) has "C" linkage
|
|
||||||
dnl
|
|
||||||
dnl argument 1 is name of function to check
|
|
||||||
dnl
|
|
||||||
dnl ASSUMES argument is a function with ONE parameter
|
|
||||||
dnl
|
|
||||||
dnl GLIBCPP_CHECK_UNISTD_DECL_AND_LINKAGE_1
|
|
||||||
AC_DEFUN(GLIBCPP_CHECK_UNISTD_DECL_AND_LINKAGE_1, [
|
|
||||||
AC_MSG_CHECKING([for $1 declaration])
|
|
||||||
if test x${glibcpp_cv_func_$1_use+set} != xset; then
|
|
||||||
AC_CACHE_VAL(glibcpp_cv_func_$1_use, [
|
|
||||||
AC_LANG_SAVE
|
|
||||||
AC_LANG_CPLUSPLUS
|
|
||||||
AC_TRY_COMPILE([#include <unistd.h>],
|
|
||||||
[ $1(0);],
|
|
||||||
[glibcpp_cv_func_$1_use=yes], [glibcpp_cv_func_$1_use=no])
|
|
||||||
AC_LANG_RESTORE
|
|
||||||
])
|
|
||||||
fi
|
|
||||||
AC_MSG_RESULT($glibcpp_cv_func_$1_use)
|
|
||||||
if test x$glibcpp_cv_func_$1_use = x"yes"; then
|
|
||||||
AC_CHECK_FUNCS($1)
|
|
||||||
fi
|
|
||||||
])
|
|
||||||
|
|
||||||
dnl
|
dnl
|
||||||
dnl Because the builtins are picky picky picky about the arguments they take,
|
dnl Because the builtins are picky picky picky about the arguments they take,
|
||||||
dnl do an explict linkage tests here.
|
dnl do an explict linkage tests here.
|
||||||
@ -764,26 +736,6 @@ AC_DEFUN(GLIBCPP_CHECK_STDLIB_SUPPORT, [
|
|||||||
CXXFLAGS="$ac_save_CXXFLAGS"
|
CXXFLAGS="$ac_save_CXXFLAGS"
|
||||||
])
|
])
|
||||||
|
|
||||||
dnl
|
|
||||||
dnl Check to see what the underlying c library is like
|
|
||||||
dnl These checks need to do two things:
|
|
||||||
dnl 1) make sure the name is declared when using the c++ compiler
|
|
||||||
dnl 2) make sure the name has "C" linkage
|
|
||||||
dnl This might seem like overkill but experience has shown that it's not...
|
|
||||||
dnl
|
|
||||||
dnl Define HAVE_ISATTY if "isatty" is declared and links
|
|
||||||
dnl
|
|
||||||
dnl GLIBCPP_CHECK_UNISTD_SUPPORT
|
|
||||||
AC_DEFUN(GLIBCPP_CHECK_UNISTD_SUPPORT, [
|
|
||||||
ac_test_CXXFLAGS="${CXXFLAGS+set}"
|
|
||||||
ac_save_CXXFLAGS="$CXXFLAGS"
|
|
||||||
CXXFLAGS='-fno-builtins -D_GNU_SOURCE'
|
|
||||||
|
|
||||||
GLIBCPP_CHECK_UNISTD_DECL_AND_LINKAGE_1(isatty)
|
|
||||||
|
|
||||||
CXXFLAGS="$ac_save_CXXFLAGS"
|
|
||||||
])
|
|
||||||
|
|
||||||
dnl
|
dnl
|
||||||
dnl Check to see what the underlying c library or math library is like.
|
dnl Check to see what the underlying c library or math library is like.
|
||||||
dnl These checks need to do two things:
|
dnl These checks need to do two things:
|
||||||
@ -2313,7 +2265,7 @@ AC_MSG_RESULT($enable_symvers)
|
|||||||
])
|
])
|
||||||
|
|
||||||
|
|
||||||
# isc-posix.m4 serial 1 (gettext-0.10.40)
|
# isc-posix.m4 serial 2 (gettext-0.11.2)
|
||||||
dnl Copyright (C) 1995-2002 Free Software Foundation, Inc.
|
dnl Copyright (C) 1995-2002 Free Software Foundation, Inc.
|
||||||
dnl This file is free software, distributed under the terms of the GNU
|
dnl This file is free software, distributed under the terms of the GNU
|
||||||
dnl General Public License. As a special exception to the GNU General
|
dnl General Public License. As a special exception to the GNU General
|
||||||
@ -2321,6 +2273,8 @@ dnl Public License, this file may be distributed as part of a program
|
|||||||
dnl that contains a configuration script generated by Autoconf, under
|
dnl that contains a configuration script generated by Autoconf, under
|
||||||
dnl the same distribution terms as the rest of that program.
|
dnl the same distribution terms as the rest of that program.
|
||||||
|
|
||||||
|
# This file is not needed with autoconf-2.53 and newer. Remove it in 2005.
|
||||||
|
|
||||||
# This test replaces the one in autoconf.
|
# This test replaces the one in autoconf.
|
||||||
# Currently this macro should have the same name as the autoconf macro
|
# Currently this macro should have the same name as the autoconf macro
|
||||||
# because gettext's gettext.m4 (distributed in the automake package)
|
# because gettext's gettext.m4 (distributed in the automake package)
|
||||||
@ -2381,7 +2335,8 @@ dnl Usage:
|
|||||||
dnl AM_INIT_AUTOMAKE(package,version, [no-define])
|
dnl AM_INIT_AUTOMAKE(package,version, [no-define])
|
||||||
|
|
||||||
AC_DEFUN([AM_INIT_AUTOMAKE],
|
AC_DEFUN([AM_INIT_AUTOMAKE],
|
||||||
[AC_REQUIRE([AC_PROG_INSTALL])
|
[AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl
|
||||||
|
AC_REQUIRE([AC_PROG_INSTALL])
|
||||||
PACKAGE=[$1]
|
PACKAGE=[$1]
|
||||||
AC_SUBST(PACKAGE)
|
AC_SUBST(PACKAGE)
|
||||||
VERSION=[$2]
|
VERSION=[$2]
|
||||||
@ -2397,13 +2352,42 @@ AC_REQUIRE([AM_SANITY_CHECK])
|
|||||||
AC_REQUIRE([AC_ARG_PROGRAM])
|
AC_REQUIRE([AC_ARG_PROGRAM])
|
||||||
dnl FIXME This is truly gross.
|
dnl FIXME This is truly gross.
|
||||||
missing_dir=`cd $ac_aux_dir && pwd`
|
missing_dir=`cd $ac_aux_dir && pwd`
|
||||||
AM_MISSING_PROG(ACLOCAL, aclocal, $missing_dir)
|
AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version}, $missing_dir)
|
||||||
AM_MISSING_PROG(AUTOCONF, autoconf, $missing_dir)
|
AM_MISSING_PROG(AUTOCONF, autoconf, $missing_dir)
|
||||||
AM_MISSING_PROG(AUTOMAKE, automake, $missing_dir)
|
AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version}, $missing_dir)
|
||||||
AM_MISSING_PROG(AUTOHEADER, autoheader, $missing_dir)
|
AM_MISSING_PROG(AUTOHEADER, autoheader, $missing_dir)
|
||||||
AM_MISSING_PROG(MAKEINFO, makeinfo, $missing_dir)
|
AM_MISSING_PROG(MAKEINFO, makeinfo, $missing_dir)
|
||||||
AC_REQUIRE([AC_PROG_MAKE_SET])])
|
AC_REQUIRE([AC_PROG_MAKE_SET])])
|
||||||
|
|
||||||
|
# Copyright 2002 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
# This program is free software; you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation; either version 2, or (at your option)
|
||||||
|
# any later version.
|
||||||
|
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this program; if not, write to the Free Software
|
||||||
|
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
|
||||||
|
|
||||||
|
# AM_AUTOMAKE_VERSION(VERSION)
|
||||||
|
# ----------------------------
|
||||||
|
# Automake X.Y traces this macro to ensure aclocal.m4 has been
|
||||||
|
# generated from the m4 files accompanying Automake X.Y.
|
||||||
|
AC_DEFUN([AM_AUTOMAKE_VERSION],[am__api_version="1.4"])
|
||||||
|
|
||||||
|
# AM_SET_CURRENT_AUTOMAKE_VERSION
|
||||||
|
# -------------------------------
|
||||||
|
# Call AM_AUTOMAKE_VERSION so it can be traced.
|
||||||
|
# This function is AC_REQUIREd by AC_INIT_AUTOMAKE.
|
||||||
|
AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
|
||||||
|
[AM_AUTOMAKE_VERSION([1.4-p6])])
|
||||||
|
|
||||||
#
|
#
|
||||||
# Check to make sure that the build environment is sane.
|
# Check to make sure that the build environment is sane.
|
||||||
#
|
#
|
||||||
|
@ -461,9 +461,6 @@
|
|||||||
/* Define if you have the iconv_open function. */
|
/* Define if you have the iconv_open function. */
|
||||||
#undef HAVE_ICONV_OPEN
|
#undef HAVE_ICONV_OPEN
|
||||||
|
|
||||||
/* Define if you have the isatty function. */
|
|
||||||
#undef HAVE_ISATTY
|
|
||||||
|
|
||||||
/* Define if you have the isinf function. */
|
/* Define if you have the isinf function. */
|
||||||
#undef HAVE_ISINF
|
#undef HAVE_ISINF
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
// Wrapper of C-language FILE struct -*- C++ -*-
|
// Wrapper of C-language FILE struct -*- C++ -*-
|
||||||
|
|
||||||
// Copyright (C) 2000, 2001, 2002 Free Software Foundation, Inc.
|
// Copyright (C) 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
|
||||||
//
|
//
|
||||||
// This file is part of the GNU ISO C++ Library. This library is free
|
// This file is part of the GNU ISO C++ Library. This library is free
|
||||||
// software; you can redistribute it and/or modify it under the
|
// software; you can redistribute it and/or modify it under the
|
||||||
@ -33,6 +33,7 @@
|
|||||||
|
|
||||||
#include <bits/basic_file.h>
|
#include <bits/basic_file.h>
|
||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
|
#include <errno.h>
|
||||||
|
|
||||||
namespace std
|
namespace std
|
||||||
{
|
{
|
||||||
@ -191,33 +192,69 @@ namespace std
|
|||||||
return __retval;
|
return __retval;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// In the next four functions we want to use stdio functions only
|
||||||
|
// when synced with stdio (_M_buf_size == 1): I/O primitives do not
|
||||||
|
// block until the asked number of bytes are available.
|
||||||
streamsize
|
streamsize
|
||||||
__basic_file<char>::xsgetn(char* __s, streamsize __n)
|
__basic_file<char>::xsgetn(char* __s, streamsize __n, bool __stdio)
|
||||||
{ return fread(__s, 1, __n, _M_cfile); }
|
{
|
||||||
|
if (__stdio)
|
||||||
|
return fread(__s, 1, __n, _M_cfile);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
streamsize __ret;
|
||||||
|
do
|
||||||
|
__ret = read(this->fd(), __s, __n);
|
||||||
|
while (__ret == -1L && errno == EINTR);
|
||||||
|
return __ret;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
streamsize
|
streamsize
|
||||||
__basic_file<char>::xsputn(const char* __s, streamsize __n)
|
__basic_file<char>::xsputn(const char* __s, streamsize __n, bool __stdio)
|
||||||
{ return fwrite(__s, 1, __n, _M_cfile); }
|
{
|
||||||
|
if (__stdio)
|
||||||
|
return fwrite(__s, 1, __n, _M_cfile);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
streamsize __ret;
|
||||||
|
do
|
||||||
|
__ret = write(this->fd(), __s, __n);
|
||||||
|
while (__ret == -1L && errno == EINTR);
|
||||||
|
return __ret;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
streamoff
|
streamoff
|
||||||
__basic_file<char>::seekoff(streamoff __off, ios_base::seekdir __way,
|
__basic_file<char>::seekoff(streamoff __off, ios_base::seekdir __way,
|
||||||
ios_base::openmode /*__mode*/)
|
bool __stdio, ios_base::openmode /*__mode*/)
|
||||||
{
|
{
|
||||||
if (!fseek(_M_cfile, __off, __way))
|
if (!__stdio)
|
||||||
return ftell(_M_cfile);
|
return lseek(this->fd(), __off, __way);
|
||||||
else
|
else
|
||||||
// Fseek failed.
|
{
|
||||||
return -1L;
|
if (!fseek(_M_cfile, __off, __way))
|
||||||
|
return ftell(_M_cfile);
|
||||||
|
else
|
||||||
|
// Fseek failed.
|
||||||
|
return -1L;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
streamoff
|
streamoff
|
||||||
__basic_file<char>::seekpos(streamoff __pos, ios_base::openmode /*__mode*/)
|
__basic_file<char>::seekpos(streamoff __pos, bool __stdio,
|
||||||
|
ios_base::openmode /*__mode*/)
|
||||||
{
|
{
|
||||||
if (!fseek(_M_cfile, __pos, ios_base::beg))
|
if (!__stdio)
|
||||||
return ftell(_M_cfile);
|
return lseek(this->fd(), __pos, ios_base::beg);
|
||||||
else
|
else
|
||||||
// Fseek failed.
|
{
|
||||||
return -1L;
|
if (!fseek(_M_cfile, __pos, ios_base::beg))
|
||||||
|
return ftell(_M_cfile);
|
||||||
|
else
|
||||||
|
// Fseek failed.
|
||||||
|
return -1L;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
|
@ -93,17 +93,17 @@ namespace std
|
|||||||
~__basic_file();
|
~__basic_file();
|
||||||
|
|
||||||
streamsize
|
streamsize
|
||||||
xsputn(const char* __s, streamsize __n);
|
xsputn(const char* __s, streamsize __n, bool __stdio);
|
||||||
|
|
||||||
streamsize
|
streamsize
|
||||||
xsgetn(char* __s, streamsize __n);
|
xsgetn(char* __s, streamsize __n, bool __stdio);
|
||||||
|
|
||||||
streamoff
|
streamoff
|
||||||
seekoff(streamoff __off, ios_base::seekdir __way,
|
seekoff(streamoff __off, ios_base::seekdir __way, bool __stdio,
|
||||||
ios_base::openmode __mode = ios_base::in | ios_base::out);
|
ios_base::openmode __mode = ios_base::in | ios_base::out);
|
||||||
|
|
||||||
streamoff
|
streamoff
|
||||||
seekpos(streamoff __pos,
|
seekpos(streamoff __pos, bool __stdio,
|
||||||
ios_base::openmode __mode = ios_base::in | ios_base::out);
|
ios_base::openmode __mode = ios_base::in | ios_base::out);
|
||||||
|
|
||||||
int
|
int
|
||||||
|
2582
libstdc++-v3/configure
vendored
2582
libstdc++-v3/configure
vendored
File diff suppressed because it is too large
Load Diff
@ -411,7 +411,6 @@ else
|
|||||||
GLIBCPP_CHECK_COMPLEX_MATH_SUPPORT
|
GLIBCPP_CHECK_COMPLEX_MATH_SUPPORT
|
||||||
GLIBCPP_CHECK_WCHAR_T_SUPPORT
|
GLIBCPP_CHECK_WCHAR_T_SUPPORT
|
||||||
GLIBCPP_CHECK_STDLIB_SUPPORT
|
GLIBCPP_CHECK_STDLIB_SUPPORT
|
||||||
GLIBCPP_CHECK_UNISTD_SUPPORT
|
|
||||||
AC_LC_MESSAGES
|
AC_LC_MESSAGES
|
||||||
|
|
||||||
AC_TRY_COMPILE([
|
AC_TRY_COMPILE([
|
||||||
|
@ -102,7 +102,7 @@ namespace std
|
|||||||
// using underflow.
|
// using underflow.
|
||||||
if (__mode & ios_base::in && _M_buf_allocated)
|
if (__mode & ios_base::in && _M_buf_allocated)
|
||||||
this->underflow();
|
this->underflow();
|
||||||
|
|
||||||
if ((__mode & ios_base::ate)
|
if ((__mode & ios_base::ate)
|
||||||
&& this->seekoff(0, ios_base::end, __mode) < 0)
|
&& this->seekoff(0, ios_base::end, __mode) < 0)
|
||||||
{
|
{
|
||||||
@ -276,10 +276,13 @@ namespace std
|
|||||||
{
|
{
|
||||||
const locale __loc = this->getloc();
|
const locale __loc = this->getloc();
|
||||||
const __codecvt_type& __cvt = use_facet<__codecvt_type>(__loc);
|
const __codecvt_type& __cvt = use_facet<__codecvt_type>(__loc);
|
||||||
|
// Sync with stdio.
|
||||||
|
bool __sync = this->_M_buf_size == 1;
|
||||||
|
|
||||||
if (__cvt.always_noconv() && __ilen)
|
if (__cvt.always_noconv() && __ilen)
|
||||||
{
|
{
|
||||||
__elen += _M_file.xsputn(reinterpret_cast<char*>(__ibuf), __ilen);
|
__elen +=
|
||||||
|
_M_file.xsputn(reinterpret_cast<char*>(__ibuf), __ilen, __sync);
|
||||||
__plen += __ilen;
|
__plen += __ilen;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -309,7 +312,7 @@ namespace std
|
|||||||
|
|
||||||
if (__blen)
|
if (__blen)
|
||||||
{
|
{
|
||||||
__elen += _M_file.xsputn(__buf, __blen);
|
__elen += _M_file.xsputn(__buf, __blen, __sync);
|
||||||
__plen += __blen;
|
__plen += __blen;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -331,7 +334,7 @@ namespace std
|
|||||||
}
|
}
|
||||||
if (__rlen)
|
if (__rlen)
|
||||||
{
|
{
|
||||||
__elen += _M_file.xsputn(__buf, __rlen);
|
__elen += _M_file.xsputn(__buf, __rlen, __sync);
|
||||||
__plen += __rlen;
|
__plen += __rlen;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -346,6 +349,8 @@ namespace std
|
|||||||
int_type __ret = traits_type::eof();
|
int_type __ret = traits_type::eof();
|
||||||
bool __testput = this->_M_out_cur && this->_M_out_beg < this->_M_out_lim;
|
bool __testput = this->_M_out_cur && this->_M_out_beg < this->_M_out_lim;
|
||||||
bool __testunbuffered = _M_file.is_open() && !this->_M_buf_size_opt;
|
bool __testunbuffered = _M_file.is_open() && !this->_M_buf_size_opt;
|
||||||
|
// Sync with stdio.
|
||||||
|
bool __sync = this->_M_buf_size == 1;
|
||||||
|
|
||||||
if (__testput || __testunbuffered)
|
if (__testput || __testunbuffered)
|
||||||
{
|
{
|
||||||
@ -359,7 +364,7 @@ namespace std
|
|||||||
if (_M_filepos && _M_filepos != this->_M_out_beg)
|
if (_M_filepos && _M_filepos != this->_M_out_beg)
|
||||||
{
|
{
|
||||||
off_type __off = this->_M_out_beg - _M_filepos;
|
off_type __off = this->_M_out_beg - _M_filepos;
|
||||||
_M_file.seekoff(__off, ios_base::cur);
|
_M_file.seekoff(__off, ios_base::cur, __sync);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Convert internal buffer to external representation, output.
|
// Convert internal buffer to external representation, output.
|
||||||
@ -434,7 +439,9 @@ namespace std
|
|||||||
pos_type __ret = pos_type(off_type(-1));
|
pos_type __ret = pos_type(off_type(-1));
|
||||||
bool __testin = (ios_base::in & this->_M_mode & __mode) != 0;
|
bool __testin = (ios_base::in & this->_M_mode & __mode) != 0;
|
||||||
bool __testout = (ios_base::out & this->_M_mode & __mode) != 0;
|
bool __testout = (ios_base::out & this->_M_mode & __mode) != 0;
|
||||||
|
// Sync with stdio.
|
||||||
|
bool __sync = this->_M_buf_size == 1;
|
||||||
|
|
||||||
// Should probably do has_facet checks here.
|
// Should probably do has_facet checks here.
|
||||||
int __width = use_facet<__codecvt_type>(this->_M_buf_locale).encoding();
|
int __width = use_facet<__codecvt_type>(this->_M_buf_locale).encoding();
|
||||||
if (__width < 0)
|
if (__width < 0)
|
||||||
@ -468,7 +475,7 @@ namespace std
|
|||||||
__computed_off += this->_M_in_cur - _M_filepos;
|
__computed_off += this->_M_in_cur - _M_filepos;
|
||||||
|
|
||||||
// Return pos_type(off_type(-1)) in case of failure.
|
// Return pos_type(off_type(-1)) in case of failure.
|
||||||
__ret = _M_file.seekoff(__computed_off, __way, __mode);
|
__ret = _M_file.seekoff(__computed_off, __way, __sync, __mode);
|
||||||
_M_set_indeterminate();
|
_M_set_indeterminate();
|
||||||
}
|
}
|
||||||
// NB: Need to do this in case _M_file in indeterminate
|
// NB: Need to do this in case _M_file in indeterminate
|
||||||
@ -476,7 +483,8 @@ namespace std
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
pos_type __tmp =
|
pos_type __tmp =
|
||||||
_M_file.seekoff(__off, ios_base::cur, __mode);
|
_M_file.seekoff(__off, ios_base::cur,
|
||||||
|
__sync, __mode);
|
||||||
if (__tmp >= 0)
|
if (__tmp >= 0)
|
||||||
{
|
{
|
||||||
// Seek successful.
|
// Seek successful.
|
||||||
|
@ -314,6 +314,8 @@ namespace std
|
|||||||
int __ret = 0;
|
int __ret = 0;
|
||||||
bool __testput = this->_M_out_cur
|
bool __testput = this->_M_out_cur
|
||||||
&& this->_M_out_beg < this->_M_out_lim;
|
&& this->_M_out_beg < this->_M_out_lim;
|
||||||
|
// Sync with stdio.
|
||||||
|
bool __sync = this->_M_buf_size == 1;
|
||||||
|
|
||||||
// Make sure that the internal buffer resyncs its idea of
|
// Make sure that the internal buffer resyncs its idea of
|
||||||
// the file position with the external file.
|
// the file position with the external file.
|
||||||
@ -327,7 +329,7 @@ namespace std
|
|||||||
traits_type::eof()))
|
traits_type::eof()))
|
||||||
__ret = -1;
|
__ret = -1;
|
||||||
else if (__off)
|
else if (__off)
|
||||||
_M_file.seekoff(__off, ios_base::cur);
|
_M_file.seekoff(__off, ios_base::cur, __sync);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
_M_file.sync();
|
_M_file.sync();
|
||||||
|
@ -43,6 +43,8 @@ namespace std
|
|||||||
int_type __ret = traits_type::eof();
|
int_type __ret = traits_type::eof();
|
||||||
bool __testin = _M_mode & ios_base::in;
|
bool __testin = _M_mode & ios_base::in;
|
||||||
bool __testout = _M_mode & ios_base::out;
|
bool __testout = _M_mode & ios_base::out;
|
||||||
|
// Sync with stdio.
|
||||||
|
bool __sync = _M_buf_size == 1;
|
||||||
|
|
||||||
if (__testin)
|
if (__testin)
|
||||||
{
|
{
|
||||||
@ -71,15 +73,16 @@ namespace std
|
|||||||
_M_really_overflow();
|
_M_really_overflow();
|
||||||
else if (_M_in_cur != _M_filepos)
|
else if (_M_in_cur != _M_filepos)
|
||||||
_M_file.seekoff(_M_in_cur - _M_filepos,
|
_M_file.seekoff(_M_in_cur - _M_filepos,
|
||||||
ios_base::cur, ios_base::in);
|
ios_base::cur, __sync, ios_base::in);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (__testinit || __testget)
|
if (__testinit || __testget)
|
||||||
{
|
{
|
||||||
streamsize __elen = 0;
|
streamsize __elen = 0;
|
||||||
streamsize __ilen = 0;
|
streamsize __ilen = 0;
|
||||||
|
|
||||||
__elen = _M_file.xsgetn(reinterpret_cast<char*>(_M_in_beg),
|
__elen = _M_file.xsgetn(reinterpret_cast<char*>(_M_in_beg),
|
||||||
_M_buf_size);
|
_M_buf_size, __sync);
|
||||||
__ilen = __elen;
|
__ilen = __elen;
|
||||||
|
|
||||||
if (0 < __ilen)
|
if (0 < __ilen)
|
||||||
@ -90,7 +93,7 @@ namespace std
|
|||||||
__ret = traits_type::to_int_type(*_M_in_cur);
|
__ret = traits_type::to_int_type(*_M_in_cur);
|
||||||
if (__bump)
|
if (__bump)
|
||||||
_M_in_cur_move(1);
|
_M_in_cur_move(1);
|
||||||
else if (_M_buf_size == 1)
|
else if (__sync)
|
||||||
{
|
{
|
||||||
// If we are synced with stdio, we have to unget the
|
// If we are synced with stdio, we have to unget the
|
||||||
// character we just read so that the file pointer
|
// character we just read so that the file pointer
|
||||||
@ -123,6 +126,8 @@ namespace std
|
|||||||
int_type __ret = traits_type::eof();
|
int_type __ret = traits_type::eof();
|
||||||
bool __testin = _M_mode & ios_base::in;
|
bool __testin = _M_mode & ios_base::in;
|
||||||
bool __testout = _M_mode & ios_base::out;
|
bool __testout = _M_mode & ios_base::out;
|
||||||
|
// Sync with stdio.
|
||||||
|
bool __sync = _M_buf_size == 1;
|
||||||
|
|
||||||
if (__testin)
|
if (__testin)
|
||||||
{
|
{
|
||||||
@ -151,7 +156,7 @@ namespace std
|
|||||||
_M_really_overflow();
|
_M_really_overflow();
|
||||||
else if (_M_in_cur != _M_filepos)
|
else if (_M_in_cur != _M_filepos)
|
||||||
_M_file.seekoff(_M_in_cur - _M_filepos,
|
_M_file.seekoff(_M_in_cur - _M_filepos,
|
||||||
ios_base::cur, ios_base::in);
|
ios_base::cur, __sync, ios_base::in);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (__testinit || __testget)
|
if (__testinit || __testget)
|
||||||
@ -164,13 +169,13 @@ namespace std
|
|||||||
if (__cvt.always_noconv())
|
if (__cvt.always_noconv())
|
||||||
{
|
{
|
||||||
__elen = _M_file.xsgetn(reinterpret_cast<char*>(_M_in_beg),
|
__elen = _M_file.xsgetn(reinterpret_cast<char*>(_M_in_beg),
|
||||||
_M_buf_size);
|
_M_buf_size, __sync);
|
||||||
__ilen = __elen;
|
__ilen = __elen;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
char* __buf = static_cast<char*>(__builtin_alloca(_M_buf_size));
|
char* __buf = static_cast<char*>(__builtin_alloca(_M_buf_size));
|
||||||
__elen = _M_file.xsgetn(__buf, _M_buf_size);
|
__elen = _M_file.xsgetn(__buf, _M_buf_size, __sync);
|
||||||
|
|
||||||
const char* __eend;
|
const char* __eend;
|
||||||
char_type* __iend;
|
char_type* __iend;
|
||||||
@ -183,7 +188,7 @@ namespace std
|
|||||||
{
|
{
|
||||||
// Unwind.
|
// Unwind.
|
||||||
__ilen = 0;
|
__ilen = 0;
|
||||||
_M_file.seekoff(-__elen, ios_base::cur, ios_base::in);
|
_M_file.seekoff(-__elen, ios_base::cur, __sync, ios_base::in);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -195,7 +200,7 @@ namespace std
|
|||||||
__ret = traits_type::to_int_type(*_M_in_cur);
|
__ret = traits_type::to_int_type(*_M_in_cur);
|
||||||
if (__bump)
|
if (__bump)
|
||||||
_M_in_cur_move(1);
|
_M_in_cur_move(1);
|
||||||
else if (_M_buf_size == 1)
|
else if (__sync)
|
||||||
{
|
{
|
||||||
// If we are synced with stdio, we have to unget the
|
// If we are synced with stdio, we have to unget the
|
||||||
// character we just read so that the file pointer
|
// character we just read so that the file pointer
|
||||||
|
@ -38,9 +38,6 @@
|
|||||||
#include <fstream>
|
#include <fstream>
|
||||||
#include <bits/atomicity.h>
|
#include <bits/atomicity.h>
|
||||||
#include <ext/stdio_filebuf.h>
|
#include <ext/stdio_filebuf.h>
|
||||||
#ifdef _GLIBCPP_HAVE_UNISTD_H
|
|
||||||
#include <unistd.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
namespace __gnu_cxx
|
namespace __gnu_cxx
|
||||||
{
|
{
|
||||||
@ -160,12 +157,7 @@ namespace std
|
|||||||
ios_base::Init::_S_ios_create(bool __sync)
|
ios_base::Init::_S_ios_create(bool __sync)
|
||||||
{
|
{
|
||||||
size_t __out_size = __sync ? 0 : static_cast<size_t>(BUFSIZ);
|
size_t __out_size = __sync ? 0 : static_cast<size_t>(BUFSIZ);
|
||||||
#ifdef _GLIBCPP_HAVE_ISATTY
|
size_t __in_size = __sync ? 1 : static_cast<size_t>(BUFSIZ);
|
||||||
size_t __in_size =
|
|
||||||
(__sync || isatty (0)) ? 1 : static_cast<size_t>(BUFSIZ);
|
|
||||||
#else
|
|
||||||
size_t __in_size = 1;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// NB: The file globals.cc creates the four standard files
|
// NB: The file globals.cc creates the four standard files
|
||||||
// with NULL buffers. At this point, we swap out the dummy NULL
|
// with NULL buffers. At this point, we swap out the dummy NULL
|
||||||
|
@ -204,6 +204,22 @@ test10()
|
|||||||
cout << "_M_gcount: "<< cin.gcount() << endl;
|
cout << "_M_gcount: "<< cin.gcount() << endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// libstdc++/7744
|
||||||
|
void test11()
|
||||||
|
{
|
||||||
|
std::ios::sync_with_stdio(false);
|
||||||
|
|
||||||
|
std::cout
|
||||||
|
<< "\n:: f2() ::\n"
|
||||||
|
<< "Type in the characters 'abc' and press <ENTER>: ";
|
||||||
|
std::cin.peek();
|
||||||
|
|
||||||
|
std::cout
|
||||||
|
<< "The number of unread characters should be 4 (a, b, c, \\n): "
|
||||||
|
<< std::cin.rdbuf()->in_avail()
|
||||||
|
<< '\n';
|
||||||
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
main()
|
main()
|
||||||
{
|
{
|
||||||
@ -218,5 +234,6 @@ main()
|
|||||||
// test08();
|
// test08();
|
||||||
// test09();
|
// test09();
|
||||||
// test10();
|
// test10();
|
||||||
|
// test11();
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user