From mboxrd@z Thu Jan 1 00:00:00 1970 From: Andreas Schwab To: egcs@cygnus.com Subject: libio bugs Date: Wed, 21 Jan 1998 09:54:00 -0000 Message-id: X-SW-Source: 1998-01/msg00762.html This patch fixes some bugs in libio. Btw, why does _IO_wchar_t in streambuf.h default to short and not _G_wchar_t? And why does ios::fill(_IO_wchar_t) cast its argument to char? Unfortunately, changing that now breaks binary compatibility on Linux. 1998-01-20 Andreas Schwab * iostream.cc (istream::operator>>(long double&)) [!_G_HAVE_LONG_DOUBLE_IO]: Scan value into separate variable, in case long double is bigger than double. (ostream::operator<<(double)) [_G_HAVE_PRINTF_FP]: Fix order of initializers of struct printf_info to match declaration order, to work around g++ bug. (ostream::operator<<(long double)) [_G_HAVE_PRINTF_FP]: Likewise. * gen-params: Add missing quotes. Avoid useless use of command substitution. *** egcs-980115/libio/gen-params.~1~ Thu Nov 27 00:54:21 1997 --- egcs-980115/libio/gen-params Tue Dec 23 20:48:12 1997 *************** fi *** 277,283 **** tr ' ' ' ' dummy.out for TYPE in dev_t clock_t fpos_t gid_t ino_t mode_t nlink_t off_t pid_t ptrdiff_t sigset_t size_t ssize_t time_t uid_t va_list wchar_t wint_t int16_t uint16_t int32_t uint_32_t u_int16_t u_int32_t; do ! IMPORTED=`eval 'echo $'"$TYPE"` if [ -n "${IMPORTED}" ] ; then eval "$TYPE='$IMPORTED'" else --- 277,283 ---- tr ' ' ' ' dummy.out for TYPE in dev_t clock_t fpos_t gid_t ino_t mode_t nlink_t off_t pid_t ptrdiff_t sigset_t size_t ssize_t time_t uid_t va_list wchar_t wint_t int16_t uint16_t int32_t uint_32_t u_int16_t u_int32_t; do ! eval IMPORTED=\$$TYPE if [ -n "${IMPORTED}" ] ; then eval "$TYPE='$IMPORTED'" else *************** done *** 318,326 **** # Look for some standard macros. for NAME in BUFSIZ FOPEN_MAX FILENAME_MAX NULL; do ! IMPORTED=`eval 'echo $'"$NAME"` if [ -n "${IMPORTED}" ] ; then ! eval "$NAME='$IMPORTED /* specified */" else rm -f TMP ${SED} -n -e 's| *;|;|g' -e "s|long X${NAME}= *\(.*\);|\1|w TMP" \ --- 318,326 ---- # Look for some standard macros. for NAME in BUFSIZ FOPEN_MAX FILENAME_MAX NULL; do ! eval IMPORTED=\$$NAME if [ -n "${IMPORTED}" ] ; then ! eval "$NAME='$IMPORTED /* specified */'" else rm -f TMP ${SED} -n -e 's| *;|;|g' -e "s|long X${NAME}= *\(.*\);|\1|w TMP" \ *************** done *** 334,342 **** # These macros must be numerical constants; strip any trailing 'L's. for NAME in SHRT_MAX INT_MAX LONG_MAX LONG_LONG_MAX; do ! IMPORTED=`eval 'echo $'"$NAME"` if [ -n "${IMPORTED}" ] ; then ! eval "$NAME='$IMPORTED /* specified */" else rm -f TMP ${SED} -n -e 's| *;|;|g' -e "s|long X${NAME}= *\([0-9]*\)L* *;|\1|w TMP" \ --- 334,342 ---- # These macros must be numerical constants; strip any trailing 'L's. for NAME in SHRT_MAX INT_MAX LONG_MAX LONG_LONG_MAX; do ! eval IMPORTED=\$$NAME if [ -n "${IMPORTED}" ] ; then ! eval "$NAME='$IMPORTED /* specified */'" else rm -f TMP ${SED} -n -e 's| *;|;|g' -e "s|long X${NAME}= *\([0-9]*\)L* *;|\1|w TMP" \ *** egcs-980115/libio/iostream.cc.~1~ Fri Oct 3 19:14:02 1997 --- egcs-980115/libio/iostream.cc Fri Jan 16 20:32:18 1998 *************** READ_INT(bool) *** 333,343 **** istream& istream::operator>>(long double& x) { if (ipfx0()) #if _G_HAVE_LONG_DOUBLE_IO scan("%Lg", &x); #else ! scan("%lg", &x); #endif return *this; } --- 333,347 ---- istream& istream::operator>>(long double& x) { if (ipfx0()) + { #if _G_HAVE_LONG_DOUBLE_IO scan("%Lg", &x); #else ! double y; ! scan("%lg", &y); ! x = y; #endif + } return *this; } *************** ostream& ostream::operator<<(double n) *** 628,637 **** left: (flags() & ios::left) != 0, showsign: (flags() & ios::showpos) != 0, group: 0, - pad: fill() #if defined __GLIBC__ && __GLIBC__ >= 2 ! , extra: 0 #endif }; const void *ptr = (const void *) &n; if (__printf_fp (rdbuf(), &info, &ptr) < 0) --- 632,641 ---- left: (flags() & ios::left) != 0, showsign: (flags() & ios::showpos) != 0, group: 0, #if defined __GLIBC__ && __GLIBC__ >= 2 ! extra: 0, #endif + pad: fill() }; const void *ptr = (const void *) &n; if (__printf_fp (rdbuf(), &info, &ptr) < 0) *************** ostream& ostream::operator<<(long double *** 731,740 **** left: (flags() & ios::left) != 0, showsign: (flags() & ios::showpos) != 0, group: 0, - pad: fill() #if defined __GLIBC__ && __GLIBC__ >= 2 ! , extra: 0 #endif }; const void *ptr = (const void *) &n; --- 735,744 ---- left: (flags() & ios::left) != 0, showsign: (flags() & ios::showpos) != 0, group: 0, #if defined __GLIBC__ && __GLIBC__ >= 2 ! extra: 0, #endif + pad: fill() }; const void *ptr = (const void *) &n;