]> andersk Git - splint.git/blobdiff - src/llmain.c
Fixed problem with assertion checking for negative shifts in
[splint.git] / src / llmain.c
index 8b177b16577e755f3407b335d58b31528914c77f..40178a3f162f5569f82be1eff35680c7791fdc66 100644 (file)
@@ -1,6 +1,6 @@
 /*
 ** Splint - annotation-assisted static program checker
-** Copyright (C) 1994-2002 University of Virginia,
+** Copyright (C) 1994-2003 University of Virginia,
 **         Massachusetts Institute of Technology
 **
 ** This program is free software; you can redistribute it and/or modify it
 # endif
 
 # include "splintMacros.nf"
-# include "llbasic.h"
+# include "basic.h"
 # include "osd.h"
 # include "help.h"
-
 # include "gram.h"
 # include "lclscan.h"
 # include "scanline.h"
@@ -71,9 +70,8 @@
 # include "Headers/version.h" /* Visual C++ finds the wrong version.h */
 # include "lcllib.h"
 # include "cgrammar.h"
+# include "rcfiles.h"
 # include "llmain.h"
-# include "portab.h"
-
 
 extern /*@external@*/ int yydebug;
 static void cleanupFiles (void);
@@ -554,7 +552,7 @@ int main (int argc, char *argv[])
                    if (++i < argc)
                      {
                        fname = cstring_fromChars (argv[i]);
-                       setStringFlag (opt, fname);
+                       flags_setStringFlag (opt, fname);
                      }
                    else
                      {
@@ -673,7 +671,29 @@ int main (int argc, char *argv[])
                      argc - 1, argv + 1);
 
   showHerald (); 
-  
+
+  if (context_getFlag (FLG_CSV)) {
+    cstring fname = context_getString (FLG_CSV);
+
+    if (cstring_isDefined (fname)) {
+      if (osd_fileExists (fname) && !context_getFlag (FLG_CSVOVERWRITE)) {
+       lldiagmsg (message ("Specified CSV output file already exists (use +csvoverwrite to automatically overwrite): %s",
+                           fname));
+      } else {
+       g_csvstream = fopen (cstring_toCharsSafe (fname), "w");
+       
+       DPRINTF (("Creating: %s", fname));
+       if (g_csvstream == NULL) {
+         lldiagmsg (message ("Cannot open file for CSV output: %s", fname));
+       } else {
+         displayScan (message ("Starting CSV output file: %s", context_getString (FLG_CSV)));
+         fprintf (g_csvstream, 
+                  "Warning, Flag Code, Flag Name, Priority, File, Line, Column, Warning Text, Additional Text\n");
+       }
+      }
+    }
+  }
+
 # ifdef DOANNOTS
   initAnnots ();
 # endif
@@ -802,8 +822,10 @@ int main (int argc, char *argv[])
   **  will be <tmpprefix>.<file>.c)
   */
 
+  /* Why was this here?  It is always a bug... */
+# if 0
   {
-# ifdef WIN32
+# if defined (WIN32) || defined (OS2) && defined (__IBMC__)
     int nfiles = /*@-unrecog@*/ _fcloseall (); /*@=unrecog@*/
 
     if (nfiles != 0) 
@@ -812,6 +834,7 @@ int main (int argc, char *argv[])
       }
 # endif
   }
+# endif
 
   DPRINTF (("Initializing..."));
 
@@ -928,12 +951,16 @@ int main (int argc, char *argv[])
 # endif
 
   cleanupFiles ();
-
+  
+  if (g_csvstream != NULL) {
+    displayScan (message ("Closing CSV file: %s", context_getString (FLG_CSV)));
+    check (fclose (g_csvstream) == 0);
+  }
+  
   if (context_getFlag (FLG_SHOWSUMMARY))
     {
       summarizeErrors (); 
     }
-
   
   {
     bool isQuiet = context_getFlag (FLG_QUIET);
@@ -1063,6 +1090,13 @@ int main (int argc, char *argv[])
        }
 
       cstring_free (specErrors);
