|
|
1.1 ! root 1: /* ! 2: Copyright (C) 1993 Free Software Foundation ! 3: ! 4: This file is part of the GNU IO Library. This library is free ! 5: software; you can redistribute it and/or modify it under the ! 6: terms of the GNU General Public License as published by the ! 7: Free Software Foundation; either version 2, or (at your option) ! 8: any later version. ! 9: ! 10: This library is distributed in the hope that it will be useful, ! 11: but WITHOUT ANY WARRANTY; without even the implied warranty of ! 12: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! 13: GNU General Public License for more details. ! 14: ! 15: You should have received a copy of the GNU General Public License ! 16: along with GNU CC; see the file COPYING. If not, write to ! 17: the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. ! 18: ! 19: As a special exception, if you link this library with files ! 20: compiled with a GNU compiler to produce an executable, this does not cause ! 21: the resulting executable to be covered by the GNU General Public License. ! 22: This exception does not however invalidate any other reasons why ! 23: the executable file might be covered by the GNU General Public License. */ ! 24: ! 25: #ifdef __GNUC__ ! 26: #pragma implementation ! 27: #endif ! 28: ! 29: #include "builtinbuf.h" ! 30: #include "iostreamP.h" ! 31: ! 32: int builtinbuf::overflow(int ch) { return (*_jumps->__overflow)(this, ch); } ! 33: ! 34: int builtinbuf::underflow() { return (*_jumps->__underflow)(this); } ! 35: ! 36: streamsize builtinbuf::xsgetn(char* buf, streamsize n) ! 37: { return (*_jumps->__xsgetn)(this, buf, n); } ! 38: ! 39: streamsize builtinbuf::xsputn(const char* buf, streamsize n) ! 40: { return _jumps->__xsputn (this, buf, n); } ! 41: ! 42: int builtinbuf::doallocate() { return _jumps->__doallocate(this); } ! 43: ! 44: builtinbuf::~builtinbuf() { _jumps->__finish(this); } ! 45: ! 46: int builtinbuf::sync() { return _jumps->__sync(this); } ! 47: ! 48: streambuf* builtinbuf::setbuf(char *buf, int n) ! 49: { return _jumps->__setbuf (this, buf, n) == 0 ? this : NULL; } ! 50: ! 51: streampos builtinbuf::seekoff(streamoff off, _seek_dir dir, int mode) ! 52: { ! 53: return _jumps->__seekoff (this, off, convert_to_seekflags(dir, mode)); ! 54: } ! 55: ! 56: streampos builtinbuf::seekpos(streampos pos, int mode) ! 57: { ! 58: int flags = 0; ! 59: if (!(mode & ios::in)) ! 60: flags |= _IO_seek_not_in; ! 61: if (!(mode & ios::out)) ! 62: flags |= _IO_seek_not_out; ! 63: return _jumps->__seekpos(this, pos, (_IO_seekflags)flags); ! 64: } ! 65: ! 66: int builtinbuf::pbackfail(int c) ! 67: { return _jumps->__pbackfail(this, c); } ! 68: ! 69: streamsize builtinbuf::sys_read(char* buf, streamsize size) ! 70: { return _jumps->__read(this, buf, size); } ! 71: ! 72: streampos builtinbuf::sys_seek(streamoff off, _seek_dir dir) ! 73: { return _jumps->__seek(this, off, dir); } ! 74: ! 75: streamsize builtinbuf::sys_write(const char* buf, streamsize size) ! 76: { return _jumps->__write(this, buf, size); } ! 77: ! 78: int builtinbuf::sys_stat(void* buf) // Actually, a (struct stat*) ! 79: { return _jumps->__stat(this, buf); } ! 80: ! 81: int builtinbuf::sys_close() ! 82: { return _jumps->__close(this); } ! 83: ! 84: const void *builtinbuf::vtable = NULL; ! 85: ! 86: void ios::_IO_fix_vtable() const ! 87: { ! 88: if (builtinbuf::vtable == NULL) ! 89: { ! 90: char _dummy[sizeof(builtinbuf)]; ! 91: ((builtinbuf*)_dummy)->builtinbuf::builtinbuf(); ! 92: builtinbuf::vtable = ((builtinbuf*)_dummy)->_vtable(); ! 93: } ! 94: /* Cast away constness. Maybe we should use the new 'mutable' keyword. */ ! 95: ((ios*)this)->_strbuf->_vtable() = builtinbuf::vtable; ! 96: } ! 97: ! 98: /* This method is TEMPORARY, for binary compatibility! */ ! 99: void ios::_IO_fix_vtable() ! 100: { ! 101: ((const ios*) this)->_IO_fix_vtable(); ! 102: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.