From e2be0f8177da295480d5a373283dc7aacbd0694f Mon Sep 17 00:00:00 2001 From: Ryan Long Date: Fri, 9 Jul 2021 15:43:57 -0400 Subject: CoverageWriter: Convert to C++ --- tester/covoar/CoverageWriterBase.h | 4 +++- tester/covoar/CoverageWriterRTEMS.cc | 26 +++++++++++++---------- tester/covoar/CoverageWriterRTEMS.h | 4 +++- tester/covoar/CoverageWriterSkyeye.cc | 39 +++++++++++++++++++---------------- tester/covoar/CoverageWriterSkyeye.h | 4 +++- tester/covoar/CoverageWriterTSIM.cc | 23 ++++++++++----------- tester/covoar/CoverageWriterTSIM.h | 4 +++- 7 files changed, 59 insertions(+), 45 deletions(-) (limited to 'tester/covoar') diff --git a/tester/covoar/CoverageWriterBase.h b/tester/covoar/CoverageWriterBase.h index e43a45b..fca501a 100644 --- a/tester/covoar/CoverageWriterBase.h +++ b/tester/covoar/CoverageWriterBase.h @@ -9,6 +9,8 @@ #include +#include + #include "CoverageMapBase.h" namespace Coverage { @@ -46,7 +48,7 @@ namespace Coverage { * @return Returns TRUE if the method succeeded and FALSE if it failed. */ virtual void writeFile( - const char* const file, + const std::string& file, CoverageMapBase* coverage, uint32_t lowAddress, uint32_t highAddress diff --git a/tester/covoar/CoverageWriterRTEMS.cc b/tester/covoar/CoverageWriterRTEMS.cc index 48e8fd1..fc8a241 100644 --- a/tester/covoar/CoverageWriterRTEMS.cc +++ b/tester/covoar/CoverageWriterRTEMS.cc @@ -10,6 +10,7 @@ #include #include +#include #include #include @@ -28,23 +29,23 @@ namespace Coverage { } void CoverageWriterRTEMS::writeFile( - const char* const file, + const std::string& file, CoverageMapBase* coverage, uint32_t lowAddress, uint32_t highAddress ) { - FILE* coverageFile; + std::ofstream coverageFile; uint32_t a; - int status; uint8_t cover; rtems_coverage_map_header_t header; + std::ofstream::pos_type bytes_before; /* * read the file and update the coverage map passed in */ - coverageFile = ::fopen( file, "w" ); - if ( !coverageFile ) { + coverageFile.open( file ); + if ( !coverageFile.is_open() ) { std::ostringstream what; what << "Unable to open " << file; throw rld::error( what, "CoverageWriterRTEMS::writeFile" ); @@ -58,9 +59,10 @@ namespace Coverage { header.end = highAddress; strcpy( header.desc, "RTEMS Coverage Data" ); - status = ::fwrite(&header, 1, sizeof(header), coverageFile); - if (status != sizeof(header)) { - ::fclose( coverageFile ); + bytes_before = coverageFile.tellp(); + + coverageFile.write( (char *) &header, sizeof( header ) ); + if ( coverageFile.tellp() - bytes_before != sizeof( header ) ) { std::ostringstream what; what << "Unable to write header to " << file; throw rld::error( what, "CoverageWriterRTEMS::writeFile" ); @@ -68,8 +70,11 @@ namespace Coverage { for ( a=lowAddress ; a < highAddress ; a++ ) { cover = ((coverage->wasExecuted( a )) ? 0x01 : 0); - status = fwrite(&cover, 1, sizeof(cover), coverageFile); - if (status != sizeof(cover)) { + + bytes_before = coverageFile.tellp(); + + coverageFile.write( (char *) &cover, sizeof( cover ) ); + if ( coverageFile.tellp() - bytes_before != sizeof( cover ) ) { std::cerr << "CoverageWriterRTEMS::writeFile - write to " << file << " at address 0x%" @@ -81,6 +86,5 @@ namespace Coverage { } } - ::fclose( coverageFile ); } } diff --git a/tester/covoar/CoverageWriterRTEMS.h b/tester/covoar/CoverageWriterRTEMS.h index b66d2fa..c760936 100644 --- a/tester/covoar/CoverageWriterRTEMS.h +++ b/tester/covoar/CoverageWriterRTEMS.h @@ -7,6 +7,8 @@ #ifndef __COVERAGE_WRITER_RTEMS_H__ #define __COVERAGE_WRITER_RTEMS_H__ +#include + #include "CoverageMapBase.h" #include "CoverageWriterBase.h" @@ -33,7 +35,7 @@ namespace Coverage { /* Inherit documentation from base class. */ void writeFile( - const char* const file, + const std::string& file, CoverageMapBase* coverage, uint32_t lowAddress, uint32_t highAddress diff --git a/tester/covoar/CoverageWriterSkyeye.cc b/tester/covoar/CoverageWriterSkyeye.cc index 7f78644..fcc7052 100644 --- a/tester/covoar/CoverageWriterSkyeye.cc +++ b/tester/covoar/CoverageWriterSkyeye.cc @@ -12,6 +12,7 @@ #include #include +#include #include #include @@ -30,23 +31,23 @@ namespace Coverage { } void CoverageWriterSkyeye::writeFile( - const char* const file, - CoverageMapBase* coverage, - uint32_t lowAddress, - uint32_t highAddress + const std::string& file, + CoverageMapBase* coverage, + uint32_t lowAddress, + uint32_t highAddress ) { - uint32_t a; - uint8_t cover; - FILE* coverageFile; - prof_header_t header; - int status; + uint32_t a; + uint8_t cover; + std::ofstream coverageFile; + prof_header_t header; + std::ofstream::pos_type bytes_before; /* * read the file and update the coverage map passed in */ - coverageFile = ::fopen( file, "w" ); - if ( !coverageFile ) { + coverageFile.open( file ); + if ( !coverageFile.is_open() ) { std::ostringstream what; what << "Unable to open " << file; throw rld::error( what, "CoverageWriterSkyeye::writeFile" ); @@ -60,9 +61,10 @@ namespace Coverage { header.prof_end = highAddress; strcpy( header.desc, "Skyeye Coverage Data" ); - status = ::fwrite(&header, 1, sizeof(header), coverageFile); - if (status != sizeof(header)) { - ::fclose( coverageFile ); + bytes_before = coverageFile.tellp(); + + coverageFile.write( (char *) &header, sizeof( header ) ); + if ( coverageFile.tellp() - bytes_before != sizeof( header ) ) { std::ostringstream what; what << "Unable to write header to " << file; throw rld::error( what, "CoverageWriterSkyeye::writeFile" ); @@ -71,9 +73,11 @@ namespace Coverage { for ( a = lowAddress; a < highAddress; a += 8 ) { cover = ((coverage->wasExecuted( a )) ? 0x01 : 0); cover |= ((coverage->wasExecuted( a + 4 )) ? 0x10 : 0); - status = fwrite(&cover, 1, sizeof(cover), coverageFile); - if (status != sizeof(cover)) { - ::fclose( coverageFile ); + + bytes_before = coverageFile.tellp(); + + coverageFile.write( (char *) &cover, sizeof( cover ) ); + if ( coverageFile.tellp() - bytes_before != sizeof( cover ) ) { std::ostringstream what; what << "write to " << file << " at address 0x" @@ -85,6 +89,5 @@ namespace Coverage { } } - ::fclose( coverageFile ); } } diff --git a/tester/covoar/CoverageWriterSkyeye.h b/tester/covoar/CoverageWriterSkyeye.h index 8a74f55..8f11959 100644 --- a/tester/covoar/CoverageWriterSkyeye.h +++ b/tester/covoar/CoverageWriterSkyeye.h @@ -7,6 +7,8 @@ #ifndef __COVERAGE_WRITER_Skyeye_H__ #define __COVERAGE_WRITER_Skyeye_H__ +#include + #include "CoverageMapBase.h" #include "CoverageWriterBase.h" @@ -33,7 +35,7 @@ namespace Coverage { /* Inherit documentation from base class. */ void writeFile( - const char* const file, + const std::string& file, CoverageMapBase* coverage, uint32_t lowAddress, uint32_t highAddress diff --git a/tester/covoar/CoverageWriterTSIM.cc b/tester/covoar/CoverageWriterTSIM.cc index 62a1f7d..9ec12e4 100644 --- a/tester/covoar/CoverageWriterTSIM.cc +++ b/tester/covoar/CoverageWriterTSIM.cc @@ -9,6 +9,7 @@ #include #include +#include #include #include @@ -27,7 +28,7 @@ namespace Coverage { void CoverageWriterTSIM::writeFile( - const char* const file, + const std::string& file, CoverageMapBase* coverage, uint32_t lowAddress, uint32_t highAddress @@ -35,30 +36,29 @@ namespace Coverage { { uint32_t a; int cover; - FILE* coverageFile; + std::ofstream coverageFile; int i; - int status; /* * read the file and update the coverage map passed in */ - coverageFile = ::fopen( file, "w" ); - if ( !coverageFile ) { + coverageFile.open( file ); + if ( !coverageFile.is_open() ) { std::ostringstream what; what << "Unable to open " << file; throw rld::error( what, "CoverageWriterTSIM::writeFile" ); } for ( a = lowAddress; a < highAddress; a += 0x80 ) { - status = fprintf( coverageFile, "%x : ", a ); - if ( status == EOF || status == 0 ) { + coverageFile << std::hex << a << " : " << std::dec; + if ( coverageFile.fail() ) { break; } for ( i = 0; i < 0x80; i += 4 ) { cover = ((coverage->wasExecuted( a + i )) ? 1 : 0); - status = ::fprintf( coverageFile, "%d ", cover ); - if ( status == EOF || status == 0 ) { - ::fclose( coverageFile ); + coverageFile << cover << " "; + + if ( coverageFile.fail() ) { std::ostringstream what; what << "write to " << file << " at address 0x" @@ -69,9 +69,8 @@ namespace Coverage { throw rld::error( what, "CoverageWriterTSIM::writeFile" ); } } - ::fprintf( coverageFile, "\n" ); + coverageFile << std::endl; } - ::fclose( coverageFile ); } } diff --git a/tester/covoar/CoverageWriterTSIM.h b/tester/covoar/CoverageWriterTSIM.h index b43e1c6..5ae57f8 100644 --- a/tester/covoar/CoverageWriterTSIM.h +++ b/tester/covoar/CoverageWriterTSIM.h @@ -7,6 +7,8 @@ #ifndef __COVERAGE_WRITER_TSIM_H__ #define __COVERAGE_WRITER_TSIM_H__ +#include + #include "CoverageMapBase.h" #include "CoverageWriterBase.h" @@ -33,7 +35,7 @@ namespace Coverage { /* Inherit documentation from base class. */ void writeFile( - const char* const file, + const std::string& file, CoverageMapBase* coverage, uint32_t lowAddress, uint32_t highAddress -- cgit v1.2.3