** 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 information on splint: splint@cs.virginia.edu
+** To report a bug: splint-bug@cs.virginia.edu
** For more information: http://www.splint.org
*/
/*
# include <process.h>
# endif
-# include "lclintMacros.nf"
+# include "splintMacros.nf"
# include "llbasic.h"
# include "osd.h"
}
/*
-** Disable MSVC++ warning about return value. Methinks humbly lclint control
+** Disable MSVC++ warning about return value. Methinks humbly splint control
** comments are a mite more legible.
*/
flagcode opt;
thisarg++;
- opt = identifyFlag (cstring_fromChars (thisarg));
+
+ /*
+ ** Don't report warnings this time
+ */
+
+ opt = flags_identifyFlagQuiet (cstring_fromChars (thisarg));
if (opt == FLG_NOF)
{
readhomerc = readOptionsFile (homename, &passThroughArgs, FALSE);
/*
- ** Try ~/.lclintrc also for historical accuracy
+ ** Try ~/.splintrc also for historical accuracy
*/
altname = message ("%s%h%s", home, CONNECTCHAR,
flagname = cstring_fromChars (thisarg);
DPRINTF (("Flag: %s", flagname));
- opt = identifyFlag (flagname);
+ opt = flags_identifyFlag (flagname);
DPRINTF (("Flag: %s", flagcode_unparse (opt)));
if (flagcode_isSkip (opt) || opt == FLG_SHOWSCAN || opt == FLG_WARNRC)
passThroughArgs = cstringSList_add
(passThroughArgs, cstring_fromChars (thisarg));
}
- else if (flagcode_hasValue (opt))
+ else if (flagcode_hasNumber (opt))
{
if (++i < argc)
{
flagcode_unparse (opt)));
}
}
+ else if (flagcode_hasChar (opt))
+ {
+ if (++i < argc)
+ {
+ setValueFlag (opt, cstring_fromChars (argv[i]));
+ }
+ else
+ {
+ llfatalerror
+ (message
+ ("Flag %s must be followed by a character",
+ flagcode_unparse (opt)));
+ }
+ }
else if (opt == FLG_INCLUDEPATH || opt == FLG_SPECPATH)
{
cstring dir = cstring_suffix (cstring_fromChars (thisarg), 1); /* skip over I */
}
else
{
- specErrors = message ("%d spec warning%& found\n ",
+ specErrors = message ("%d spec warning%&\n ",
nspecErrors);
expsuccess = FALSE;
}
if (!isQuiet)
{
llmsg (message ("Finished checking --- "
- "%s%d code warning%& found",
+ "%s%d code warning%&",
specErrors, context_numErrors ()));
}
printAllFlags (FALSE, TRUE);
return TRUE;
}
+ else if (mstring_equal (next, "manual"))
+ {
+ printFlagManual (FALSE);
+ return TRUE;
+ }
+ else if (mstring_equal (next, "webmanual"))
+ {
+ printFlagManual (TRUE);
+ return TRUE;
+ }
else
{
return FALSE;
llmsglit ("Parse Errors");
llmsglit ("------------");
llmsglit ("");
- llmsglit ("LCLint will sometimes encounter a parse error for code that "
+ llmsglit ("Splint will sometimes encounter a parse error for code that "
"can be parsed with a local compiler. There are a few likely "
"causes for this and a number of techniques that can be used "
"to work around the problem.");
"other compiler extensions by using a pre-processor define. "
"Alternately, you can surround the unparseable code with");
llmsglit ("");
- llmsglit (" # ifndef __LCLINT__");
+ llmsglit (" # ifndef S_SPLINT_S");
llmsglit (" ...");
llmsglit (" # endif");
llmsglit ("");
"header files.");
llmsglit ("");
llmsglit ("Otherwise, you may need to either manually define the problematic "
- "type (e.g., add -Dmlink_t=int to your .lclintrc file) or force "
- "lclint to process the header file that defines it. This is done "
- "by setting -skipansiheaders or -skipposixheaders before "
+ "type (e.g., add -Dmlink_t=int to your .splintrc file) or force "
+ "splint to process the header file that defines it. This is done "
+ "by setting -skipisoheaders or -skipposixheaders before "
"the file that defines the type is #include'd.");
- llmsglit ("(See lclint -help "
- "skipansiheaders and lclint -help skipposixheaders for a list of "
+ llmsglit ("(See splint -help "
+ "skipisoheaders and splint -help skipposixheaders for a list of "
"standard headers.) For example, if <sys/local.h> uses a type "
"defined by posix header <sys/types.h> but not defined by the "
"posix library, we might do: ");
llmsglit ("");
llmsglit ("Null State:");
llmsglit (" /*@null@*/ - possibly null pointer");
- llmsglit (" /*@notnull@*/ - non-null pointer");
+ llmsglit (" /*@notnull@*/ - definitely non-null pointer");
llmsglit (" /*@relnull@*/ - relax null checking");
llmsglit ("");
llmsglit ("Null Predicates:");
- llmsglit (" /*@truenull@*/ - if result is TRUE, first parameter is NULL");
- llmsglit (" /*@falsenull@*/ - if result is TRUE, first parameter is not NULL");
+ llmsglit (" /*@nullwhentrue@*/ - if result is TRUE, first parameter is NULL");
+ llmsglit (" /*@falsewhennull@*/ - if result is TRUE, first parameter is not NULL");
llmsglit ("");
llmsglit ("Execution:");
- llmsglit (" /*@exits@*/ - function never returns");
- llmsglit (" /*@mayexit@*/ - function may or may not return");
- llmsglit (" /*@trueexit@*/ - function does not return if first parameter is TRUE");
- llmsglit (" /*@falseexit@*/ - function does not return if first parameter if FALSE");
- llmsglit (" /*@neverexit@*/ - function always returns");
+ llmsglit (" /*@noreturn@*/ - function never returns");
+ llmsglit (" /*@maynotreturn@*/ - function may or may not return");
+ llmsglit (" /*@noreturnwhentrue@*/ - function does not return if first parameter is TRUE");
+ llmsglit (" /*@noreturnwhenfalse@*/ - function does not return if first parameter if FALSE");
+ llmsglit (" /*@alwaysreturns@*/ - function always returns");
llmsglit ("");
llmsglit ("Side-Effects:");
llmsglit (" /*@sef@*/ - corresponding actual parameter has no side effects");
llmsglit ("Flag Categories");
llmsglit ("---------------");
listAllCategories ();
- llmsglit ("\nTo see the flags in a flag category, do\n lclint -help flags <category>");
- llmsglit ("To see a list of all flags in alphabetical order, do\n lclint -help flags alpha");
- llmsglit ("To see a full description of all flags, do\n lclint -help flags full");
+ llmsglit ("\nTo see the flags in a flag category, do\n splint -help flags <category>");
+ llmsglit ("To see a list of all flags in alphabetical order, do\n splint -help flags alpha");
+ llmsglit ("To see a full description of all flags, do\n splint -help flags full");
}
void
printMaintainer (void)
{
- llmsg (message ("Maintainer: %s", cstring_makeLiteralTemp (LCLINT_MAINTAINER)));
+ llmsg (message ("Maintainer: %s", cstring_makeLiteralTemp (SPLINT_MAINTAINER)));
llmsglit (LCL_COMPILE);
}
llmsglit ("");
llmsglit (" lclint-interest@virginia.edu");
llmsglit ("");
- llmsglit (" Informal discussions on the use and development of lclint.");
+ llmsglit (" Informal discussions on the use and development of Splint.");
llmsglit (" To subscribe, send a message to majordomo@virginia.edu with body: ");
llmsglit (" subscribe lclint-interest");
}
cstring_toCharsSafe (loc));
cstring_free (loc);
printCodePoint ();
- fprintf (stderr, "*** Please report bug to %s\n", LCLINT_MAINTAINER);
+ fprintf (stderr, "*** Please report bug to %s\n", SPLINT_MAINTAINER);
exit (LLGIVEUP);
}
default:
cstring_toCharsSafe (fileloc_unparse (g_currentloc)));
/*@=mustfree@*/
printCodePoint ();
- fprintf (stderr, "*** Please report bug to %s ***\n", LCLINT_MAINTAINER);
+ fprintf (stderr, "*** Please report bug to %s ***\n", SPLINT_MAINTAINER);
exit (LLGIVEUP);
}
}
** cleans up temp files (if necessary) and exits
*/
-/*@exits@*/ void
+/*@noreturn@*/ void
llexit (int status)
{
DPRINTF (("llexit: %d", status));
DPRINTF (("Flag: %s", thisflag));
- opt = identifyFlag (cstring_fromChars (thisflag));
+ opt = flags_identifyFlag (cstring_fromChars (thisflag));
if (flagcode_isSkip (opt))
{
}
}
else if (flagcode_hasString (opt)
- || flagcode_hasValue (opt)
+ || flagcode_hasNumber (opt)
+ || flagcode_hasChar (opt)
|| opt == FLG_INIT || opt == FLG_OPTF)
{
cstring extra = cstring_undefined;
DPRINTF (("Here we are: %s", extra));
- if (flagcode_hasValue (opt))
+ if (flagcode_hasNumber (opt) || flagcode_hasChar (opt))
{
DPRINTF (("Set value flag: %s", extra));
setValueFlag (opt, extra);