|
|
1.1 ! root 1: /* This is part of libio/iostream, providing -*- C++ -*- input/output. ! 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: #include "libioP.h" ! 26: #include "iostream.h" ! 27: #include <string.h> ! 28: ! 29: istream& istream::get(streambuf& sb, char delim /* = '\n' */) ! 30: { ! 31: _gcount = 0; ! 32: if (ipfx1()) ! 33: { ! 34: register streambuf* isb = rdbuf(); ! 35: for (;;) ! 36: { ! 37: streamsize len = isb->_IO_read_end - isb->_IO_read_ptr; ! 38: if (len <= 0) ! 39: if (__underflow(isb) == EOF) ! 40: break; ! 41: else ! 42: len = isb->_IO_read_end - isb->_IO_read_ptr; ! 43: char *delimp = (char*)memchr((void*)isb->_IO_read_ptr, delim, len); ! 44: if (delimp != NULL) ! 45: len = delimp - isb->_IO_read_ptr; ! 46: int written = sb.sputn(isb->_IO_read_ptr, len); ! 47: isb->_IO_read_ptr += written; ! 48: _gcount += written; ! 49: if (written != len) ! 50: { ! 51: set(ios::failbit); ! 52: break; ! 53: } ! 54: if (delimp != NULL) ! 55: break; ! 56: } ! 57: } ! 58: return *this; ! 59: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.