summaryrefslogtreecommitdiff
path: root/src/libcrawler/SpoolRewindInputStream.cpp
diff options
context:
space:
mode:
authorAndreas Baumann <mail@andreasbaumann.cc>2014-10-03 20:23:24 +0200
committerAndreas Baumann <mail@andreasbaumann.cc>2014-10-03 20:23:24 +0200
commit992919c4be2336c5b8f2f0549712c51bd7fb9c03 (patch)
tree45db77d91baa8509edb8a46356d2a42aefe3faa7 /src/libcrawler/SpoolRewindInputStream.cpp
parent7af671da43dee7dd07333cab38c181106a328832 (diff)
downloadcrawler-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.cpp22
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;