30#include "fdiostream.h"
43fdoutbuf::fdoutbuf(
int _fd,
bool _close) : fd(_fd), close(_close) { setp(buffer, buffer + (bufferSize - 1)); }
54int fdoutbuf::flushBuffer() {
55 int num = pptr() - pbase();
56 if (write(1, buffer, num) != num) {
70 if (flushBuffer() == EOF) {
80 if (flushBuffer() == EOF) {
88std::streamsize
fdoutbuf::xsputn(
const char *s, std::streamsize num) {
return write(fd, s, num); }
148 setg(buffer + putBack,
161 if (gptr() < egptr()) {
162 DBG(std::cerr <<
"underflow, no read" << std::endl);
168 int numPutBack = gptr() - eback();
169 if (numPutBack > putBack)
170 numPutBack = putBack;
177 memcpy(buffer + (putBack - numPutBack), gptr() - numPutBack, numPutBack);
180 int num = read(fd, buffer + putBack, bufferSize - putBack);
181 DBG(std::cerr <<
"underflow, read returns: " << num << std::endl);
187 setg(buffer + (putBack - numPutBack),
189 buffer + putBack + num);
194 DBG(std::cerr <<
"returning :" << c << std::endl);
208 setg(buffer + putBack,
221 if (gptr() < egptr()) {
222 DBG(std::cerr <<
"underflow, no read" << std::endl);
228 int numPutBack = gptr() - eback();
229 if (numPutBack > putBack)
230 numPutBack = putBack;
234 memcpy(buffer + (putBack - numPutBack), gptr() - numPutBack, numPutBack);
237 int num = fread(buffer + putBack, 1, bufferSize - putBack, fp);
238 DBG(std::cerr <<
"underflow, read returns: " << num << std::endl);
244 setg(buffer + (putBack - numPutBack),
246 buffer + putBack + num);
fdinbuf(int _fd, bool close)
virtual int overflow(int c)
virtual std::streamsize xsputn(const char *s, std::streamsize num)
fdoutbuf(int _fd, bool _close)
fpinbuf(FILE *_fp, bool _close)
top level DAP object to house generic methods