FC Updates from BitShares and myself #21

Closed
nathanielhourt wants to merge 687 commits from dapp-support into latest-fc
2 changed files with 18 additions and 8 deletions
Showing only changes of commit f4dec89dc3 - Show all commits

View file

@ -65,11 +65,21 @@ namespace fc {
const boost::filesystem::path& bfp = file; const boost::filesystem::path& bfp = file;
my->ifs.open( bfp, std::ios::binary ); my->ifs.open( bfp, std::ios::binary );
} }
size_t ifstream::readsome( char* buf, size_t len ) { size_t ifstream::readsome( char* buf, size_t len ) {
auto s = size_t(my->ifs.readsome( buf, len )); auto s = size_t(my->ifs.readsome( buf, len ));
if( s <= 0 ) { if( s <= 0 ) {
read( buf, 1 ); try
s = 1; {
read( buf, len );
s = len;
}
catch (const fc::eof_exception& eof)
{
s = my->ifs.gcount();
if (s == 0)
throw eof;
}
} }
return s; return s;
} }

View file

@ -112,11 +112,11 @@ BOOST_AUTO_TEST_CASE(fstream_test)
BOOST_CHECK_THROW( in2.readsome( buf, 3, 0 ), fc::eof_exception ); 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 ); 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( "Hello world", std::string( (&(*buf)), 11 ) );
BOOST_CHECK_EQUAL( 0u, test.readsome( (&(*buf)), 11 ) ); BOOST_CHECK(!test.read( (&(*buf)), 11 ));
test.close(); test.close();
} }
@ -166,11 +166,11 @@ BOOST_AUTO_TEST_CASE(buffered_fstream_test)
BOOST_CHECK_THROW( bin2.readsome( buf, 3, 0 ), fc::eof_exception ); 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 ); 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( "Hello world", std::string( (&(*buf)), 11 ) );
BOOST_CHECK_EQUAL( 0u, test.readsome( (&(*buf)), 11 ) ); BOOST_CHECK(!test.read( (&(*buf)), 11 ));
test.close(); test.close();
} }
} }