diff --git a/src/io/fstream.cpp b/src/io/fstream.cpp index 042791d..5ebf790 100644 --- a/src/io/fstream.cpp +++ b/src/io/fstream.cpp @@ -65,11 +65,17 @@ namespace fc { const boost::filesystem::path& bfp = file; my->ifs.open( bfp, std::ios::binary ); } + size_t ifstream::readsome( char* buf, size_t len ) { auto s = size_t(my->ifs.readsome( buf, len )); - if( s <= 0 ) { + if( s <= 0 ) + { read( buf, 1 ); s = 1; + if (len > 1) + { + s += size_t(my->ifs.readsome( &buf[1], len - 1)); + } } return s; } diff --git a/tests/io/stream_tests.cpp b/tests/io/stream_tests.cpp index c6779bb..e3f3dc8 100644 --- a/tests/io/stream_tests.cpp +++ b/tests/io/stream_tests.cpp @@ -112,11 +112,11 @@ BOOST_AUTO_TEST_CASE(fstream_test) BOOST_CHECK_THROW( in2.readsome( buf, 3, 0 ), fc::eof_exception ); { - out.flush(); + out.close(); std::fstream test( outf.path().to_native_ansi_path(), std::fstream::in ); - BOOST_CHECK_EQUAL( 11u, test.readsome( (&(*buf)), 11 ) ); + test.read( (&(*buf)), 11 ); BOOST_CHECK_EQUAL( "Hello world", std::string( (&(*buf)), 11 ) ); - BOOST_CHECK_EQUAL( 0u, test.readsome( (&(*buf)), 11 ) ); + BOOST_CHECK(!test.read( (&(*buf)), 11 )); test.close(); } @@ -166,11 +166,11 @@ BOOST_AUTO_TEST_CASE(buffered_fstream_test) BOOST_CHECK_THROW( bin2.readsome( buf, 3, 0 ), fc::eof_exception ); { - bout.flush(); + bout.close(); std::fstream test( outf.path().to_native_ansi_path(), std::fstream::in ); - BOOST_CHECK_EQUAL( 11u, test.readsome( (&(*buf)), 11 ) ); + test.read( (&(*buf)), 11 ); BOOST_CHECK_EQUAL( "Hello world", std::string( (&(*buf)), 11 ) ); - BOOST_CHECK_EQUAL( 0u, test.readsome( (&(*buf)), 11 ) ); + BOOST_CHECK(!test.read( (&(*buf)), 11 )); test.close(); } }