<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>change log for gcc-testing (2010-05-17)</title>
</head>
<body text='#000000' bgcolor='#ffffff'>
<a name='cs1'></a>
<table border='0' cellspacing='0' cellpadding='5' width='100%' bgcolor='#eeeeee'>
<tr><td colspan='3' bgcolor='#dddddd'>
 <font color='#bb2222'><strong>humph</strong></font>
</td></tr>
<tr><td colspan='3' bgcolor='#dddddd'><pre>2010-05-17 Glenn Humphrey

        * CoverageReaderBase.h, CoverageReaderQEMU.cc, CoverageReaderQEMU.h,
        CoverageReaderRTEMS.cc, CoverageReaderRTEMS.h,
        CoverageReaderSkyeye.cc, CoverageReaderSkyeye.h,
        CoverageReaderTSIM.cc, CoverageReaderTSIM.h, app_common.cc,
        app_common.h, covoar.cc: Verified that the executable files and the
        coverage files were readable before performing any analysis.
</pre></td></tr>
<tr><td width='1%'><a href="http://www.rtems.com/cgi-bin/viewcvs.cgi//gcc-testing/rtems-coverage/ChangeLog.diff?r1=text&tr1=1.257&r2=text&tr2=1.258&diff_format=h">M</a></td><td width='1%'>1.258</td><td width='100%'>rtems-coverage/ChangeLog</td></tr>
<tr><td width='1%'><a href="http://www.rtems.com/cgi-bin/viewcvs.cgi//gcc-testing/rtems-coverage/CoverageReaderBase.h.diff?r1=text&tr1=1.3&r2=text&tr2=1.4&diff_format=h">M</a></td><td width='1%'>1.4</td><td width='100%'>rtems-coverage/CoverageReaderBase.h</td></tr>
<tr><td width='1%'><a href="http://www.rtems.com/cgi-bin/viewcvs.cgi//gcc-testing/rtems-coverage/CoverageReaderQEMU.h.diff?r1=text&tr1=1.2&r2=text&tr2=1.3&diff_format=h">M</a></td><td width='1%'>1.3</td><td width='100%'>rtems-coverage/CoverageReaderQEMU.h</td></tr>
<tr><td width='1%'><a href="http://www.rtems.com/cgi-bin/viewcvs.cgi//gcc-testing/rtems-coverage/CoverageReaderQEMU.cc.diff?r1=text&tr1=1.14&r2=text&tr2=1.15&diff_format=h">M</a></td><td width='1%'>1.15</td><td width='100%'>rtems-coverage/CoverageReaderQEMU.cc</td></tr>
<tr><td width='1%'><a href="http://www.rtems.com/cgi-bin/viewcvs.cgi//gcc-testing/rtems-coverage/CoverageReaderRTEMS.h.diff?r1=text&tr1=1.2&r2=text&tr2=1.3&diff_format=h">M</a></td><td width='1%'>1.3</td><td width='100%'>rtems-coverage/CoverageReaderRTEMS.h</td></tr>
<tr><td width='1%'><a href="http://www.rtems.com/cgi-bin/viewcvs.cgi//gcc-testing/rtems-coverage/CoverageReaderRTEMS.cc.diff?r1=text&tr1=1.5&r2=text&tr2=1.6&diff_format=h">M</a></td><td width='1%'>1.6</td><td width='100%'>rtems-coverage/CoverageReaderRTEMS.cc</td></tr>
<tr><td width='1%'><a href="http://www.rtems.com/cgi-bin/viewcvs.cgi//gcc-testing/rtems-coverage/CoverageReaderSkyeye.h.diff?r1=text&tr1=1.2&r2=text&tr2=1.3&diff_format=h">M</a></td><td width='1%'>1.3</td><td width='100%'>rtems-coverage/CoverageReaderSkyeye.h</td></tr>
<tr><td width='1%'><a href="http://www.rtems.com/cgi-bin/viewcvs.cgi//gcc-testing/rtems-coverage/CoverageReaderSkyeye.cc.diff?r1=text&tr1=1.9&r2=text&tr2=1.10&diff_format=h">M</a></td><td width='1%'>1.10</td><td width='100%'>rtems-coverage/CoverageReaderSkyeye.cc</td></tr>
<tr><td width='1%'><a href="http://www.rtems.com/cgi-bin/viewcvs.cgi//gcc-testing/rtems-coverage/CoverageReaderTSIM.h.diff?r1=text&tr1=1.3&r2=text&tr2=1.4&diff_format=h">M</a></td><td width='1%'>1.4</td><td width='100%'>rtems-coverage/CoverageReaderTSIM.h</td></tr>
<tr><td width='1%'><a href="http://www.rtems.com/cgi-bin/viewcvs.cgi//gcc-testing/rtems-coverage/CoverageReaderTSIM.cc.diff?r1=text&tr1=1.7&r2=text&tr2=1.8&diff_format=h">M</a></td><td width='1%'>1.8</td><td width='100%'>rtems-coverage/CoverageReaderTSIM.cc</td></tr>
<tr><td width='1%'><a href="http://www.rtems.com/cgi-bin/viewcvs.cgi//gcc-testing/rtems-coverage/app_common.h.diff?r1=text&tr1=1.10&r2=text&tr2=1.11&diff_format=h">M</a></td><td width='1%'>1.11</td><td width='100%'>rtems-coverage/app_common.h</td></tr>
<tr><td width='1%'><a href="http://www.rtems.com/cgi-bin/viewcvs.cgi//gcc-testing/rtems-coverage/app_common.cc.diff?r1=text&tr1=1.6&r2=text&tr2=1.7&diff_format=h">M</a></td><td width='1%'>1.7</td><td width='100%'>rtems-coverage/app_common.cc</td></tr>
<tr><td width='1%'><a href="http://www.rtems.com/cgi-bin/viewcvs.cgi//gcc-testing/rtems-coverage/covoar.cc.diff?r1=text&tr1=1.25&r2=text&tr2=1.26&diff_format=h">M</a></td><td width='1%'>1.26</td><td width='100%'>rtems-coverage/covoar.cc</td></tr>
</table>
<pre>
<font color='#006600'>diff -u gcc-testing/rtems-coverage/ChangeLog:1.257 gcc-testing/rtems-coverage/ChangeLog:1.258
--- gcc-testing/rtems-coverage/ChangeLog:1.257  Mon May 17 14:35:56 2010
+++ gcc-testing/rtems-coverage/ChangeLog        Mon May 17 16:47:07 2010
</font><font color='#997700'>@@ -1,3 +1,12 @@
</font><font color='#000088'>+2010-05-17    Glenn Humphrey
+
+       * CoverageReaderBase.h, CoverageReaderQEMU.cc, CoverageReaderQEMU.h,
+       CoverageReaderRTEMS.cc, CoverageReaderRTEMS.h,
+       CoverageReaderSkyeye.cc, CoverageReaderSkyeye.h,
+       CoverageReaderTSIM.cc, CoverageReaderTSIM.h, app_common.cc,
+       app_common.h, covoar.cc: Verified that the executable files and the
+       coverage files were readable before performing any analysis.
+
</font> 2010-05-17        Jennifer Averett <Jennifer.Averett@OARcorp.com>
 
        * ReportsHtml.cc: Added summary report to index.