+  
+      if (context_numBugs () > 0) {
+       expsuccess = FALSE;
+       if (!isQuiet) {
+         llmsg (message ("   %d internal bugs reported", context_numBugs ()));
+       }
+      }
   }
   
   if (context_getFlag (FLG_STATS))
@@ -1070,7 +1104,7 @@ int main (int argc, char *argv[])
       clock_t ttime = clock () - before;
       int specLines = context_getSpecLinesProcessed ();
       cstring specmsg = cstring_undefined;
-
+      
       rstime = clock ();
       
       if (specLines > 0)
@@ -1117,7 +1151,12 @@ int main (int argc, char *argv[])
          
          if (anylcl)
            {
+             /* Gack: really should figure out how to make configure find snprintf... */
+# ifdef WIN32
+             (void) _snprintf (msg, 256,
+# else
              (void) snprintf (msg, 256,
+# endif
                        "Time distribution (percent): initialize %.2f / lcl %.2f / "
                        "pre-process %.2f / c check %.2f / finalize %.2f \n", 
                        (100.0 * (double) (libtime - before) / ttime),
@@ -1128,7 +1167,11 @@ int main (int argc, char *argv[])
            }
          else
            {
+# ifdef WIN32
+             (void) _snprintf (msg, 256,
+# else
              (void) snprintf (msg, 256,
+# endif
                        "Time distribution (percent): initialize %.2f / "
                        "pre-process %.2f / c check %.2f / finalize %.2f \n", 
                        (100.0 * (double) (libtime - before) / ttime),
@@ -1178,7 +1221,7 @@ llinterrupt (int i)
                 cstring_toCharsSafe (loc));
        cstring_free (loc);
        printCodePoint ();
-       fprintf (g_errorstream, "*** Please report bug to %s\n", SPLINT_MAINTAINER);
+       fprintf (g_errorstream, "*** Please report bug to %s\n*** A useful bug report should include everything we need to reproduce the bug.\n", SPLINT_MAINTAINER);
        exit (LLGIVEUP);
       }
     default:
@@ -1188,7 +1231,7 @@ llinterrupt (int i)
               cstring_toCharsSafe (fileloc_unparse (g_currentloc)));
       /*@=mustfree@*/
       printCodePoint ();
-      fprintf (g_errorstream, "*** Please report bug to %s ***\n", SPLINT_MAINTAINER);
+      fprintf (g_errorstream, "*** Please report bug to %s\n*** A useful bug report should include everything we need to reproduce the bug.", SPLINT_MAINTAINER);
       exit (LLGIVEUP);
     }
 }
@@ -1218,7 +1261,7 @@ cleanupFiles (void)
     }
   else
     {
-# ifdef WIN32
+# if defined (WIN32) || defined (OS2) && defined (__IBMC__)
       int nfiles = /*@-unrecog@*/ _fcloseall (); /*@=unrecog@*/
       
       if (nfiles != 0) 
@@ -1241,7 +1284,7 @@ llexit (int status)
 {
   DPRINTF (("llexit: %d", status));
 
-# ifdef WIN32
+# if defined (WIN32) || defined (OS2) && defined (__IBMC__)
   if (status == LLFAILURE) 
     {
       _fcloseall ();
@@ -1253,7 +1296,13 @@ llexit (int status)
   if (status != LLFAILURE)
     {
       usymtab_destroyMod ();
-      context_destroyMod ();
+
+      /*drl I'm commenting this line out
+               because it is causing Splint to crash when built with
+                       2.95 I'm not sure if this is a compiler bug or if if has to do with bool
+                               Any way if we're going to exist the program why do we bother freeing stuff...
+      */
+      /*      context_destroyMod (); */
       exprNode_destroyMod ();
       cppReader_destroyMod ();
       sRef_destroyMod ();
This page took 0.14968 seconds and 4 git commands to generate.