33 #include <sys/types.h> 41 using std::ostringstream ;
46 #include "PPTStreamBuf.h" 49 const char* eod_marker =
"0000000d";
50 const size_t eod_marker_len = 8 ;
52 PPTStreamBuf::PPTStreamBuf(
int fd,
unsigned bufsize )
53 : d_bufsize( bufsize ),
60 PPTStreamBuf::~PPTStreamBuf()
70 PPTStreamBuf::open(
int fd,
unsigned bufsize )
73 d_bufsize = bufsize == 0 ? 1 : bufsize ;
75 d_buffer =
new char[d_bufsize] ;
76 setp( d_buffer, d_buffer + d_bufsize ) ;
83 if( pptr() > pbase() )
86 strm << hex << setw( 7 ) << setfill(
'0' ) << (
unsigned int)(pptr() - pbase()) <<
"d" ;
87 string tmp_str = strm.str() ;
88 write( d_fd, tmp_str.c_str(), tmp_str.length() ) ;
89 count += write( d_fd, d_buffer, pptr() - pbase() ) ;
90 setp( d_buffer, d_buffer + d_bufsize ) ;
102 PPTStreamBuf::overflow(
int c )
107 *pptr() =
static_cast<char>(c) ;
114 PPTStreamBuf::finish()
127 strm << hex << setw( 7 ) << setfill(
'0' ) << (
unsigned int)0 <<
"d" ;
128 string tmp_str = strm.str() ;
131 BESDEBUG(
"ppt",
"PPTStreamBuf::finish - writing " << eod_marker << endl ) ;
133 write( d_fd, eod_marker, eod_marker_len ) ;