<font color='#006600'>diff -u gcc-testing/rtems-coverage/CoverageReaderBase.h:1.3 gcc-testing/rtems-coverage/CoverageReaderBase.h:1.4
--- gcc-testing/rtems-coverage/CoverageReaderBase.h:1.3 Fri Mar  5 10:45:37 2010
+++ gcc-testing/rtems-coverage/CoverageReaderBase.h     Mon May 17 16:47:07 2010
</font><font color='#997700'>@@ -41,10 +41,8 @@
</font>      *  @param[in] file is the coverage file to process
      *  @param[in] executableInformation is the information for an
      *             associated executable
<font color='#880000'>-     *
-     *  @return Returns TRUE if the method succeeded and FALSE if it failed.
</font>      */
<font color='#880000'>-    virtual bool processFile(
</font><font color='#000088'>+    virtual void processFile(
</font>       const char* const     file,
       ExecutableInfo* const executableInformation
     ) = 0;

<font color='#006600'>diff -u gcc-testing/rtems-coverage/CoverageReaderQEMU.h:1.2 gcc-testing/rtems-coverage/CoverageReaderQEMU.h:1.3
--- gcc-testing/rtems-coverage/CoverageReaderQEMU.h:1.2 Fri Mar  5 10:45:37 2010
+++ gcc-testing/rtems-coverage/CoverageReaderQEMU.h     Mon May 17 16:47:07 2010
</font><font color='#997700'>@@ -40,7 +40,7 @@
</font>     virtual ~CoverageReaderQEMU();
 
     /* Inherit documentation from base class. */
<font color='#880000'>-    bool processFile(
</font><font color='#000088'>+    void processFile(
</font>       const char* const     file,
       ExecutableInfo* const executableInformation
     );

<font color='#006600'>diff -u gcc-testing/rtems-coverage/CoverageReaderQEMU.cc:1.14 gcc-testing/rtems-coverage/CoverageReaderQEMU.cc:1.15
--- gcc-testing/rtems-coverage/CoverageReaderQEMU.cc:1.14       Tue May 11 15:09:19 2010
+++ gcc-testing/rtems-coverage/CoverageReaderQEMU.cc    Mon May 17 16:47:07 2010
</font><font color='#997700'>@@ -22,10 +22,8 @@
</font> 
 /* hack so this can compile on the RH7 RTEMS 4.5 host */
 #if (__GNUC__ <= 2)
<font color='#880000'>-#define STAT stat
</font> #define OPEN fopen
 #else
<font color='#880000'>-#define STAT stat64
</font> #define OPEN fopen64
 #endif
 
<font color='#997700'>@@ -40,14 +38,13 @@
</font>   {
   }
 
<font color='#880000'>-  bool CoverageReaderQEMU::processFile(
</font><font color='#000088'>+  void CoverageReaderQEMU::processFile(
</font>     const char* const     file,
     ExecutableInfo* const executableInformation
   )
   {
     struct trace_header header;
     uintptr_t           i;
<font color='#880000'>-    struct STAT         statbuf;
</font>     int                 status;
     FILE*               traceFile;
     uint8_t             taken;
<font color='#997700'>@@ -59,33 +56,27 @@
</font>     branchInfo = taken | notTaken;
 
     //
<font color='#880000'>-    // Verify that the coverage file has a non-zero size.
-    //
-    // NOTE: We prefer stat64 because some of the coverage files are HUGE!
-    status = STAT( file, &statbuf );
-    if (status == -1) {
-      fprintf( stderr, "Unable to stat %s\n", file );
-      return false;
-    }
-
-    if (statbuf.st_size == 0) {
-      fprintf( stderr, "%s is 0 bytes long\n", file );
-      return false;
-    }
-
-    //
</font>     // Open the coverage file and read the header.
     //
     traceFile = OPEN( file, "r" );
     if (!traceFile) {
<font color='#880000'>-      fprintf( stderr, "Unable to open %s\n", file );
-      return false;
</font><font color='#000088'>+      fprintf(
+        stderr,
+        "ERROR: CoverageReaderQEMU::processFile - Unable to open %s\n",
+        file
+      );
+      exit( -1 );
</font>     }
 
     status = fread( &header, sizeof(trace_header), 1, traceFile );
     if (status != 1) {
<font color='#880000'>-      fprintf( stderr, "Unable to read header from %s\n", file );
-      return false;
</font><font color='#000088'>+      fprintf(
+        stderr,
+        "ERROR: CoverageReaderQEMU::processFile - "
+        "Unable to read header from %s\n",
+        file
+      );
+      exit( -1 );
</font>     }
 
     #if 0
<font color='#997700'>@@ -163,6 +154,5 @@
</font>     }
 
     fclose( traceFile );
<font color='#880000'>-    return true;
</font>   }
 }

<font color='#006600'>diff -u gcc-testing/rtems-coverage/CoverageReaderRTEMS.h:1.2 gcc-testing/rtems-coverage/CoverageReaderRTEMS.h:1.3
--- gcc-testing/rtems-coverage/CoverageReaderRTEMS.h:1.2        Fri Mar  5 10:45:37 2010
+++ gcc-testing/rtems-coverage/CoverageReaderRTEMS.h    Mon May 17 16:47:07 2010
</font><font color='#997700'>@@ -38,7 +38,7 @@
</font>     virtual ~CoverageReaderRTEMS();
 
     /* Inherit documentation from base class. */
<font color='#880000'>-    bool processFile(
</font><font color='#000088'>+    void processFile(
</font>       const char* const     file,
       ExecutableInfo* const executableInformation
     );

<font color='#006600'>diff -u gcc-testing/rtems-coverage/CoverageReaderRTEMS.cc:1.5 gcc-testing/rtems-coverage/CoverageReaderRTEMS.cc:1.6
--- gcc-testing/rtems-coverage/CoverageReaderRTEMS.cc:1.5       Fri May  7 13:53:58 2010
+++ gcc-testing/rtems-coverage/CoverageReaderRTEMS.cc   Mon May 17 16:47:07 2010
</font><font color='#997700'>@@ -28,7 +28,7 @@
</font>   {
   }
 
<font color='#880000'>-  bool CoverageReaderRTEMS::processFile(
</font><font color='#000088'>+  void CoverageReaderRTEMS::processFile(
</font>     const char* const     file,
     ExecutableInfo* const executableInformation
   )
<font color='#997700'>@@ -40,36 +40,30 @@
</font>     rtems_coverage_map_header_t  header;
     uintptr_t                    i;
     uintptr_t                    length;
<font color='#880000'>-    struct stat                  statbuf;
</font>     int                          status;
 
     //
<font color='#880000'>-    // Verify that the coverage file has a non-zero size.
-    //
-    status = stat( file, &statbuf );
-    if (status == -1) {
-      fprintf( stderr, "Unable to stat %s\n", file );
-      return false;
-    }
-
-    if (statbuf.st_size == 0) {
-      fprintf( stderr, "%s is 0 bytes long\n", file );
-      return false;
-    }
-
-    //
</font>     // Open the coverage file and read the header.
     //
     coverageFile = fopen( file, "r" );
     if (!coverageFile) {
<font color='#880000'>-      fprintf( stderr, "Unable to open %s\n", file );
-      return false;
</font><font color='#000088'>+      fprintf(
+        stderr,
+        "ERROR: CoverageReaderRTEMS::processFile - Unable to open %s\n",
+        file
+      );
+      exit( -1 );
</font>     }
 
     status = fread( &header, sizeof(header), 1, coverageFile );
     if (status != 1) {
<font color='#880000'>-      fprintf( stderr, "Unable to read header from %s\n", file );
-      return false;
</font><font color='#000088'>+      fprintf(
+        stderr,
+        "ERROR: CoverageReaderRTEMS::processFile - "
+        "Unable to read header from %s\n",
+        file
+      );
+      exit( -1 );
</font>     }
 
     baseAddress = header.start;
<font color='#997700'>@@ -114,6 +108,5 @@
</font>     }
 
     fclose( coverageFile );
<font color='#880000'>-    return true;
</font>   }
 }

