** the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
** MA 02111-1307, USA.
**
-** For information on splint: splint@cs.virginia.edu
-** To report a bug: splint-bug@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
*/
/*
case ARG_SPECIAL:
BADBRANCH;
}
+# ifdef WIN32
+/* Make Microsoft VC++ happy */
+# pragma warning (disable:4715)
+# endif
}
typedef struct {
}
else
{
+ /*drl bee: ec*/
+ /*drl bee: ec*/
flags[f].nreported = flags[f].nreported + 1;
}
}
{
llassertprint (f != INVALID_FLAG, ("flagcode: %s", flagcode_unparse (f)));
- flags[f].nsuppressed = flags[f].nsuppressed + 1;
+ /*drl bee: ec*/
+ /*drl bee: ec*/ flags[f].nsuppressed = flags[f].nsuppressed + 1;
}
int
{
llassert (f != INVALID_FLAG);
+ /*drl bee: ec*/
if (mstring_isDefined (flags[f].hint))
{
return (cstring_fromChars (flags[f].hint));
for (i = 0; categories[i].kind != FK_NONE; i++)
{
+ /*drl bee: mRug*/
if (mstring_isDefined (categories[i].name))
{
if (cstring_equalLit (s, categories[i].name))
for (i = 0; categories[i].kind != FK_NONE; i++)
{
+ /*drl bee: mrUg*/
if (categories[i].kind == kind)
{
return (cstring_fromChars (categories[i].name));
for (i = 0; categories[i].kind != FK_NONE; i++)
{
+ /*drl bee: mRug*/
if (categories[i].kind == kind)
{
return i;
int index = categoryIndex (kind);
llassert (index >= 0);
-
+ /*drl bee: mRug*/
llmsg (message ("%s (%d flags)\n\3%s\n\n",
cstring_fromChars (categories[index].name),
categorySize (kind),
for (i = 0; categories[i].kind != FK_NONE; i++)
{
+ /*drl bee: mRug*/
flagkind kind = categories[i].kind ;
if (categories[i].describe != NULL)
cstringSList_elements (fl, el)
{
- llmsg (message ("%q\n\n", describeFlag (el)));
+ /*@i22@*/ /*find out why this is necessary*/
+ cstring tmp;
+ tmp = cstring_copy(el);
+ llmsg (message ("%q\n\n", describeFlag (tmp)));
+ cstring_free(tmp);
} end_cstringSList_elements ;
cstringSList_free (fl);
}
void
-printFlagManual (void)
+printFlagManual (bool html)
{
/*
** Prints all flags by category, in order they appear in flags.def
if (f.main != lastCategory)
{
- llmsg (message ("\n%s\n%s\n",
- categoryName (f.main),
- cstring_makeLiteralTemp ("===================================")));
+ if (html)
+ {
+ llmsg (message ("\n<h4>%s</h4>\n", categoryName (f.main)));
+ }
+ else
+ {
+ llmsg (message ("\n%s\n%s\n",
+ categoryName (f.main),
+ cstring_makeLiteralTemp ("===================================")));
+ }
lastCategory = f.main;
}
if (f.argtype == ARG_NONE || f.argtype == ARG_SPECIAL)
{
- flagname = cstring_fromCharsNew (f.flag);
+ if (html)
+ {
+ flagname = message ("<tt>%s</tt>", cstring_fromChars (f.flag));
+ }
+ else
+ {
+ flagname = cstring_fromCharsNew (f.flag);
+ }
}
else
{
if (flagcode_hasString (f.code))
{
- flagname = message ("%s <%s>", cstring_fromChars (f.flag), argcode_unparse (f.argtype));
-
+ if (html)
+ {
+ flagname = message ("<tt>%s <em><%s></em></tt>",
+ cstring_fromChars (f.flag), argcode_unparse (f.argtype));
+ }
+ else
+ {
+ flagname = message ("%s <%s>", cstring_fromChars (f.flag), argcode_unparse (f.argtype));
+ }
+
if (cstring_isDefined (context_getString (f.code)))
{
- flagname = message ("%q [%s]", flagname,
- context_getString (f.code));
+ if (html)
+ {
+ flagname = message ("%q <font color=\"blue\">[%s]</font>", flagname,
+ context_getString (f.code));
+ }
+ else
+ {
+ flagname = message ("%q [%s]", flagname,
+ context_getString (f.code));
+ }
}
}
else if (f.argtype == ARG_CHAR)
{
- flagname = message ("%s <%s> [%c]", cstring_fromChars (f.flag), argcode_unparse (f.argtype),
- (char) context_getValue (f.code));
+ if (html)
+ {
+ flagname = message ("<tt>%s <em><%s></em></tt> <font color=\"blue\">[%c]</font>",
+ cstring_fromChars (f.flag), argcode_unparse (f.argtype),
+ (char) context_getValue (f.code));
+ }
+ else
+ {
+ flagname = message ("%s <%s> [%c]", cstring_fromChars (f.flag), argcode_unparse (f.argtype),
+ (char) context_getValue (f.code));
+ }
}
else
{
llassert (f.argtype == ARG_NUMBER);
- flagname = message ("%s <%s> [%d]", cstring_fromChars (f.flag), argcode_unparse (f.argtype),
- context_getValue (f.code));
+
+ if (html)
+ {
+ flagname = message ("<tt>%s <em><%s></em> <font color=\"blue\">[%d]</font>",
+ cstring_fromChars (f.flag), argcode_unparse (f.argtype),
+ context_getValue (f.code));
+ }
+ else
+ {
+ flagname = message ("%s <%s> [%d]", cstring_fromChars (f.flag), argcode_unparse (f.argtype),
+ context_getValue (f.code));
+ }
}
}
if (f.isIdem)
{
- flagtype = message("%q<->", flagtype);
+ if (html)
+ {
+ flagtype = message("%q<font color=\"green\">-</font>", flagtype);
+ }
+ else
+ {
+ flagtype = message("%q<->", flagtype);
+ }
}
if (f.isGlobal)
{
- flagtype = message ("%q<G>", flagtype);
+ if (html)
+ {
+ flagtype = message ("%q<font color=\"green\"><em>global</em></font>", flagtype);
+ }
+ else
+ {
+ flagtype = message ("%q<G>", flagtype);
+ }
}
if (f.isSpecial)
{
- flagtype = message("%q<S>", flagtype);
+ if (html)
+ {
+ flagtype = message ("%q<font color=\"orange\"><em>shortcut</em></font>", flagtype);
+ }
+ else
+ {
+ flagtype = message("%q<S>", flagtype);
+ }
}
if (f.isModeFlag)
{
- flagtype = message ("%q<M:%q>", flagtype, getFlagModeSettings (f.code));
+ if (html)
+ {
+ flagtype = message ("%q mode:<tt>%q</tt>>", flagtype, getFlagModeSettings (f.code));
+ }
+ else
+ {
+ flagtype = message ("%q<M:%q>", flagtype, getFlagModeSettings (f.code));
+ }
}
else /* its a plain flag */
{
- flagtype = message ("%q<P:%s>", flagtype,
- cstring_makeLiteralTemp (context_getFlag (f.code) ? "+" : "-"));
+ if (html)
+ {
+ flagtype = message ("%q plain:<tt>%s</tt>", flagtype,
+ cstring_makeLiteralTemp (context_getFlag (f.code) ? "+" : "-"));
+ }
+ else
+ {
+ flagtype = message ("%q<P:%s>", flagtype,
+ cstring_makeLiteralTemp (context_getFlag (f.code) ? "+" : "-"));
+ }
}
llmsg (message ("%s: %s", flagname, flagtype));
+ if (html)
+ {
+ llgenindentmsgnoloc (cstring_makeLiteral ("<blockquote>"));
+ }
+
if (mstring_isDefined (f.hint))
{
llgenindentmsgnoloc (cstring_fromCharsNew (f.hint));
{
llgenindentmsgnoloc (message ("%q.", cstring_capitalize (cstring_fromChars (f.desc))));
}
+
+ if (html)
+ {
+ llgenindentmsgnoloc (cstring_makeLiteral ("</blockquote>"));
+ }
} end_allFlags ;
}
context_resetAllFlags ();
+ /*drl bee: mRug*/
f = flags[flag];
ret = cstring_copy (cstring_fromChars (f.desc));
** length -> len
*/
-static void
+static /*@only@*/ cstring
canonicalizeFlag (cstring s)
{
int i = 0;
+ cstring res = cstring_copy (s);
static bn_mstring transform[] =
{
"function", "fcn",
NULL
} ;
char *current;
-
+
+ /*drl bee: ia*/
while ((current = transform[i]) != NULL)
{
- if (cstring_containsLit (s, current))
+ if (cstring_containsLit (res, current))
{
- cstring_replaceLit (s, current, transform[i+1]);
+ cstring_replaceLit (res, current, transform[i+1]);
}
i += 2;
}
/* remove whitespace, -'s, and _'s */
- cstring_stripChars (s, " -_");
+ cstring_stripChars (res, " -_");
+ return res;
}
flagcode
static flagcode
flags_identifyFlagAux (cstring s, bool quiet)
{
+ cstring cflag;
+ flagcode res;
+
if (cstring_length (s) == 0) {
/* evs 2000-06-25: A malformed flag. */
return INVALID_FLAG;
return FLG_UNDEFINE; /* no space after -D */
}
- canonicalizeFlag (s);
+ cflag = canonicalizeFlag (s);
+ res = INVALID_FLAG;
allFlags (f)
{
- if (cstring_equal (cstring_fromChars (f.flag), s))
+ if (cstring_equal (cstring_fromChars (f.flag), cflag))
{
- return (f.code);
+ res = f.code;
+ break;
}
} end_allFlags;
-
- /*
- ** Synonyms
- */
-
- if (cstring_equalLit (s, "pred"))
- {
- return FLG_PREDBOOL;
- }
-
- if (cstring_equalLit (s, "modobserverstrict"))
- {
- return FLG_MODOBSERVERUNCON;
- }
-
- if (cstring_equalLit (s, "czechnames"))
- {
- return FLG_CZECH;
- }
-
- if (cstring_equalLit (s, "slovaknames"))
- {
- return FLG_SLOVAK;
- }
-
- if (cstring_equalLit (s, "czechoslovaknames"))
- {
- return FLG_CZECHOSLOVAK;
- }
-
- if (cstring_equalLit (s, "globunspec")
- || cstring_equalLit (s, "globuncon"))
- {
- return FLG_GLOBUNSPEC;
- }
-
- if (cstring_equalLit (s, "modglobsunspec")
- || cstring_equalLit (s, "modglobsuncon")
- || cstring_equalLit (s, "modglobsnomods"))
- {
- return FLG_MODGLOBSUNSPEC;
- }
-
- if (cstring_equalLit (s, "export"))
- {
- return FLG_EXPORTANY;
- }
-
- if (cstring_equalLit (s, "macrospec"))
- {
- return FLG_MACRODECL;
- }
-
- if (cstring_equalLit (s, "ansireservedlocal"))
- {
- return FLG_ANSIRESERVEDLOCAL;
- }
-
- if (cstring_equalLit (s, "warnposix"))
- {
- return FLG_WARNPOSIX;
- }
-
- if (cstring_equalLit (s, "defuse"))
- {
- return FLG_USEDEF;
- }
-
- if (cstring_equalLit (s, "macroundef"))
- {
- return FLG_MACROUNDEF;
- }
-
- if (cstring_equalLit (s, "showcol"))
- {
- return FLG_SHOWCOL;
- }
-
- if (cstring_equalLit (s, "intbool"))
- {
- return FLG_BOOLINT;
- }
-
- if (cstring_equalLit (s, "intchar"))
- {
- return FLG_CHARINT;
- }
-
- if (cstring_equalLit (s, "intenum"))
- {
- return FLG_ENUMINT;
- }
-
- /*
- ** Backwards compatibility for our American friends...
- */
-
- if (cstring_equalLit (s, "ansilib"))
- {
- return FLG_ANSILIB;
- }
-
- if (cstring_equalLit (s, "ansistrictlib"))
- {
- return FLG_STRICTLIB;
- }
-
- if (cstring_equalLit (s, "skipansiheaders"))
- {
- return FLG_SKIPANSIHEADERS;
- }
-
- if (cstring_equalLit (s, "ansireserved"))
- {
- return FLG_ANSIRESERVED;
- }
-
- if (cstring_equalLit (s, "ansireservedinternal"))
- {
- return FLG_ANSIRESERVEDLOCAL;
- }
-
- /*
- ** Obsolete Flags
- */
- if (cstring_equalLit (s, "accessunspec"))
+ if (res == INVALID_FLAG)
{
- if (!quiet)
+ /*
+ ** Synonyms
+ */
+
+ if (cstring_equalLit (cflag, "pred"))
{
- llerror_flagWarning
- (cstring_makeLiteral
- ("accessunspec flag is no longer supported. It has been replaced by accessmodule, accessfile and "
- "accessfunction to provide more precise control of accessibility "
- "of representations. For more information, "
- "see splint -help accessmodule"));
+ res = FLG_PREDBOOL;
+ }
+ else if (cstring_equalLit (cflag, "modobserverstrict"))
+ {
+ res = FLG_MODOBSERVERUNCON;
}
+ else if (cstring_equalLit (cflag, "czechnames"))
+ {
+ res = FLG_CZECH;
+ }
+ else if (cstring_equalLit (cflag, "slovaknames"))
+ {
+ res = FLG_SLOVAK;
+ }
+ else if (cstring_equalLit (cflag, "czechoslovaknames"))
+ {
+ res = FLG_CZECHOSLOVAK;
+ }
+ else if (cstring_equalLit (cflag, "globunspec")
+ || cstring_equalLit (cflag, "globuncon"))
+ {
+ res = FLG_GLOBUNSPEC;
+ }
+ else if (cstring_equalLit (cflag, "modglobsunspec")
+ || cstring_equalLit (cflag, "modglobsuncon")
+ || cstring_equalLit (cflag, "modglobsnomods"))
+ {
+ res = FLG_MODGLOBSUNSPEC;
+ }
+ else if (cstring_equalLit (cflag, "export"))
+ {
+ res = FLG_EXPORTANY;
+ }
+ else if (cstring_equalLit (cflag, "macrospec"))
+ {
+ res = FLG_MACRODECL;
+ }
+ else if (cstring_equalLit (cflag, "ansireservedlocal"))
+ {
+ res = FLG_ISORESERVEDLOCAL;
+ }
+ else if (cstring_equalLit (cflag, "warnposix"))
+ {
+ res = FLG_WARNPOSIX;
+ }
+ else if (cstring_equalLit (cflag, "defuse"))
+ {
+ res = FLG_USEDEF;
+ }
+ else if (cstring_equalLit (cflag, "macroundef"))
+ {
+ res = FLG_MACROUNDEF;
+ }
+ else if (cstring_equalLit (cflag, "showcol"))
+ {
+ res = FLG_SHOWCOL;
+ }
+ else if (cstring_equalLit (cflag, "intbool"))
+ {
+ res = FLG_BOOLINT;
+ }
+ else if (cstring_equalLit (cflag, "intchar"))
+ {
+ res = FLG_CHARINT;
+ }
+ else if (cstring_equalLit (cflag, "intenum"))
+ {
+ res = FLG_ENUMINT;
+ }
+ /*
+ ** Backwards compatibility for our American friends...
+ */
- return SKIP_FLAG;
- }
- else if (cstring_equalLit (s, "ansilimits"))
- {
+ else if (cstring_equalLit (cflag, "ansilib"))
+ {
+ res = FLG_ANSILIB;
+ }
+ else if (cstring_equalLit (cflag, "ansistrictlib"))
+ {
+ res = FLG_STRICTLIB;
+ }
+ else if (cstring_equalLit (cflag, "skipansiheaders"))
+ {
+ res = FLG_SKIPISOHEADERS;
+ }
+ else if (cstring_equalLit (cflag, "ansireserved"))
+ {
+ res = FLG_ISORESERVED;
+ }
+ else if (cstring_equalLit (cflag, "ansireservedinternal"))
+ {
+ res = FLG_ISORESERVEDLOCAL;
+ }
+
+ /*
+ ** Obsolete Flags
+ */
+
+ else if (cstring_equalLit (cflag, "accessunspec"))
+ {
+ if (!quiet)
+ {
+ llerror_flagWarning
+ (cstring_makeLiteral
+ ("accessunspec flag is no longer supported. It has been replaced by accessmodule, accessfile and "
+ "accessfunction to provide more precise control of accessibility "
+ "of representations. For more information, "
+ "see splint -help accessmodule"));
+ }
+
+ res = SKIP_FLAG;
+ }
+ else if (cstring_equalLit (cflag, "ansilimits"))
+ {
llerror_flagWarning
(cstring_makeLiteral
("ansilimits flag is no longer supported. It has been replaced by ansi89limits and "
"iso99limits to select either the lower translation limits imposed by the ANSI89 "
"standard or the typically higher limits prescribed by ISO C99."));
-
- return SKIP_FLAG;
- }
- else if (cstring_equalLit (s, "staticmods"))
- {
- if (!quiet)
+
+ res = SKIP_FLAG;
+ }
+ else if (cstring_equalLit (cflag, "staticmods"))
{
- llerror_flagWarning
- (cstring_makeLiteral
- ("staticmods flag is obsolete. You probably "
- "want impcheckmodstatics. For more information, "
- "see splint -help impcheckmodstatics"));
+ if (!quiet)
+ {
+ llerror_flagWarning
+ (cstring_makeLiteral
+ ("staticmods flag is obsolete. You probably "
+ "want impcheckmodstatics. For more information, "
+ "see splint -help impcheckmodstatics"));
+ }
+
+ res = SKIP_FLAG;
}
-
- return SKIP_FLAG;
- }
- else if (cstring_equalLit (s, "bool"))
- {
- if (!quiet)
+ else if (cstring_equalLit (cflag, "bool"))
{
- llerror_flagWarning
- (cstring_makeLiteral ("bool flag is obsolete. It never really "
- "made sense in the first place."));
+ if (!quiet)
+ {
+ llerror_flagWarning
+ (cstring_makeLiteral ("bool flag is obsolete. It never really "
+ "made sense in the first place."));
+ }
+
+ res = SKIP_FLAG;
}
-
- return SKIP_FLAG;
- }
- else if (cstring_equalLit (s, "shiftsigned"))
- {
- if (!quiet)
+ else if (cstring_equalLit (cflag, "shiftsigned"))
{
- llerror_flagWarning
- (cstring_makeLiteral ("shiftsigned flag is obsolete. You probably "
- "want bitwisesigned, shiftnegative or shiftsize."));
+ if (!quiet)
+ {
+ llerror_flagWarning
+ (cstring_makeLiteral ("shiftsigned flag is obsolete. You probably "
+ "want bitwisesigned, shiftnegative or shiftimplementation."));
+ }
+
+ res = SKIP_FLAG;
}
-
- return SKIP_FLAG;
- }
- else if (cstring_equalLit (s, "ansi"))
- {
- if (!quiet)
+ else if (cstring_equalLit (cflag, "ansi"))
{
- llerror_flagWarning
- (cstring_makeLiteral ("ansi flag is obsolete. You probably "
- "want noparams and/or oldstyle."));
+ if (!quiet)
+ {
+ llerror_flagWarning
+ (cstring_makeLiteral ("ansi flag is obsolete. You probably "
+ "want noparams and/or oldstyle."));
+ }
+
+ res = SKIP_FLAG;
}
-
- return SKIP_FLAG;
- }
- else if (cstring_equalLit (s, "stdio"))
- {
- if (!quiet)
+ else if (cstring_equalLit (cflag, "stdio"))
{
- llerror_flagWarning
- (cstring_makeLiteral
- ("stdio flag is obsolete. You may "
- "want strictlib or one of the gloabls "
- "checking flags. For more information, "
- "see splint -help strictlib or splint -help flags globals"));
+ if (!quiet)
+ {
+ llerror_flagWarning
+ (cstring_makeLiteral
+ ("stdio flag is obsolete. You may "
+ "want strictlib or one of the gloabls "
+ "checking flags. For more information, "
+ "see splint -help strictlib or splint -help flags globals"));
+ }
+
+ res = SKIP_FLAG;
+ }
+ else
+ {
+ res = INVALID_FLAG;
}
-
- return SKIP_FLAG;
- }
- else
- {
- return INVALID_FLAG;
}
+
+ cstring_free (cflag);
+ return res;
}
void setValueFlag (flagcode opt, cstring arg)
for (i = 0; i < NUMVALUEFLAGS; i++)
{
/* static valueFlags must be defined */
- /*@-usedef@*/ if (f == valueFlags[i]) /*@=usedef@*/
+ /*@-usedef@*/
+ /*drl bee: sta*/
+ if (f == valueFlags[i]) /*@=usedef@*/
{
return i;
}
for (i = 0; i < NUMSTRINGFLAGS; i++)
{
+ /*drl bee: sta*/
/*@-usedef@*/ if (f == stringFlags[i]) /*@=usedef@*/
{
return i;