]> andersk Git - splint.git/blobdiff - src/flags.c
Fixes for win32
[splint.git] / src / flags.c
index a56ab38036d3aa990d4a62589ee0f539b075ac15..58063c89c580eca73050b727f2d0a9d870d68b5b 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
 
 # include "splintMacros.nf"
 # include "basic.h"
-# include "portab.h"
+# include "osd.h"
+# include "rcfiles.h"
+# include "lslinit.h"
+# include "llmain.h"
 
 /*
 ** from the CC man page:
@@ -125,6 +128,11 @@ typedef enum {
   ARG_SPECIAL   /* ? */
 } argcode;
 
+# ifdef WIN32
+/* Make Microsoft VC++ happy */
+# pragma warning (disable:4715)
+# endif
+
 static /*@observer@*/ cstring argcode_unparse (argcode arg)
 {
   switch (arg) 
@@ -140,11 +148,11 @@ static /*@observer@*/ cstring argcode_unparse (argcode arg)
     case ARG_SPECIAL:
       BADBRANCH;
     }
+}      
+
 # ifdef WIN32
-/* Make Microsoft VC++ happy */
-# pragma warning (disable:4715) 
+# pragma warning (default : 4715)
 # endif
-}      
 
 typedef struct { 
   flagkind main;
@@ -297,7 +305,7 @@ summarizeErrors ()
              hadOne = TRUE;
            }
 
-         sprintf (buf, "%s%7d   %9d", cstring_toCharsSafe (fs), nrep, nsup);
+         (void) snprintf (buf, 128, "%s%7d   %9d", cstring_toCharsSafe (fs), nrep, nsup);
 
          sumrep += nrep;
          sumsup += nsup;
@@ -313,7 +321,7 @@ summarizeErrors ()
 
       llmsglit ("                          ========  =========");
 
-      sprintf (buf, "%s%7d   %9d", cstring_toCharsSafe (ts), sumrep, sumsup);
+      (void) snprintf (buf, 128, "%s%7d   %9d", cstring_toCharsSafe (ts), sumrep, sumsup);
       cstring_free (ts);
       llmsgplain (cstring_copy (cstring_fromChars (buf)));
     }
@@ -334,8 +342,6 @@ flagcode_recordError (flagcode f)
        }
       else
        {
-         /*drl bee: ec*/
-         /*drl bee: ec*/
          flags[f].nreported = flags[f].nreported + 1;
        }
     }
@@ -350,8 +356,7 @@ flagcode_recordSuppressed (flagcode f)
 {
   llassertprint (f != INVALID_FLAG, ("flagcode: %s", flagcode_unparse (f)));
 
-  /*drl bee: ec*/
-    /*drl bee: ec*/   flags[f].nsuppressed = flags[f].nsuppressed + 1;
+  flags[f].nsuppressed = flags[f].nsuppressed + 1;
 }
 
 int
@@ -367,7 +372,6 @@ flagcodeHint (flagcode f)
 {
   llassert (f != INVALID_FLAG);
 
-  /*drl bee: ec*/
   if (mstring_isDefined (flags[f].hint))
     {
       return (cstring_fromChars (flags[f].hint));
@@ -400,7 +404,6 @@ flagkind identifyCategory (cstring s)
 
   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))