<font color='#006600'>diff -u gcc-testing/rtems-coverage/CoverageReaderSkyeye.h:1.2 gcc-testing/rtems-coverage/CoverageReaderSkyeye.h:1.3
--- gcc-testing/rtems-coverage/CoverageReaderSkyeye.h:1.2       Fri Mar  5 10:45:37 2010
+++ gcc-testing/rtems-coverage/CoverageReaderSkyeye.h   Mon May 17 16:47:07 2010
</font><font color='#997700'>@@ -38,7 +38,7 @@
</font>     virtual ~CoverageReaderSkyeye();
 
     /* Inherit documentation from base class. */
<font color='#880000'>-    bool processFile(
</font><font color='#000088'>+    void processFile(
</font>       const char* const     file,
       ExecutableInfo* const executableInformation
     );

<font color='#006600'>diff -u gcc-testing/rtems-coverage/CoverageReaderSkyeye.cc:1.9 gcc-testing/rtems-coverage/CoverageReaderSkyeye.cc:1.10
--- gcc-testing/rtems-coverage/CoverageReaderSkyeye.cc:1.9      Fri May  7 13:53:58 2010
+++ gcc-testing/rtems-coverage/CoverageReaderSkyeye.cc  Mon May 17 16:47:07 2010
</font><font color='#997700'>@@ -28,7 +28,7 @@
</font>   {
   }
 
<font color='#880000'>-  bool CoverageReaderSkyeye::processFile(
</font><font color='#000088'>+  void CoverageReaderSkyeye::processFile(
</font>     const char* const     file,
     ExecutableInfo* const executableInformation
   )
<font color='#997700'>@@ -40,36 +40,30 @@
</font>     prof_header_t    header;
     uintptr_t        i;
     uintptr_t        length;
<font color='#880000'>-    struct stat      statbuf;
</font>     int              status;
 
     //
<font color='#880000'>-    // Verify that the coverage file has a non-zero size.
-    //
-    status = stat( file, &statbuf );
-    if (status == -1) {
-      fprintf( stderr, "Unable to stat %s\n", file );
-      return false;
-    }
-
-    if (statbuf.st_size == 0) {
-      fprintf( stderr, "%s is 0 bytes long\n", file );
-      return false;
-    }
-
-    //
</font>     // Open the coverage file and read the header.
     //
     coverageFile = fopen( file, "r" );
     if (!coverageFile) {
<font color='#880000'>-      fprintf( stderr, "Unable to open %s\n", file );
-      return false;
</font><font color='#000088'>+      fprintf(
+        stderr,
+        "ERROR: CoverageReaderSkyeye::processFile - Unable to open %s\n",
+        file
+      );
+      exit( -1 );
</font>     }
 
     status = fread( &header, sizeof(header), 1, coverageFile );
     if (status != 1) {
<font color='#880000'>-      fprintf( stderr, "Unable to read header from %s\n", file );
-      return false;
</font><font color='#000088'>+      fprintf(
+        stderr,
+        "ERROR: CoverageReaderSkyeye::processFile - "
+        "Unable to read header from %s\n",
+        file
+      );
+      exit( -1 );
</font>     }
 
     baseAddress = header.prof_start;
<font color='#997700'>@@ -132,6 +126,5 @@
</font>     }
 
     fclose( coverageFile );
<font color='#880000'>-    return true;
</font>   }
 }

