diff options
author | Andreas Schwab <schwab@issan.informatik.uni-dortmund.de> | 1998-02-24 20:02:06 +0000 |
---|---|---|
committer | Jeff Law <law@gcc.gnu.org> | 1998-02-24 13:02:06 -0700 |
commit | 5f8b9c80dfea24581db3c80c87f201b064812383 (patch) | |
tree | a321e4ec430d27d2123a796e41e1e632530ff316 | |
parent | 3ceda776d8ecd50a7900b1a8cf128871d7fee409 (diff) | |
download | gcc-5f8b9c80dfea24581db3c80c87f201b064812383.tar.gz |
Changes for _G_IO_IO_FILE_VERSION == 0x20001:
* libioP.h (_IO_showmanyc_t, _IO_SHOWMANYC, _IO_imbue_t,
_IO_IMBUE): New definitions.
(struct _IO_jump_t): Add __showmanyc and __imbue fields.
(_IO_file_fopen): Add new fourth argument.
* filebuf.cc (filebuf::open): Pass new fourth argument to
_IO_file_fopen.
* iolibio.h (_IO_freopen): Likewise.
* streambuf.cc (streambuf::showmanyc, streambuf::imbue): New
functions.
* streambuf.h (_IO_wchar_t): Define to _G_wchar_t.
(ios::fill): Remove casts.
(struct streambuf): Add showmanyc and imbue members.
* iostream.cc (ostream::operator<<(double n)) [__GLIBC_MINOR__ >=
1]: Initialize new fields is_char of struct printf_info.
(ostream::operator<<(long double n)) [__GLIBC_MINOR__ >= 1]:
Likewise.
From-SVN: r18221
-rw-r--r-- | libio/ChangeLog | 21 | ||||
-rw-r--r-- | libio/filebuf.cc | 4 | ||||
-rw-r--r-- | libio/iolibio.h | 5 | ||||
-rw-r--r-- | libio/iostream.cc | 6 | ||||
-rw-r--r-- | libio/libioP.h | 22 | ||||
-rw-r--r-- | libio/streambuf.cc | 11 | ||||
-rw-r--r-- | libio/streambuf.h | 12 |
7 files changed, 79 insertions, 2 deletions
diff --git a/libio/ChangeLog b/libio/ChangeLog index 17385a03e4e..73bf40993bd 100644 --- a/libio/ChangeLog +++ b/libio/ChangeLog @@ -1,3 +1,24 @@ +1998-02-24 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de> + + Changes for _G_IO_IO_FILE_VERSION == 0x20001: + * libioP.h (_IO_showmanyc_t, _IO_SHOWMANYC, _IO_imbue_t, + _IO_IMBUE): New definitions. + (struct _IO_jump_t): Add __showmanyc and __imbue fields. + (_IO_file_fopen): Add new fourth argument. + * filebuf.cc (filebuf::open): Pass new fourth argument to + _IO_file_fopen. + * iolibio.h (_IO_freopen): Likewise. + * streambuf.cc (streambuf::showmanyc, streambuf::imbue): New + functions. + * streambuf.h (_IO_wchar_t): Define to _G_wchar_t. + (ios::fill): Remove casts. + (struct streambuf): Add showmanyc and imbue members. + + * iostream.cc (ostream::operator<<(double n)) [__GLIBC_MINOR__ >= + 1]: Initialize new fields is_char of struct printf_info. + (ostream::operator<<(long double n)) [__GLIBC_MINOR__ >= 1]: + Likewise. + Tue Feb 24 20:57:39 1998 H.J. Lu (hjl@gnu.org) * configure.in (topsrcdir): New. diff --git a/libio/filebuf.cc b/libio/filebuf.cc index d4af4985d50..e3280bb0df1 100644 --- a/libio/filebuf.cc +++ b/libio/filebuf.cc @@ -3,3 +3,7 @@ read_write, 0); #else #endif +#if _G_IO_IO_FILE_VERSION == 0x20001 + return (filebuf*)_IO_file_fopen(this, filename, mode, 0); +#else +#endif diff --git a/libio/iolibio.h b/libio/iolibio.h index 63896780fc0..083b198b448 100644 --- a/libio/iolibio.h +++ b/libio/iolibio.h @@ -45,8 +45,13 @@ extern int _IO_obstack_printf __P ((struct obstack *, const char *, ...)); (_IO_seekoff(__fp, __offset, __whence, _IOS_INPUT|_IOS_OUTPUT) == _IO_pos_BAD ? EOF : 0) #define _IO_rewind(FILE) (void)_IO_seekoff(FILE, 0, 0, _IOS_INPUT|_IOS_OUTPUT) #define _IO_vprintf(FORMAT, ARGS) _IO_vfprintf(_IO_stdout, FORMAT, ARGS) +#if _G_IO_IO_FILE_VERSION == 0x20001 +#define _IO_freopen(FILENAME, MODE, FP) \ + (_IO_file_close_it(FP), _IO_file_fopen(FP, FILENAME, MODE, 0)) +#else #define _IO_freopen(FILENAME, MODE, FP) \ (_IO_file_close_it(FP), _IO_file_fopen(FP, FILENAME, MODE)) +#endif #define _IO_fileno(FP) ((FP)->_fileno) extern _IO_FILE* _IO_popen __P((const char*, const char*)); #define _IO_pclose _IO_fclose diff --git a/libio/iostream.cc b/libio/iostream.cc index 96ebd6ee57a..921a00c21a9 100644 --- a/libio/iostream.cc +++ b/libio/iostream.cc @@ -634,6 +634,9 @@ ostream& ostream::operator<<(double n) group: 0, #if defined __GLIBC__ && __GLIBC__ >= 2 extra: 0, +#if __GLIBC_MINOR__ >= 1 + is_char: 0, +#endif #endif pad: fill() }; @@ -737,6 +740,9 @@ ostream& ostream::operator<<(long double n) group: 0, #if defined __GLIBC__ && __GLIBC__ >= 2 extra: 0, +#if __GLIBC_MINOR__ >= 1 + is_char: 0, +#endif #endif pad: fill() }; diff --git a/libio/libioP.h b/libio/libioP.h index 3a138f0c077..8f39e0ef67c 100644 --- a/libio/libioP.h +++ b/libio/libioP.h @@ -226,6 +226,19 @@ typedef int (*_IO_close_t) __P ((_IO_FILE *)); /* finalize */ typedef int (*_IO_stat_t) __P ((_IO_FILE *, void *)); #define _IO_SYSSTAT(FP, BUF) JUMP1 (__stat, FP, BUF) +#if _G_IO_IO_FILE_VERSION == 0x20001 +/* The 'showmany' hook can be used to get an image how much input is + available. In many cases the answer will be 0 which means unknown + but some cases one can provide real information. */ +typedef int (*_IO_showmanyc_t) __P ((_IO_FILE *)); +#define _IO_SHOWMANYC(FP) JUMP0 (__showmanyc, FP) + +/* The 'imbue' hook is used to get information about the currently + installed locales. */ +typedef void (*_IO_imbue_t) __P ((_IO_FILE *, void *)); +#define _IO_IMBUE(FP, LOCALE) JUMP1 (__imbue, FP, LOCALE) +#endif + #define _IO_CHAR_TYPE char /* unsigned char ? */ #define _IO_INT_TYPE int @@ -254,6 +267,10 @@ struct _IO_jump_t JUMP_FIELD(_IO_seek_t, __seek); JUMP_FIELD(_IO_close_t, __close); JUMP_FIELD(_IO_stat_t, __stat); +#if _G_IO_IO_FILE_VERSION == 0x20001 + JUMP_FIELD(_IO_showmanyc_t, __showmanyc); + JUMP_FIELD(_IO_imbue_t, __imbue); +#endif #if 0 get_column; set_column; @@ -381,7 +398,12 @@ extern void _IO_file_init __P ((_IO_FILE *)); extern _IO_FILE* _IO_file_attach __P ((_IO_FILE *, int)); extern _IO_FILE* _IO_file_open __P ((_IO_FILE *, const char *, int, int, int, int)); +#if _G_IO_IO_FILE_VERSION == 0x20001 +extern _IO_FILE* _IO_file_fopen __P ((_IO_FILE *, const char *, const char *, + int)); +#else extern _IO_FILE* _IO_file_fopen __P ((_IO_FILE *, const char *, const char *)); +#endif extern _IO_ssize_t _IO_file_write __P ((_IO_FILE *, const void *, _IO_ssize_t)); extern _IO_ssize_t _IO_file_read __P ((_IO_FILE *, void *, _IO_ssize_t)); diff --git a/libio/streambuf.cc b/libio/streambuf.cc index 4393cf08cfd..6be926b2372 100644 --- a/libio/streambuf.cc +++ b/libio/streambuf.cc @@ -301,6 +301,17 @@ streampos streambuf::sys_seek(streamoff, _seek_dir) int streambuf::sys_close() { return 0; /* Suceess; do nothing */ } +#if _G_IO_IO_FILE_VERSION == 0x20001 +int streambuf::showmanyc() +{ + return -1; +} + +void streambuf::imbue(void *) +{ +} +#endif + streammarker::streammarker(streambuf *sb) { _IO_init_marker(this, sb); diff --git a/libio/streambuf.h b/libio/streambuf.h index 9ef47243be6..bc734bc75b0 100644 --- a/libio/streambuf.h +++ b/libio/streambuf.h @@ -55,8 +55,12 @@ extern "C" { #endif #ifndef _IO_wchar_t +#if _G_IO_IO_FILE_VERSION == 0x20001 +#define _IO_wchar_t _G_wchar_t +#else #define _IO_wchar_t short #endif +#endif extern "C++" { class istream; /* Work-around for a g++ name mangling bug. Fixed in 2.6. */ @@ -176,9 +180,9 @@ class ios : public _ios_fields { ostream* tie(ostream* val) { ostream* save=_tie; _tie=val; return save; } // Methods to change the format state. - _IO_wchar_t fill() const { return (_IO_wchar_t)_fill; } + _IO_wchar_t fill() const { return _fill; } _IO_wchar_t fill(_IO_wchar_t newf) - {_IO_wchar_t oldf = (_IO_wchar_t)_fill; _fill = (char)newf; return oldf;} + {_IO_wchar_t oldf = _fill; _fill = newf; return oldf;} fmtflags flags() const { return _flags; } fmtflags flags(fmtflags new_val) { fmtflags old_val = _flags; _flags = new_val; return old_val; } @@ -409,6 +413,10 @@ struct streambuf : public _IO_FILE { // protected?? virtual streampos sys_seek(streamoff, _seek_dir); virtual int sys_close(); virtual int sys_stat(void*); // Actually, a (struct stat*) +#if _G_IO_IO_FILE_VERSION == 0x20001 + virtual int showmanyc(); + virtual void imbue(void *); +#endif }; // A backupbuf is a streambuf with full backup and savepoints on reading. |