[PATCH v2 08/13] Remove input buffer global variables

Ryan Long ryan.long at oarcorp.com
Mon Aug 2 20:44:24 UTC 2021


- Removed input buffers from app_common and added them as a local variable
  to functions where inputBuffer was being used
  - Added #define for MAX_LINE_LENGTH in files where it is used
- Changed Explanations::load to use a string instead of a C-string
---
 tester/covoar/Explanations.cc       | 20 +++++++++-----------
 tester/covoar/ObjdumpProcessor.cc   |  3 +++
 tester/covoar/TraceReaderLogQEMU.cc |  3 +++
 tester/covoar/app_common.cc         |  2 --
 tester/covoar/app_common.h          |  4 ----
 tester/covoar/covoar.cc             |  3 +++
 6 files changed, 18 insertions(+), 17 deletions(-)

diff --git a/tester/covoar/Explanations.cc b/tester/covoar/Explanations.cc
index 681ffd6..0371666 100644
--- a/tester/covoar/Explanations.cc
+++ b/tester/covoar/Explanations.cc
@@ -31,7 +31,6 @@ namespace Coverage {
     const char* const explanations
   )
   {
-    #define MAX_LINE_LENGTH 512
     std::ifstream  explain;
     Explanation    e;
     int            line = 1;
@@ -46,44 +45,44 @@ namespace Coverage {
       throw rld::error( what, "Explanations::load" );
     }
 
+    std::string input_line;
     while ( 1 ) {
       // Read the starting line of this explanation and
       // skip blank lines between
       do {
-        inputBuffer[0] = '\0';
-        explain.getline( inputBuffer, MAX_LINE_LENGTH );
+        std::getline( explain, input_line );
         if (explain.fail()) {
           return;
         }
         line++;
-      } while ( inputBuffer[0] == '\0' );
+      } while ( input_line.empty() );
 
       // Have we already seen this one?
-      if (set.find( inputBuffer ) != set.end()) {
+      if (set.find( input_line ) != set.end()) {
         std::ostringstream what;
         what << "line " << line
              << "contains a duplicate explanation ("
-             << inputBuffer << ")";
+             << input_line << ")";
         throw rld::error( what, "Explanations::load" );
       }
 
       // Add the starting line and file
-      e.startingPoint = std::string(inputBuffer);
+      e.startingPoint = input_line;
       e.found = false;
 
       // Get the classification
-      explain.getline( inputBuffer, MAX_LINE_LENGTH );
+      std::getline( explain, input_line );
       if (explain.fail()) {
         std::ostringstream what;
         what << "line " << line
              << "out of sync at the classification";
         throw rld::error( what, "Explanations::load" );
       }
-      e.classification = inputBuffer;
+      e.classification = input_line;
       line++;
 
       // Get the explanation
-      for (std::string input_line; std::getline( explain, input_line ); ) {
+      while ( std::getline( explain, input_line ) ) {
         line++;
 
         const std::string delimiter = "+++";
@@ -105,7 +104,6 @@ namespace Coverage {
       set[ e.startingPoint ] = e;
     }
 
-    #undef MAX_LINE_LENGTH
   }
 
   const Explanation *Explanations::lookupExplanation(
diff --git a/tester/covoar/ObjdumpProcessor.cc b/tester/covoar/ObjdumpProcessor.cc
index 2bf1685..d324440 100644
--- a/tester/covoar/ObjdumpProcessor.cc
+++ b/tester/covoar/ObjdumpProcessor.cc
@@ -24,6 +24,8 @@
 #include "rld.h"
 #include "rld-process.h"
 
+#define MAX_LINE_LENGTH 512
+
 namespace Coverage {
 
   void finalizeSymbol(
@@ -136,6 +138,7 @@ namespace Coverage {
     FILE*        loadAddressFile = NULL;
     char*        cStatus;
     uint32_t     offset;
+    char         inputBuffer[MAX_LINE_LENGTH];
 
     // This method should only be call for a dynamic library.
     if (!theExecutable->hasDynamicLibrary())
diff --git a/tester/covoar/TraceReaderLogQEMU.cc b/tester/covoar/TraceReaderLogQEMU.cc
index 0a61ea5..37952a3 100644
--- a/tester/covoar/TraceReaderLogQEMU.cc
+++ b/tester/covoar/TraceReaderLogQEMU.cc
@@ -61,6 +61,8 @@
 #define OPEN fopen
 #endif
 
+#define MAX_LINE_LENGTH 512
+
 namespace Trace {
 
   TraceReaderLogQEMU::TraceReaderLogQEMU()
@@ -85,6 +87,7 @@ namespace Trace {
     int                 status;
     FILE*               logFile;
     int                 result;
+    char                inputBuffer[MAX_LINE_LENGTH];
 
     //
     // Verify that the log file has a non-zero size.
diff --git a/tester/covoar/app_common.cc b/tester/covoar/app_common.cc
index 6f88f4b..53b5284 100644
--- a/tester/covoar/app_common.cc
+++ b/tester/covoar/app_common.cc
@@ -59,8 +59,6 @@
 Coverage::DesiredSymbols*   SymbolsToAnalyze    = NULL;
 bool                        BranchInfoAvailable = false;
 Target::TargetBase*         TargetInfo          = NULL;
-char                        inputBuffer[MAX_LINE_LENGTH];
-char                        inputBuffer2[MAX_LINE_LENGTH];
 
 
 bool FileIsNewer(
diff --git a/tester/covoar/app_common.h b/tester/covoar/app_common.h
index 473d259..4f3b798 100644
--- a/tester/covoar/app_common.h
+++ b/tester/covoar/app_common.h
@@ -16,10 +16,6 @@ extern Coverage::DesiredSymbols*    SymbolsToAnalyze;
 extern bool                         BranchInfoAvailable;
 extern Target::TargetBase*          TargetInfo;
 
-#define MAX_LINE_LENGTH             512
-extern char                         inputBuffer[MAX_LINE_LENGTH];
-extern char                         inputBuffer2[MAX_LINE_LENGTH];
-
 
 bool FileIsNewer( const char *f1, const char *f2 );
 bool FileIsReadable( const char *f1 );
diff --git a/tester/covoar/covoar.cc b/tester/covoar/covoar.cc
index 2d161aa..8ee3eb8 100644
--- a/tester/covoar/covoar.cc
+++ b/tester/covoar/covoar.cc
@@ -34,6 +34,8 @@
   #define kill(p,s) raise(s)
 #endif
 
+#define MAX_LINE_LENGTH 512
+
 typedef std::list<std::string> CoverageNames;
 typedef std::list<Coverage::ExecutableInfo*> Executables;
 typedef std::string option_error;
@@ -174,6 +176,7 @@ int covoar(
   std::string                   symbolSet;
   std::string                   option;
   int                           opt;
+  char                          inputBuffer[MAX_LINE_LENGTH];
   Coverage::Explanations        allExplanations;
   Coverage::ObjdumpProcessor    objdumpProcessor;
   bool                          verbose = false;
-- 
1.8.3.1



More information about the devel mailing list