<font color='#006600'>diff -u gcc-testing/rtems-coverage/CoverageReaderTSIM.h:1.3 gcc-testing/rtems-coverage/CoverageReaderTSIM.h:1.4
--- gcc-testing/rtems-coverage/CoverageReaderTSIM.h:1.3 Fri Mar  5 10:45:37 2010
+++ gcc-testing/rtems-coverage/CoverageReaderTSIM.h     Mon May 17 16:47:07 2010
</font><font color='#997700'>@@ -39,7 +39,7 @@
</font>     virtual ~CoverageReaderTSIM();
 
     /* Inherit documentation from base class. */
<font color='#880000'>-    bool processFile(
</font><font color='#000088'>+    void processFile(
</font>       const char* const     file,
       ExecutableInfo* const executableInformation
     );

<font color='#006600'>diff -u gcc-testing/rtems-coverage/CoverageReaderTSIM.cc:1.7 gcc-testing/rtems-coverage/CoverageReaderTSIM.cc:1.8
--- gcc-testing/rtems-coverage/CoverageReaderTSIM.cc:1.7        Fri May  7 13:53:58 2010
+++ gcc-testing/rtems-coverage/CoverageReaderTSIM.cc    Mon May 17 16:47:07 2010
</font><font color='#997700'>@@ -27,7 +27,7 @@
</font>   {
   }
 
<font color='#880000'>-  bool CoverageReaderTSIM::processFile(
</font><font color='#000088'>+  void CoverageReaderTSIM::processFile(
</font>     const char* const     file,
     ExecutableInfo* const executableInformation
   )
<font color='#997700'>@@ -37,30 +37,19 @@
</font>     int              cover;
     FILE*            coverageFile;
     int              i;
<font color='#880000'>-    struct stat      statbuf;
</font>     int              status;
 
     //
<font color='#880000'>-    // Verify that the coverage file has a non-zero size.
-    //
-    status = stat( file, &statbuf );
-    if (status == -1) {
-      fprintf( stderr, "Unable to stat %s\n", file );
-      return false;
-    }
-
-    if (statbuf.st_size == 0) {
-      fprintf( stderr, "%s is 0 bytes long\n", file );
-      return false;
-    }
-
-    //
</font>     // Open the coverage file.
     //
     coverageFile = fopen( file, "r" );
     if (!coverageFile) {
<font color='#880000'>-      fprintf( stderr, "Unable to open %s\n", file );
-      return false;
</font><font color='#000088'>+      fprintf(
+        stderr,
+        "ERROR: CoverageReaderTSIM::processFile - Unable to open %s\n",
+        file
+      );
+      exit( -1 );
</font>     }
 
     //
<font color='#997700'>@@ -103,6 +92,5 @@
</font>     }
 
     fclose( coverageFile );
<font color='#880000'>-    return true;
</font>   }
 }

