diff options
author | Andreas Baumann <mail@andreasbaumann.cc> | 2014-10-03 20:23:24 +0200 |
---|---|---|
committer | Andreas Baumann <mail@andreasbaumann.cc> | 2014-10-03 20:23:24 +0200 |
commit | 992919c4be2336c5b8f2f0549712c51bd7fb9c03 (patch) | |
tree | 45db77d91baa8509edb8a46356d2a42aefe3faa7 /src/libcrawler/SpoolRewindInputStream.cpp | |
parent | 7af671da43dee7dd07333cab38c181106a328832 (diff) | |
download | crawler-992919c4be2336c5b8f2f0549712c51bd7fb9c03.tar.gz crawler-992919c4be2336c5b8f2f0549712c51bd7fb9c03.tar.bz2 |
fixed setting data from source in fetcher modules
Diffstat (limited to 'src/libcrawler/SpoolRewindInputStream.cpp')
-rw-r--r-- | src/libcrawler/SpoolRewindInputStream.cpp | 22 |
1 files changed, 13 insertions, 9 deletions
diff --git a/src/libcrawler/SpoolRewindInputStream.cpp b/src/libcrawler/SpoolRewindInputStream.cpp index 13ab105..472a539 100644 --- a/src/libcrawler/SpoolRewindInputStream.cpp +++ b/src/libcrawler/SpoolRewindInputStream.cpp @@ -37,27 +37,31 @@ spool_streambuf::~spool_streambuf( ) streambuf::int_type spool_streambuf::spoolSourceData( char *data, size_t n ) { size_t data_len = m_buf.size( ) - ( m_start - m_base ) ; + + // more space than data, no problem if( n < data_len ) { data_len = n; } + // enough space in the stream read buffer, put it there m_base = &m_buf.front( ); m_start = m_base; + setg( m_base, m_start, m_start + data_len ); + + n -= data_len; - memcpy( m_start, data, data_len ); - - spoolData( data_len ); + spoolData( data, n ); - return data_len; + return data_len + n; } -void spool_streambuf::spoolData( size_t n ) +void spool_streambuf::spoolData( char *data, size_t n ) { switch( m_state ) { case TO_SPOOL_MEMORY: // as long we can "spool" to memory, do so.. if( m_spoolBufPos + n <= m_spoolBufSize ) { - m_spoolBuf.insert( m_spoolBuf.begin( ) + m_spoolBufPos, m_start, m_start + n ); + m_spoolBuf.insert( m_spoolBuf.begin( ) + m_spoolBufPos, data, data + n ); m_spoolBufPos += n; } else { // ..otherwise start spooling to disk, write @@ -68,7 +72,7 @@ void spool_streambuf::spoolData( size_t n ) m_spoolFile.write( &m_spoolBuf.front( ), m_spoolBufSize ); assert( m_spoolFile.good( ) ); m_state = TO_SPOOL_FILE; - m_spoolFile.write( m_start, n ); + m_spoolFile.write( data, n ); assert( m_spoolFile.good( ) ); } break; @@ -76,7 +80,7 @@ void spool_streambuf::spoolData( size_t n ) case TO_SPOOL_FILE: // we are appending to the spool file assert( m_spoolFile.good( ) ); - m_spoolFile.write( m_start, n ); + m_spoolFile.write( data, n ); assert( m_spoolFile.good( ) ); break; @@ -117,7 +121,7 @@ streambuf::int_type spool_streambuf::underflow( ) return traits_type::eof( ); } - spoolData( n ); + spoolData( m_start, n ); break; |