X-Git-Url: http://andersk.mit.edu/gitweb/splint.git/blobdiff_plain/a0a162cdc5db4d998824629e9f4d370b9b68df56..ce7034f0b1dd4c347e9230f82cd9af11d2210059:/src/cppmain.c diff --git a/src/cppmain.c b/src/cppmain.c index 4095020..a01bf67 100644 --- a/src/cppmain.c +++ b/src/cppmain.c @@ -1,6 +1,6 @@ /* -** LCLint - annotation-assisted static program checker -** Copyright (C) 1994-2000 University of Virginia, +** Splint - annotation-assisted static program checker +** Copyright (C) 1994-2002 University of Virginia, ** Massachusetts Institute of Technology ** ** This program is free software; you can redistribute it and/or modify it @@ -17,9 +17,9 @@ ** the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, ** MA 02111-1307, USA. ** -** For information on lclint: lclint-request@cs.virginia.edu -** To report a bug: lclint-bug@cs.virginia.edu -** For more information: http://lclint.cs.virginia.edu +** For information on splint: info@splint.org +** To report a bug: splint-bug@splint.org +** For more information: http://www.splint.org */ /* ** cppmain.c @@ -46,13 +46,13 @@ Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. You are forbidden to forbid anyone else to use, share and improve what you give them. Help stamp out software-hoarding! */ -# include "lclintMacros.nf" +# include "splintMacros.nf" # include "llbasic.h" -# include "cpp.h" # include "cpplib.h" # include "cpphash.h" # include "cpperror.h" # include "llmain.h" +# include "osd.h" # include @@ -81,7 +81,7 @@ void cppReader_initMod () { struct cppOptions *opts = (struct cppOptions *) dmalloc (sizeof (*opts)); - cppReader_init (&g_cppState); + cpplib_init (&g_cppState); llassert (g_cppState.opts == NULL); g_cppState.opts = opts; @@ -91,7 +91,7 @@ void cppReader_initMod () void cppReader_initialize () { - cppReader_initializeReader (&g_cppState); + cpplib_initializeReader (&g_cppState); } int cppProcess (/*@dependent@*/ cstring infile, @@ -104,7 +104,7 @@ int cppProcess (/*@dependent@*/ cstring infile, opts->in_fname = infile; opts->out_fname = outfile; - if (cppFatalErrors (&g_cppState)) + if (cpplib_fatalErrors (&g_cppState)) { llexit (LLFAILURE); } @@ -116,11 +116,12 @@ int cppProcess (/*@dependent@*/ cstring infile, llexit (LLFAILURE); } - ofile = fopen (cstring_toCharsSafe (outfile), "w"); + ofile = fileTable_createFile (context_fileTable (), outfile); if (ofile == NULL) { fileTable_noDelete (context_fileTable (), outfile); + osd_setTempError (); llfatalerror (message ("Cannot create temporary file for " "pre-processor output. Trying to " "open: %s. Use -tmpdir to change " @@ -136,21 +137,23 @@ int cppProcess (/*@dependent@*/ cstring infile, if (!opts->no_output) { + DPRINTF (("Writing: %s", cstring_copyLength (g_cppState.token_buffer, cpplib_getWritten (&g_cppState)))); + (void) fwrite (g_cppState.token_buffer, (size_t) 1, - cppReader_getWritten (&g_cppState), ofile); + cpplib_getWritten (&g_cppState), ofile); } cppReader_setWritten (&g_cppState, 0); - kind = cppGetToken (&g_cppState); + kind = cpplib_getToken (&g_cppState); if (kind == CPP_EOF) break; } cppReader_finish (&g_cppState); - check (fclose (ofile) == 0); + check (fileTable_closeFile (context_fileTable (), ofile)); - /* Resotre the original definition table. */ + /* Restore the original definition table. */ if (!context_getFlag (FLG_SINGLEINCLUDE)) { @@ -167,24 +170,41 @@ int cppProcess (/*@dependent@*/ cstring infile, return 0; } -void cppAddIncludeDir (cstring dir) +void cppAddIncludeDir (cstring dir) { - /* -I option (Add directory to include path) */ - struct file_name_list *dirtmp = (struct file_name_list *) dmalloc (sizeof (*dirtmp)); + /* evans 2001-08-26 + ** Add the -I- code. This code provided by Robin Watts + */ - DPRINTF (("Add include: %s", dir)); + DPRINTF (("Adding include: %s", dir)); - dirtmp->next = 0; /* New one goes on the end */ - dirtmp->control_macro = 0; - dirtmp->c_system_include_path = FALSE; - - /* This copy is necessary...but shouldn't be? */ - /*@-onlytrans@*/ - dirtmp->fname = cstring_copy (dir); - /*@=onlytrans@*/ - - dirtmp->got_name_map = FALSE; - cppReader_addIncludeChain (&g_cppState, dirtmp); + if (cstring_equalLit (dir, "-I-")) + { + struct cppOptions *opts = CPPOPTIONS (&g_cppState); + opts->ignore_srcdir = TRUE; + } + else + { + /* -I option (Add directory to include path) */ + struct file_name_list *dirtmp = (struct file_name_list *) dmalloc (sizeof (*dirtmp)); + + llassert (cstring_firstChar (dir) == 'I'); + dir = cstring_suffix (dir, 1); + + DPRINTF (("Add include: %s", dir)); + + dirtmp->next = 0; /* New one goes on the end */ + dirtmp->control_macro = 0; + dirtmp->c_system_include_path = FALSE; + + /* This copy is necessary...but shouldn't be? */ + /*@-onlytrans@*/ + dirtmp->fname = cstring_copy (dir); + /*@=onlytrans@*/ + + dirtmp->got_name_map = FALSE; + cppReader_addIncludeChain (&g_cppState, dirtmp); + } } void cppDoDefine (cstring str) @@ -198,14 +218,14 @@ void cppDoDefine (cstring str) void cppDoUndefine (cstring str) { - int sym_length; - HASHNODE *hp; + size_t sym_length; + hashNode hp; char *buf = cstring_toCharsSafe (str); sym_length = cppReader_checkMacroName (&g_cppState, buf, - cstring_makeLiteralTemp ("macro")); + cstring_makeLiteralTemp ("macro")); - while ((hp = cppReader_lookup (buf, sym_length, -1)) != NULL) + while ((hp = cpphash_lookup (buf, size_toInt (sym_length), -1)) != NULL) { /*@-exposetrans@*/ /*@-dependenttrans@*/ cppReader_deleteMacro (hp);