diff --git a/elfio/elfio.hpp b/elfio/elfio.hpp index a4052bd0620be6b20c55b55c44cf510de1ae04a5..8b9aed10f9c8d07c64ddf9bf580fc0057ba3ee3d 100644 --- a/elfio/elfio.hpp +++ b/elfio/elfio.hpp @@ -148,9 +148,19 @@ class elfio //------------------------------------------------------------------------------ bool save( const std::string& file_name ) { - std::ofstream f( file_name.c_str(), std::ios::out | std::ios::binary ); + std::ofstream stream; + stream.open( file_name.c_str(), std::ios::out | std::ios::binary ); + if ( !stream ) { + return false; + } + + return save(stream); + } - if ( !f || !header) { +//------------------------------------------------------------------------------ + bool save( std::ostream &stream ) + { + if ( !stream || !header) { return false; } @@ -174,11 +184,9 @@ class elfio is_still_good = is_still_good && layout_sections_without_segments(); is_still_good = is_still_good && layout_section_table(); - is_still_good = is_still_good && save_header( f ); - is_still_good = is_still_good && save_sections( f ); - is_still_good = is_still_good && save_segments( f ); - - f.close(); + is_still_good = is_still_good && save_header( stream ); + is_still_good = is_still_good && save_sections( stream ); + is_still_good = is_still_good && save_segments( stream ); return is_still_good; } @@ -482,13 +490,13 @@ class elfio } //------------------------------------------------------------------------------ - bool save_header( std::ofstream& f ) + bool save_header( std::ostream& f ) { return header->save( f ); } //------------------------------------------------------------------------------ - bool save_sections( std::ofstream& f ) + bool save_sections( std::ostream& f ) { for ( unsigned int i = 0; i < sections_.size(); ++i ) { section *sec = sections_.at(i); @@ -503,7 +511,7 @@ class elfio } //------------------------------------------------------------------------------ - bool save_segments( std::ofstream& f ) + bool save_segments( std::ostream& f ) { for ( unsigned int i = 0; i < segments_.size(); ++i ) { segment *seg = segments_.at(i);