<font color='#006600'>diff -u gcc-testing/rtems-coverage/app_common.h:1.10 gcc-testing/rtems-coverage/app_common.h:1.11
--- gcc-testing/rtems-coverage/app_common.h:1.10        Tue May 11 15:18:32 2010
+++ gcc-testing/rtems-coverage/app_common.h     Mon May 17 16:47:07 2010
</font><font color='#997700'>@@ -20,6 +20,7 @@
</font> extern Target::TargetBase*          TargetInfo;
 
 bool FileIsNewer( const char *f1, const char *f2 );<span style="background-color: #FF0000"> </span>
<font color='#000088'>+bool FileIsReadable( const char *f1 );<span style="background-color: #FF0000"> </span>
</font> bool ReadUntilFound( FILE *file, const char *line );
 
 #endif

<font color='#006600'>diff -u gcc-testing/rtems-coverage/app_common.cc:1.6 gcc-testing/rtems-coverage/app_common.cc:1.7
--- gcc-testing/rtems-coverage/app_common.cc:1.6        Tue May 11 15:18:32 2010
+++ gcc-testing/rtems-coverage/app_common.cc    Mon May 17 16:47:07 2010
</font><font color='#997700'>@@ -2,17 +2,26 @@
</font>  *  $Id$
  */
 