@@ -419,7 +422,6 @@ static /*@observer@*/ cstring categoryName (flagkind kind)
 
   for (i = 0; categories[i].kind != FK_NONE; i++)
     {
-        /*drl bee: mrUg*/
       if (categories[i].kind == kind)
        {
          return (cstring_fromChars (categories[i].name));
@@ -435,7 +437,6 @@ static int categoryIndex (flagkind kind)
 
   for (i = 0; categories[i].kind != FK_NONE; i++)
     {
-        /*drl bee: mRug*/
       if (categories[i].kind == kind)
        {
          return i;
@@ -450,7 +451,6 @@ void printCategory (flagkind kind)
   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),
@@ -473,7 +473,6 @@ listAllCategories (void)
 
   for (i = 0; categories[i].kind != FK_NONE; i++)
     {
-              /*drl bee: mRug*/
       flagkind kind = categories[i].kind ;
 
       if (categories[i].describe != NULL)
@@ -495,7 +494,6 @@ printAllFlags (bool desc, bool full)
 
       cstringSList_elements (fl, el)
        {
-         /*@i22@*/ /*find out why this is necessary*/
          cstring tmp;
          tmp = cstring_copy(el);
          llmsg (message ("%q\n\n", describeFlag (tmp)));
@@ -720,7 +718,6 @@ describeFlagCode (flagcode flag)
 
   context_resetAllFlags ();
   
-  /*drl bee: mRug*/
   f = flags[flag];
   ret = cstring_copy (cstring_fromChars (f.desc));
   
@@ -961,7 +958,6 @@ canonicalizeFlag (cstring s)
       } ;
   char *current;
   
-  /*drl bee: ia*/
   while ((current = transform[i]) != NULL)
     {
       if (cstring_containsLit (res, current))
@@ -1108,6 +1104,14 @@ flags_identifyFlagAux (cstring s, bool quiet)
        {
          res = FLG_ENUMINT;
        }
+      else if (cstring_equalLit (cflag, "intlong"))
+       {
+         res = FLG_LONGINT;
+       }
+      else if (cstring_equalLit (cflag, "intshort"))
+       {
+         res = FLG_SHORTINT;
+       }
       /*
       ** Backwards compatibility for our American friends...
       */
@@ -1241,6 +1245,7 @@ flags_identifyFlagAux (cstring s, bool quiet)
       else if (flags_isModeName (cflag))
        {
          res = MODENAME_FLAG;
+       }
       else
        {
          res = INVALID_FLAG;
@@ -1251,7 +1256,7 @@ flags_identifyFlagAux (cstring s, bool quiet)
   return res;
 }
 
-void setValueFlag (flagcode opt, cstring arg)
+void flags_setValueFlag (flagcode opt, cstring arg)
 {
   switch (opt)
     {
@@ -1260,6 +1265,7 @@ void setValueFlag (flagcode opt, cstring arg)
     case FLG_LIMIT:  
     case FLG_LINELEN:
     case FLG_INDENTSPACES:
+    case FLG_LOCINDENTSPACES:
     case FLG_BUGSLIMIT:
     case FLG_EXTERNALNAMELEN:
     case FLG_INTERNALNAMELEN:
@@ -1301,11 +1307,11 @@ void setValueFlag (flagcode opt, cstring arg)
          }
       }
       break;
-    BADDEFAULT;
+      BADDEFAULT;
     }
 }
 
-void setStringFlag (flagcode opt, /*@only@*/ cstring arg)
+void flags_setStringFlag (flagcode opt, /*@only@*/ cstring arg)
 {
   switch (opt)
     {
@@ -1472,7 +1478,6 @@ extern int flagcode_valueIndex (flagcode f)
     {
       /* static valueFlags must be defined */
       /*@-usedef@*/
-      /*drl bee: sta*/
       if (f == valueFlags[i]) /*@=usedef@*/
        {
          return i;
@@ -1516,7 +1521,6 @@ extern int flagcode_stringIndex (flagcode f)
 
   for (i = 0; i < NUMSTRINGFLAGS; i++)
     {
-              /*drl bee: sta*/
       /*@-usedef@*/ if (f == stringFlags[i]) /*@=usedef@*/
        {
          return i;
@@ -1548,22 +1552,118 @@ bool flagcode_isNamePrefixFlag (flagcode f)
       return FALSE;
     }
 }
-       
-bool flags_processFlags (bool inCommandLine, int argc, char **argv)
+
+static cstring findLarchPathFile (/*@temp@*/ cstring s)
 {
-  int i;
+  cstring pathName;
+  filestatus status;
+  
+  status = osd_getPath (context_getLarchPath (), s, &pathName);
+  
+  if (status == OSD_FILEFOUND)
+    {
+      return pathName;
+    }
+  else if (status == OSD_FILENOTFOUND)
+    {
+      showHerald ();
+      lldiagmsg        (message ("Cannot find file on LARCH_PATH: %s", s));
+    }
+  else if (status == OSD_PATHTOOLONG)
+    {
+      /* Directory and filename are too long.  Report error. */
+      llbuglit ("soure_getPath: Filename plus directory from search path too long");
+    }
+  else
+    {
+      BADBRANCH;
+    }
+
+  return cstring_undefined;
+}
 
+static void addLarchPathFile (fileIdList files, /*@temp@*/ cstring s)
+{
+  cstring pathName = findLarchPathFile (s);
+
+  if (cstring_isDefined (pathName))
+    {
+      if (fileTable_exists (context_fileTable (), pathName))
+       {
+         showHerald ();
+         lldiagmsg (message ("File listed multiple times: %s", pathName));
+         cstring_free (pathName);
+       }
+      else
+       {
+         fileIdList_add (files, fileTable_addFileOnly (context_fileTable (), pathName));
+       }
+    }
+}
+
+
+static void addFile (fileIdList files, /*@only@*/ cstring s)
+{
+  if (fileTable_exists (context_fileTable (), s))
+    {
+      showHerald ();
+      lldiagmsg (message ("File listed multiple times: %s", s));
+      cstring_free (s);
+    }
+  else
+    {
+      fileIdList_add (files, fileTable_addFileOnly (context_fileTable (), s));
+    }
+}
+
+static void addXHFile (fileIdList files, /*@temp@*/ cstring s)
+{
+  cstring pathName = findLarchPathFile (s);
+
+  if (cstring_isDefined (pathName))
+    {
+      if (fileTable_exists (context_fileTable (), pathName))
+       {
+         showHerald ();
+         lldiagmsg (message ("File listed multiple times: %s", s));
+       }
+      else
+       {
+         fileIdList_add (files, fileTable_addXHFile (context_fileTable (), pathName));
+       }
+    }
+
+  cstring_free (pathName);
+}
+
+void
+flags_processFlags (bool inCommandLine, 
+                   fileIdList xfiles,
+                   fileIdList cfiles,
+                   fileIdList lclfiles,
+                   fileIdList mtfiles,
+                   cstringList *passThroughArgs,
+                   int argc, char **argv)
+{
+  int i;
+  cstringSList fl = cstringSList_undefined;
+    
   for (i = 0; i < argc; i++)
     {
-      char *thisarg = argv[i];
+      char *thisarg;
+
+      llassert (argv != NULL);
+      thisarg = argv[i];
       
+      DPRINTF (("process thisarg [%d]: %s", i, thisarg));
+
       if (*thisarg == '-' || *thisarg == '+')
        {
          bool set = (*thisarg == '+');
          cstring flagname = cstring_fromChars (thisarg + 1); /* skip '-' or '+' */
          flagcode opt = flags_identifyFlag (flagname);
 
-         DPRINTF (("Flag: %s", flagcode_unparse (opt)));
+         DPRINTF (("Flag [%s]: %s", flagname, flagcode_unparse (opt)));
          
          if (flagcode_isInvalid (opt))
            {
@@ -1590,11 +1690,67 @@ bool flags_processFlags (bool inCommandLine, int argc, char **argv)
                                g_currentloc);
                }
            }
-         else if (flagcode_isModeNameFlag (opt))
+         else if (flagcode_isPassThrough (opt)) /* preprocessor flag: -D or -U */
+           { 
+             /*
+             ** Following space is optional, don't include the -
+             */
+             
+             *passThroughArgs = cstringList_add (*passThroughArgs, 
+                                                 cstring_fromCharsNew (thisarg + 1));
+           }
+         else if (opt == FLG_INCLUDEPATH || opt == FLG_SPECPATH)
+           {
+             if (mstring_length (thisarg) < 2) {
+               BADBRANCH;
+             } else {
+               if (mstring_equal (thisarg, "-I-")) {
+                 cppAddIncludeDir (cstring_fromChars (thisarg)); /* Need to handle this specially. */
+               } else {
+                 cstring dir = cstring_suffix (cstring_fromChars (thisarg), 2); /* skip over -I */
+                 
+                 DPRINTF (("Length of thisarg [%s] %d", thisarg, cstring_length (thisarg)));
+                 
+                 if (cstring_length (dir) == 0) {
+                   DPRINTF (("space after directory: "));
+                   if (++i < argc) {
+                     dir = cstring_fromChars (argv[i]);
+                   } else {
+                     voptgenerror
+                       (FLG_BADFLAG,
+                        message
+                        ("Flag %s must be followed by a directory name",
+                         flagcode_unparse (opt)),
+                        g_currentloc);
+                   }
+                 } 
+                 
+                 DPRINTF (("Got directory: [%s]", dir));
+                 
+                 switch (opt)
+                   {
+                   case FLG_INCLUDEPATH:
+                     cppAddIncludeDir (dir);
+                     /*@switchbreak@*/ break;
+                   case FLG_SPECPATH:
+                     /*@-mustfree@*/
+                     g_localSpecPath = cstring_toCharsSafe
+                       (message ("%s%h%s", 
+                                 cstring_fromChars (g_localSpecPath), 
+                                 PATH_SEPARATOR,
+                                 dir));
+                     /*@=mustfree@*/
+                     /*@switchbreak@*/ break;
+                     BADDEFAULT;
+                   }
+               }
+             }
+           }
+         else if (flagcode_isModeName (opt))
            {
              context_setMode (flagname);
            }
-         else if (flagcode_isMessageControlFlag (opt))
+         else if (inCommandLine && flagcode_isMessageControlFlag (opt))
            {
              /*
              ** Processed on first pass
@@ -1615,223 +1771,192 @@ bool flags_processFlags (bool inCommandLine, int argc, char **argv)
              
              if (flagcode_hasArgument (opt))
                {
-                 if (flagcode_isPassThrough (opt)) /* -D or -U */
-                   { 
-                     /*
-                     ** Following space is optional
-                     */
-
-                     flags_recordPassThroughArg (flagname);
-
-                     passThroughArgs = cstringSList_add 
-                       (passThroughArgs, cstring_fromChars (thisarg));
-                   }
-                 else if (flagcode_hasNumber (opt))
+                 if (flagcode_hasNumber (opt))
+                   {
+                     if (++i < argc)
                        {
-                         if (++i < argc)
-                           {
-                             setValueFlag (opt, cstring_fromChars (argv[i]));
-                           }
-                         else
-                           {
-                             llfatalerror 
-                               (message
-                                ("Flag %s must be followed by a number",
-                                 flagcode_unparse (opt)));
-                           }
-                       } 
-                     else if (flagcode_hasChar (opt))
+                         flags_setValueFlag (opt, cstring_fromCharsNew (argv[i]));
+                       }
+                     else
                        {
-                         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)
+                         voptgenerror
+                           (FLG_BADFLAG,
+                            message
+                            ("Flag %s must be followed by a number",
+                             flagcode_unparse (opt)),
+                            g_currentloc);
+                       }
+                   } 
+                 else if (flagcode_hasChar (opt))
+                   {
+                     if (++i < argc)
                        {
-                         cstring dir = cstring_suffix (cstring_fromChars (thisarg), 1); /* skip over I */
-                         
-                         switch (opt)
-                           {
-                           case FLG_INCLUDEPATH:
-                             cppAddIncludeDir (dir);
-                             /*@switchbreak@*/ break;
-                           case FLG_SPECPATH:
-                             /*@-mustfree@*/
-                             g_localSpecPath = cstring_toCharsSafe
-                               (message ("%s%h%s", 
-                                         cstring_fromChars (g_localSpecPath), 
-                                         PATH_SEPARATOR,
-                                         dir));
-                             /*@=mustfree@*/
-                             /*@switchbreak@*/ break;
-                             BADDEFAULT;
-                           }
+                         flags_setValueFlag (opt, cstring_fromCharsNew (argv[i]));
                        }
-                     else if (flagcode_hasString (opt)
-                              || opt == FLG_INIT || opt == FLG_OPTF)
+                     else
+                       {
+                         voptgenerror
+                           (FLG_BADFLAG,
+                            message
+                            ("Flag %s must be followed by a character",
+                             flagcode_unparse (opt)),
+                            g_currentloc);
+                       }
+                   } 
+                 else if (flagcode_hasString (opt)
+                          || opt == FLG_INIT || opt == FLG_OPTF)
+                   {
+                     if (++i < argc)
                        {
-                         if (++i < argc)
+                         /*drl 10/21/2002
+                           Changed this because arg can be freed when it's passed to
+                           lslinit_setInitFile and freeing argv[i] causes a seg fault
+                         */
+                         cstring arg =  cstring_fromCharsNew (argv[i]);
+                         
+                         if (opt == FLG_OPTF)
                            {
-                             cstring arg = cstring_fromChars (argv[i]);
-                             
-                             if (opt == FLG_OPTF)
+                             if (inCommandLine)
                                {
                                  ; /* -f already processed */
                                }
-                             else if (opt == FLG_INIT)
-                               {
-# ifndef NOLCL
-                                 initFile = inputStream_create 
-                                   (arg, 
-                                    cstring_makeLiteralTemp (LCLINIT_SUFFIX),
-                                    FALSE);
-# endif
-                                 break;
-                               }
                              else
                                {
-                                 DPRINTF (("String flag: %s / %s",
-                                           flagcode_unparse (opt), arg));
-                                 if (opt == FLG_MTSFILE)
-                                   {
-                                     /*
-                                     ** arg identifies mts files
-                                     */
-                                     cstring tmp =  message ("%s%s", arg, MTS_EXTENSION);
-                                     addLarchPathFile (mtfiles, tmp);
-                                     cstring_free (tmp);
-                                     tmp = message ("%s%s", arg, XH_EXTENSION);
-                                     addXHFile (xfiles, tmp);
-                                     cstring_free (tmp);
-                                   }
-                                 else
-                                   {
-                                     setStringFlag (opt, cstring_copy (arg));
-                                   }
+                                 (void) rcfiles_read (arg, passThroughArgs, TRUE);
                                }
                            }
+                         else if (opt == FLG_INIT)
+                           {
+                             lslinit_setInitFile (inputStream_create 
+                                                  (arg, 
+                                                   cstring_makeLiteralTemp (LCLINIT_SUFFIX),
+                                                   FALSE));
+                             break;
+                           }
                          else
                            {
-                             llfatalerror 
-                               (message
-                                ("Flag %s must be followed by a string",
-                                 flagcode_unparse (opt)));
+                             DPRINTF (("String flag: %s / %s",
+                                       flagcode_unparse (opt), arg));
+                             if (opt == FLG_MTSFILE)
+                               {
+                                 /*
+                                 ** arg identifies mts files
+                                 */
+                                 cstring tmp =  message ("%s%s", arg, MTS_EXTENSION);
+                                 addLarchPathFile (mtfiles, tmp);
+                                 cstring_free (tmp);
+                                 tmp = message ("%s%s", arg, XH_EXTENSION);
+                                 addXHFile (xfiles, tmp);
+                                 cstring_free (tmp);
+                               }
+                             else
+                               {
+                                 flags_setStringFlag (opt, cstring_copy (arg));
+                               }
                            }
                        }
                      else
                        {
-                         /* no argument */
+                         voptgenerror
+                           (FLG_BADFLAG,
+                            message
+                            ("Flag %s must be followed by a string",
+                             flagcode_unparse (opt)),
+                            g_currentloc);
                        }
                    }
+                 else
+                   {
+                     /* no argument */
+                   }
                }
            }
-         else /* its a filename */
-           {
-             DPRINTF (("Adding filename: %s", thisarg));
-             fl = cstringSList_add (fl, cstring_fromChars (thisarg));
-           }
+       }
+      else /* its a filename */
+       {
+         DPRINTF (("Adding filename: %s", thisarg));
+         fl = cstringSList_add (fl, cstring_fromChars (thisarg));
        }
     }
-}
-
-void flags_processHelp (int argc, char **argv)
-{
   
-
-      if (showhelp)
+  /*
+  ** create lists of C and LCL files
+  */
+  
+  if (inCommandLine)
+    {
+      cstringSList_elements (fl, current)
        {
-         if (allhelp)
-           {
-             showHerald ();
-           }
-         
-         allhelp = FALSE;
+         cstring ext = fileLib_getExtension (current);
          
-         if (*thisarg == '-' || *thisarg == '+')
+         if (cstring_isUndefined (ext))
            {
-             thisarg++;        /* skip '-' */
-           }
-         if (mstring_equal (thisarg, "modes"))
-           {
-             llmsg (describeModes ());
-           }
-         else if (mstring_equal (thisarg, "vars")  || mstring_equal (thisarg, "env"))
-           {
-             describeVars ();
-           }
-         else if (mstring_equal (thisarg, "annotations"))
-           {
-             printAnnotations ();
-           }
-         else if (mstring_equal (thisarg, "parseerrors"))
-           {
-             printParseErrors ();
+             /* no extension --- both C and LCL with default extensions */
+             
+             addFile (cfiles, message ("%s%s", current, C_EXTENSION));
+             addFile (lclfiles, message ("%s%s", current, LCL_EXTENSION));
            }
-         else if (mstring_equal (thisarg, "comments"))
+         else if (cstring_equal (ext, XH_EXTENSION))
            {
-             printComments ();
+             addXHFile (xfiles, current);
            }
-         else if (mstring_equal (thisarg, "prefixcodes"))
+         else if (cstring_equal (ext, PP_EXTENSION))
            {
-             describePrefixCodes ();
+             if (!context_getFlag (FLG_NOPP))
+               {
+                 voptgenerror 
+                   (FLG_FILEEXTENSIONS,
+                    message ("File extension %s used without +nopp flag (will be processed as C source code): %s", 
+                             ext, current),
+                    g_currentloc);
+               }
+             
+             addFile (cfiles, cstring_copy (current));
            }
-         else if (mstring_equal (thisarg, "references") 
-                  || mstring_equal (thisarg, "refs"))
+         else if (cstring_equal (ext, LCL_EXTENSION)) 
            {
-             printReferences ();
+             addFile (lclfiles, cstring_copy (current));
            }
-         else if (mstring_equal (thisarg, "mail"))
+         else if (fileLib_isCExtension (ext))
            {
-             printMail ();
+             addFile (cfiles, cstring_copy (current));
            }
-         else if (mstring_equal (thisarg, "maintainer")
-                  || mstring_equal (thisarg, "version"))
+         else if (cstring_equal (ext, MTS_EXTENSION))
            {
-             printMaintainer ();
+             addLarchPathFile (mtfiles, current);
            }
-         else if (mstring_equal (thisarg, "flags"))
+         else 
            {
-             if (i + 1 < argc)
-               {
-                 char *next = argv[i + 1];
-                 
-                 if (specialFlagsHelp (next))
-                   {
-                     i++;
-                   }
-                 else
-                   {
-                     flagkind k = identifyCategory (cstring_fromChars (next));
-                     
-                     if (k != FK_NONE)
-                       {
-                         printCategory (k);
-                         i++;
-                       }
-                   }
-               }
-             else
-               {
-                 printFlags ();
-               }
-           }
-         else
-           {
-             cstring s = describeFlag (cstring_fromChars (thisarg));
+             voptgenerror 
+               (FLG_FILEEXTENSIONS,
+                message ("Unrecognized file extension: %s (assuming %s is C source code)", 
+                         current, ext),
+                g_currentloc);
              
-             if (cstring_isDefined (s))
-               {
-                 llmsg (s);
-               }
+             addFile (cfiles, cstring_copy (current));
            }
-       }
-      else
+       } end_cstringSList_elements;
+    }
+  else
+    {
+      if (cstringSList_size (fl) != 0)
        {
+         /* Cannot list files in .splintrc files */
+         voptgenerror (FLG_BADFLAG, 
+                       message ("Cannot list files in .splintrc files: %s (probable missing + or -)",
+                                cstringSList_unparse (fl)),
+                       g_currentloc);
+       }
+    }
+
+  cstringSList_free (fl); /* evans 2002-07-12: why wasn't this reported!?? */
+}
+
+int flagcode_priority (/*@unused@*/ flagcode code)
+{
+  /*
+  ** For now, we do a really simple prioritization: all are 1
+  */
+
+  return 1;
+}
This page took 0.063047 seconds and 4 git commands to generate.