<font color='#880000'>-#include <sys/types.h>
-#include <sys/stat.h>
-#include <unistd.h>
</font><font color='#000088'>+#include <stdio.h>
</font> #include <stdlib.h>
 #include <string.h>
<font color='#880000'>-#include <stdio.h>
</font><font color='#000088'>+#include <sys/stat.h>
+#include <sys/types.h>
+#include <unistd.h>
</font> 
 #include "app_common.h"
 #include "DesiredSymbols.h"
 #include "Explanations.h"
 
<font color='#000088'>+/* hack so this can compile on the RH7 RTEMS 4.5 host */
+#if (__GNUC__ <= 2)
+#define STAT stat
+#define OPEN fopen
+#else
+#define STAT stat64
+#define OPEN fopen64
+#endif
+
</font> /*
  *  Global variables for the program
  */
<font color='#997700'>@@ -25,12 +34,12 @@
</font> Target::TargetBase*         TargetInfo          = NULL;
 
 bool FileIsNewer( const char *f1, const char *f2 ) {
<font color='#880000'>-  struct stat buf1, buf2;
</font><font color='#000088'>+  struct STAT buf1, buf2;
</font> 
<font color='#880000'>-   if (stat( f2, &buf2 ) == -1)
</font><font color='#000088'>+   if (STAT( f2, &buf2 ) == -1)
</font>     return true;
   
<font color='#880000'>-  if (stat (f1, &buf1 ) == -1)
</font><font color='#000088'>+  if (STAT( f1, &buf1 ) == -1)
</font>     exit (1);
 
   if (buf1.st_mtime > buf2.st_mtime)
<font color='#997700'>@@ -39,6 +48,19 @@
</font>   return false;
 }
 
<font color='#000088'>+bool FileIsReadable( const char *f1 ) {
+  struct STAT buf1;
+
+  if (STAT( f1, &buf1 ) == -1)
+    return false;
+
+  if (buf1.st_size == 0)
+    return false;
+
+  // XXX check permission ??
+  return true;
+}
+
</font> bool ReadUntilFound( FILE *file, const char *line )
 {
   char discardBuff[100];

<font color='#006600'>diff -u gcc-testing/rtems-coverage/covoar.cc:1.25 gcc-testing/rtems-coverage/covoar.cc:1.26
--- gcc-testing/rtems-coverage/covoar.cc:1.25   Fri May 14 12:26:35 2010
+++ gcc-testing/rtems-coverage/covoar.cc        Mon May 17 16:47:07 2010
</font><font color='#997700'>@@ -153,18 +153,18 @@
</font>   //
   progname = argv[0];
 
<font color='#880000'>-  while ((opt = getopt(argc, argv, "1:e:c:E:f:s:T:vC:O:")) != -1) {
</font><font color='#000088'>+  while ((opt = getopt(argc, argv, "C:1:e:c:E:f:s:T:O:v")) != -1) {
</font>     switch (opt) {
       case 'C': CoverageConfiguration->processFile( optarg ); break;
<font color='#880000'>-      case '1': singleExecutable = optarg;       break;
-      case 'e': executableExtension = optarg;    break;
-      case 'c': coverageFileExtension = optarg;  break;
-      case 'E': explanations          = optarg;  break;
-      case 's': symbolsFile           = optarg;  break;
-      case 'T': target                = optarg;  break;
-      case 'v': Verbose               = true;    break;
-      case 'f': format                = optarg;  break;
-      case 'O': outputDirectory       = optarg;  break;
</font><font color='#000088'>+      case '1': singleExecutable      = optarg; break;
+      case 'e': executableExtension   = optarg; break;
+      case 'c': coverageFileExtension = optarg; break;
+      case 'E': explanations          = optarg; break;
+      case 'f': format                = optarg; break;
+      case 's': symbolsFile           = optarg; break;
+      case 'T': target                = optarg; break;
+      case 'O': outputDirectory       = optarg; break;
+      case 'v': Verbose               = true;   break;
</font>       default: /* '?' */
         usage();
         exit( -1 );
<font color='#997700'>@@ -179,11 +179,39 @@
</font>   // If a single executable was specified, process the remaining
   // arguments as coverage file names.
   if (singleExecutable) {
<font color='#880000'>-    executableInfo = new Coverage::ExecutableInfo( singleExecutable );
-    executablesToAnalyze.push_back( executableInfo );
-    for (i=optind; i < argc; i++) {
-      coverageFileName = argv[i];
-      coverageFileNames.push_back( coverageFileName );
</font><font color='#000088'>+
+    // Ensure that the executable is readable.
+    if (!FileIsReadable( singleExecutable )) {
+      fprintf(
+        stderr,
+        "WARNING: Unable to read executable %s\n",
+        singleExecutable
+      );
+    }
+
+    else {
+
+      for (i=optind; i < argc; i++) {
+
+        // Ensure that the coverage file is readable.
+        if (!FileIsReadable( argv[i] )) {
+          fprintf(
+            stderr,
+            "WARNING: Unable to read coverage file %s\n",
+            argv[i]
+          );
+        }
+
+        else
+          coverageFileNames.push_back( argv[i] );
+      }
+
+      // If there was at least one coverage file, create the
+      // executable information.
+      if (!coverageFileNames.empty()) {
+        executableInfo = new Coverage::ExecutableInfo( singleExecutable );
+        executablesToAnalyze.push_back( executableInfo );
+      }
</font>     }
   }
 
<font color='#997700'>@@ -191,18 +219,49 @@
</font>   // arguments as executables and derive the coverage file names.
   else {
     for (i = optind; i < argc; i++) {
<font color='#880000'>-      executableInfo = new Coverage::ExecutableInfo( argv[i] );
-      executablesToAnalyze.push_back( executableInfo );
-      coverageFileName = executableInfo->getFileName();
-      coverageFileName.replace(
-        coverageFileName.length() - executableExtensionLength,
-        executableExtensionLength,
-        coverageFileExtension
-      );
-      coverageFileNames.push_back( coverageFileName );
</font><font color='#000088'>+
+      // Ensure that the executable is readable.
+      if (!FileIsReadable( argv[i] )) {
+        fprintf(
+          stderr,
+          "WARNING: Unable to read executable %s\n",
+          argv[i]
+        );
+      }
+
+      else {
+        coverageFileName = argv[i];
+        coverageFileName.replace(
+          coverageFileName.length() - executableExtensionLength,
+          executableExtensionLength,
+          coverageFileExtension
+        );
+
+        if (!FileIsReadable( coverageFileName.c_str() )) {
+          fprintf(
+            stderr,
+            "WARNING: Unable to read coverage file %s\n",
+            coverageFileName.c_str()
+          );
+        }
+
+        else {
+          executableInfo = new Coverage::ExecutableInfo( argv[i] );
+          executablesToAnalyze.push_back( executableInfo );
+          coverageFileNames.push_back( coverageFileName );
+        }
+      }
</font>     }
   }
 
<font color='#000088'>+  // Ensure that there is at least one executable to process.
+  if (executablesToAnalyze.empty()) {
+    fprintf(
+      stderr, "ERROR: No information to analyze\n"
+    );
+    exit( -1 );
+  }
+
</font>   if (Verbose) {
     if (singleExecutable)
       fprintf(
<font color='#997700'>@@ -266,7 +325,7 @@
</font>   // Create data to support analysis.
   //
 
<font color='#880000'>-  // Create toolnames based on target.
</font><font color='#000088'>+  // Create data based on target.
</font>   TargetInfo = Target::TargetFactory( target );
 
   // Create the set of desired symbols.
<font color='#997700'>@@ -329,12 +388,11 @@
</font>         ((*eitr)->getFileName()).c_str()
       );
 
<font color='#880000'>-    // along with its coverage file.
-    if (coverageReader->processFile( (*citr).c_str(), *eitr )) {
</font><font color='#000088'>+    // Process its coverage file.
+    coverageReader->processFile( (*citr).c_str(), *eitr );
</font> 
<font color='#880000'>-      // Merge each symbols coverage map into a unified coverage map.
-      (*eitr)->mergeCoverage();
-    }
</font><font color='#000088'>+    // Merge each symbols coverage map into a unified coverage map.
+    (*eitr)->mergeCoverage();
</font> 
     if (!singleExecutable)
       eitr++;
</pre>
<p> </p>

<p>--<br />
<small>Generated by <a href="http://www.codewiz.org/projects/index.html#loginfo">Deluxe Loginfo</a> 2.122 by Bernardo Innocenti <bernie@develer.com></small></p>
</body>
</html>