]> andersk Git - splint.git/commitdiff
Removed obsolete OS/2 test makefiles.
authorherbert <herbert>
Thu, 11 Sep 2003 11:54:11 +0000 (11:54 +0000)
committerherbert <herbert>
Thu, 11 Sep 2003 11:54:11 +0000 (11:54 +0000)
Added snprintf.c for pre-C99 compilers, updated OS/2 specific
  test Makefiles for where necessary (which is not in all test
  subdirs).
Changed a number of `#ifdef WIN32' directives to `#if defined
  (WIN32) || defined (OS)', changed the default system dir for
  OS/2 from `/usr/' to `/os2/'.

18 files changed:
lib/Makefile.os2
os2/Makefile.os2
os2/README.OS2
src/Headers/basic.h
src/Headers/bool.h
src/Headers/constants.h
src/Headers/forwardTypes.h
src/Makefile.os2
src/context.c
src/llmain.c
src/osd.c
src/snprintf.c [new file with mode: 0644]
test/Makefile.os2
test/tainted/Makefile.os2 [new file with mode: 0644]
test/tests2.2/Makefile-tests2.2.os2 [deleted file]
test/tests2.2/Makefile.os2 [new file with mode: 0644]
test/tests2.4/Makefile-tests2.4.os2 [deleted file]
test/tests2.4/Makefile.os2 [new file with mode: 0644]

index 985b66f60d43bbba8e70db5a0903caa2503a9327..af6c77f107432e2bdf497b6bd85683e4a96c998a 100644 (file)
@@ -6,13 +6,38 @@
 \r
 include ../os2/make.vars\r
 \r
-DATAFILES = standard.h standard.lcd standardstrict.lcd posix.h posix.lcd \\r
-       posixstrict.lcd unix.h unix.lcd unixstrict.lcd \r
-SPLINT = ../bin/splint$(EXEEXT)\r
+top_builddir = ..\r
 \r
-all: $(DATAFILES)\r
+UnixHeaders = stdio.h stdlib.h\r
 \r
-clean: $(RM) -f $(DATAFILES)\r
+splintlib_DATA = \\r
+  standard.h standard.lcd standardstrict.lcd posix.h posix.lcd posixstrict.lcd\\r
+  unix.h unix.lcd unixstrict.lcd CTrait.syms CTraitGen.lcl bool.h \\r
+  file.mts file.xh filerw.mts filerw.xh \\r
+  lclinit.lci linux.h lslinit.lsi tainted.mts tainted.xh \\r
+  stdio.h stdlib.h $(UnixHeaders)\r
+\r
+EXTRA_DIST = $(splintlib_DATA)\r
+\r
+CLEANFILES = posix.lcd standard.lcd unix.lcd \\r
+             posixstrict.lcd  standardstrict.lcd  unixstrict.lcd\r
+\r
+\r
+SPLINT = $(top_builddir)/src/splint$(EXEEXT)\r
+\r
+subdir = lib\r
+CONFIG_HEADER = $(top_builddir)/config.h\r
+DATA = $(splintlib_DATA)\r
+\r
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)\r
+\r
+all: $(DATA)\r
+\r
+$(SPLINT):\r
+       cd $(top_builddir)/src; $(MAKE) -f Makefile.os2\r
+\r
+clean: \r
+       $(RM) -f $(CLEANFILES)\r
 \r
 standard.lcd: standard.h $(SPLINT)\r
        -$(SPLINT) -nof -nolib +impconj standard.h -dump standard\r
index bad7920da351d03074980b0fa2193c1f195c55ea..3c1252a11ad62946ea6ff71da8c68997b41312f9 100644 (file)
@@ -79,23 +79,11 @@ FLEX      = flex
 YFLAGS    = -v -t -d\r
 LFLAGS    =\r
 \r
-###\r
-### file-related commands (I use emx GNUish utilities)\r
-###\r
-CP = cp\r
-MV = mv\r
-CAT = cat\r
-RM = rm\r
-INSTALL = cp\r
-INSTALLFLAGS =           \r
-ECHO = echo\r
-SED = sed\r
-\r
 ###\r
 ### Set automatically: splint version and date etc.\r
 ###\r
 \r
-LCL_VERSION := $(shell grep "^VERSION" ../configure | $(SED) "s/VERSION *= *//")\r
+LCL_VERSION := $(shell grep "^VERSION" ../configure | sed "s/VERSION *= *//")\r
 LCL_DATE := $(shell date +"%d %b %Y")\r
 BUILD_DATE := $(shell date +"%c")\r
 ME := $(shell whoami)\r
@@ -106,6 +94,22 @@ LCL_PARSE_VERSION = Splint $(LCL_VERSION)
 SPLINT_VERSION = $(LCL_PARSE_VERSION) -- $(LCL_DATE)\r
 \r
 \r
+###\r
+### Then, run:\r
+###\r
+###    make\r
+###\r
+###\r
+\r
+### file-related commands (I use emx GNUish utilities)\r
+CP = cp\r
+MV = mv\r
+CAT = cat\r
+RM = rm\r
+INSTALL = cp\r
+INSTALLFLAGS =           \r
+ECHO = echo\r
+\r
 ###\r
 ### compiler --- gcc is recommended, but splint has been compiled\r
 ###              without changes using cc on several platforms.\r
@@ -178,10 +182,9 @@ make.vars:
        echo "INSTALL = $(INSTALL)" >>make.vars\r
        echo "INSTALLFLAGS = $(INSTALLFLAGS)" >>make.vars\r
        echo "ECHO = $(ECHO)" >>make.vars\r
-       echo "SED = $(SED)" >>make.vars\r
 \r
 ../config.h: os2config.h.in\r
-       $(SED) -e 's|@DEFAULT_LARCHPATH@|$(DEFAULT_LARCHPATH)|' \\r
+       sed -e 's|@DEFAULT_LARCHPATH@|$(DEFAULT_LARCHPATH)|' \\r
        -e 's|@DEFAULT_LCLIMPORTDIR@|$(DEFAULT_LCLIMPORTDIR)|' \\r
        -e 's|@GCC_INCLUDE_DIR@|$(GCC_INCLUDE_DIR)|' \\r
        -e 's|@GCC_INCLUDE_DIR2@|$(GCC_INCLUDE_DIR2)|' \\r
@@ -194,9 +197,9 @@ make.vars:
        os2config.h.in >../config.h\r
 \r
 setenv.cmd: setenv.cmd.in\r
-       $(SED) -e 's|@LCL_VERSION@|$(LCL_VERSION)|' \\r
+       sed -e 's|@LCL_VERSION@|$(LCL_VERSION)|' \\r
        -e 's|@BASEDIR@|$(BASEDIR)|' \\r
-       setenv.cmd.in | tr '/' '\\\\' >setenv.cmd\r
+       setenv.cmd.in | tr '/' '\\\\\\' >setenv.cmd\r
 \r
 config: make.vars ../config.h setenv.cmd\r
 \r
index 019bfaf12aebbb953d200870b83766836c1a2e1f..e6279d428d9843723b6f8492d3d046afde50f40c 100644 (file)
@@ -1,5 +1,5 @@
-splint 3.0.0.16 for OS/2\r
-========================\r
+splint 3.1.1 for OS/2\r
+=====================\r
 \r
 This file is originally part of the binary distribution of splint for OS/2.\r
 \r
@@ -94,6 +94,10 @@ History:
 The following things specific to the OS/2 version of splint have changed / \r
 fixed since the first official release:\r
 \r
+version 3.1.1\r
+- Set the default system directory to `/os2/'.\r
+- Bugfixes.\r
+\r
 version 3.0.0.16:\r
 - Finally fully united the OS/2 port with the main source tree.\r
 - Bugfixes.\r
index 5fd921a1cad34acb1e832108f64761418f357f93..1d144042d3388ef1c7bcfbb956358ed34aeea3e2 100644 (file)
 # include <stdlib.h>
 # include <stdio.h>
 
-# ifndef WIN32
+# if !defined (WIN32) &&  !(defined (OS2) && defined (__IBMC__))
 /* Microsoft VC++ still doesn't support ISO C99... */
 # include <stdbool.h>
 # endif
 
+#if defined (OS2) && defined (__IBMC__)
+extern int snprintf (char *str, size_t count, const char *fmt, ...);
+#endif
+
 # include <string.h>
 # include <ctype.h>
 # include <float.h>
index d0e0be551ceafba39fe673bb0a1595b079b0a16c..0989f14d9e390b19ccdb349a820a201e55ccfd6c 100644 (file)
@@ -7,7 +7,7 @@
 
 # define BOOL_H
 
-# ifdef WIN32
+# if defined (WIN32) || defined (OS2) && defined (__IBMC__)
 # ifndef FALSE
 /*@constant bool FALSE=false@*/
 # define FALSE 0
index 9c0ef2af648484bc4218a83ad37a64523240b0d0..83867fb4bf6bce50aa4fe7383b49537d82af9c1e 100644 (file)
 # define PPMRCODE "@@MR@@"  
 
 /*@constant observer char *DEFAULT_SYSTEMDIR; @*/
+# ifdef OS2
+# define DEFAULT_SYSTEMDIR "/os2/"
+# else                            
 # define DEFAULT_SYSTEMDIR "/usr/"
+# endif
 
 /*@constant char DEFAULT_COMMENTCHAR; @*/
 # define DEFAULT_COMMENTCHAR '@'
index 36a417bed7e83dde95a7c4a84478902c12e928b3..091bea791fbdd260f6a7d7d791d084029a04f08d 100644 (file)
@@ -3,7 +3,7 @@
 
 # include "lclForwardTypes.h"
 
-# ifdef WIN32
+# if defined (WIN32) || defined (OS2) && defined (__IBMC__)
 /* Microsoft doesn't support ISO C99 yet */
 /*@-namechecks@*/
 typedef int bool; 
index 8fe9af88f5efafa99435eca4eb44b43db73d416f..206b37bc4a2b05373c740d80bcba6019250190c0 100644 (file)
@@ -42,24 +42,24 @@ LISTSRC = clauseStack.c filelocStack.c \
 \r
 CPPSRC = cppmain.c cpplib.c cppexp.c cpphash.c cpperror.c\r
 \r
-CSRC = uentry.c cprim.c macrocache.c qual.c qtype.c stateClause.c \\r
+CSRC = context.c uentry.c cprim.c macrocache.c qual.c qtype.c stateClause.c \\r
        stateClauseList.c ctype.c cvar.c clabstract.c idDecl.c clause.c \\r
        globalsClause.c modifiesClause.c warnClause.c functionClause.c \\r
        functionClauseList.c metaStateConstraint.c metaStateConstraintList.c \\r
        metaStateExpression.c metaStateSpecifier.c functionConstraint.c \\r
-       pointers.c\r
+       pointers.c cscannerHelp.c       \r
 \r
 SPLINTSRC = exprNode.c exprChecks.c llmain.c help.c rcfiles.c\r
 CHECKSRC = structNames.c transferChecks.c varKinds.c nameChecks.c\r
 \r
-GLOBSRC = context.c globals.c flags.c general.c osd.c reader.c mtreader.c\r
+GLOBSRC = globals.c flags.c general.c osd.c reader.c mtreader.c\r
 \r
 GRAMSRC = cgrammar.c cscanner.c mtscanner.c mtgrammar.c llgrammar.c signature.c\r
 \r
-OVERFLOWCHSRC = constraintGeneration.c constraintTerm.c \\r
+OVERFLOWCHSRC = constraintList.c constraintResolve.c \\r
+                constraintGeneration.c constraintTerm.c \\r
                 constraintExprData.c constraintExpr.c constraint.c \\r
-                constraintList.c constraintResolve.c \\r
-                constraintOutput.c loopHeuristics.c \r
+                loopHeuristics.c \r
 \r
 GENERALSRC = exprData.c cstring.c fileloc.c message.c inputStream.c \\r
              fileTable.c cstringTable.c valueTable.c stateValue.c \\r
@@ -99,113 +99,33 @@ LCLLISTSRC = initDeclNodeList.c sortList.c declaratorInvNodeList.c \
 \r
 IFILES =  ctbase.i  cttable.i  exprDataQuite.i\r
 \r
-\r
 #Files that are used on systems that do not have bison or yacc\r
 DER_BISON_FILES = signature.c.der  cgrammar.c.der  mtgrammar.c.der \\r
                   llgrammar.c.der \r
 DER_FILES = $(DER_BISON_FILES)\r
 \r
 \r
-COMMONSRC = $(OVERFLOWCHSRC) $(CPPSRC) $(CSRC) $(CHECKSRC) $(GENERALSRC) \\r
-            $(GLOBSRC) $(IFACESRC) $(LISTSRC) $(SETSRC) $(METASTATESRC)\r
+COMMONSRC =  $(CPPSRC) $(CSRC) $(CHECKSRC) $(GENERALSRC) \\r
+            $(GLOBSRC) $(LISTSRC) $(SETSRC) $(METASTATESRC)\r
+\r
+LCLSRC = $(LCLSETSRC) $(LCLLISTSRC) $(LSLSRC) $(COMMONSRC) $(LCLONLYSRC) \r
 \r
-ALLSRC = $(GRAMSRC) $(COMMONSRC) $(SPLINTSRC) $(DER_FILES) \r
+ALLSRC = $(GRAMSRC) $(SPLINTSRC) $(OVERFLOWCHSRC) $(LCLSRC) snprintf.c\r
 \r
 #files to run Splint on\r
-LINTSRC = $(COMMONSRC) $(SPLINTSRC) cscanner.c cgrammar.c\r
+LINTSRC = $(COMMONSRC) $(SPLINTSRC)\r
 \r
-LCLSRC = $(LCLSETSRC) $(LCLLISTSRC) $(LSLSRC) $(CMNSRC) $(LCLONLYSRC) \r
 lcl_SOURCES = $(LCLSRC)\r
 CONFIG_HEADER = $(top_builddir)/config.h\r
 \r
 splint_SOURCES = $(ALLSRC)\r
-\r
-lcl_OBJECTS = lsymbolSet$O sigNodeSet$O \\r
-       lslOpSet$O sortSet$O initDeclNodeList$O \\r
-       sortList$O declaratorInvNodeList$O \\r
-       interfaceNodeList$O sortSetList$O \\r
-       declaratorNodeList$O letDeclNodeList$O \\r
-       stDeclNodeList$O storeRefNodeList$O \\r
-       lslOpList$O lsymbolList$O \\r
-       termNodeList$O ltokenList$O \\r
-       traitRefNodeList$O pairNodeList$O \\r
-       typeNameNodeList$O fcnNodeList$O \\r
-       paramNodeList$O programNodeList$O \\r
-       varDeclarationNodeList$O varNodeList$O \\r
-       quantifierNodeList$O replaceNodeList$O \\r
-       importNodeList$O tokentable$O scan$O \\r
-       scanline$O lslparse$O lh$O \\r
-       checking$O lclctypes$O imports$O \\r
-       lslinit$O syntable$O \\r
-       usymtab_interface$O abstract$O ltoken$O \\r
-       lclscanline$O lclsyntable$O \\r
-       lcltokentable$O sort$O symtable$O \\r
-       lclinit$O shift$O lclscan$O \\r
-       lsymbol$O mapping$O\r
-\r
-splint_OBJECTS = cgrammar$O cscanner$O \\r
-       mtscanner$O mtgrammar$O llgrammar$O \\r
-       signature$O cppmain$O cpplib$O \\r
-       cppexp$O cpphash$O cpperror$O \\r
-       context$O uentry$O cprim$O \\r
-       macrocache$O qual$O qtype$O \\r
-       stateClause$O stateClauseList$O ctype$O \\r
-       cvar$O clabstract$O idDecl$O \\r
-       clause$O globalsClause$O \\r
-       modifiesClause$O warnClause$O \\r
-       functionClause$O functionClauseList$O \\r
-       metaStateConstraint$O metaStateConstraintList$O \\r
-       metaStateExpression$O metaStateSpecifier$O \\r
-       functionConstraint$O pointers$O \\r
-       structNames$O transferChecks$O \\r
-       varKinds$O nameChecks$O exprData$O \\r
-       cstring$O fileloc$O message$O \\r
-       inputStream$O fileTable$O \\r
-       cstringTable$O valueTable$O \\r
-       stateValue$O llerror$O messageLog$O \\r
-       flagMarker$O aliasTable$O ynm$O \\r
-       sRefTable$O genericTable$O ekind$O \\r
-       usymtab$O multiVal$O lltok$O \\r
-       sRef$O lcllib$O randomNumbers$O \\r
-       fileLib$O globals$O \\r
-       flags$O general$O osd$O \\r
-       reader$O mtreader$O clauseStack$O \\r
-       filelocStack$O cstringList$O \\r
-       cstringSList$O sRefSetList$O \\r
-       ctypeList$O enumNameList$O \\r
-       enumNameSList$O exprNodeList$O \\r
-       exprNodeSList$O uentryList$O \\r
-       fileIdList$O filelocList$O qualList$O \\r
-       sRefList$O flagMarkerList$O \\r
-       idDeclList$O flagSpec$O globSet$O \\r
-       intSet$O typeIdSet$O guardSet$O \\r
-       usymIdSet$O sRefSet$O stateInfo$O \\r
-       stateCombinationTable$O metaStateTable$O \\r
-       metaStateInfo$O annotationTable$O \\r
-       annotationInfo$O mttok$O \\r
-       mtDeclarationNode$O mtDeclarationPieces$O \\r
-       mtDeclarationPiece$O mtContextNode$O \\r
-       mtValuesNode$O mtDefaultsNode$O \\r
-       mtAnnotationsNode$O mtMergeNode$O \\r
-       mtAnnotationList$O mtAnnotationDecl$O \\r
-       mtTransferClauseList$O mtTransferClause$O \\r
-       mtTransferAction$O mtLoseReferenceList$O \\r
-       mtLoseReference$O mtDefaultsDeclList$O \\r
-       mtDefaultsDecl$O mtMergeItem$O \\r
-       mtMergeClause$O mtMergeClauseList$O \\r
-       exprNode$O exprChecks$O llmain$O \\r
-       help$O rcfiles$O constraintGeneration$O \\r
-       constraintTerm$O constraintExprData$O \\r
-       constraintExpr$O constraint$O \\r
-       constraintList$O constraintResolve$O \\r
-       constraintOutput$O loopHeuristics$O snprintf$O\r
+splint_OBJECTS = $(splint_SOURCES:.c=$O)\r
 \r
 # Keep it fake\r
 .PHONY: lcl$(EXEEXT)\r
 \r
 DEFS = -DHAVE_CONFIG_H\r
 DEFAULT_INCLUDES =  -I. -I..\r
-LDADD = $(lcl_OBJECTS) \r
 \r
 ## Sources that need to be built\r
 BUILT_SOURCES = Headers/signature_gen.h Headers/cgrammar_tokens.h \\r
@@ -239,14 +159,10 @@ else
        @echo "Expect 141 shift/reduce conflicts and 111 reduce/reduce conflicts."\r
        @echo "(see cgrammar.y for explanation)"\r
        $(BISON) $(YFLAGS) cgrammar.y\r
-       $(CAT) bison.head cgrammar.tab.c bison.reset | $(SED) \\r
-         -e 's/YYSTYPE/cgrammar_YYSTYPE/g' -e 's/lsllex/cgrammar_lsllex/' \\r
-         >cgrammar.c\r
+       $(CAT) bison.head cgrammar.tab.c bison.reset >cgrammar.c\r
        $(CP) cgrammar.c cgrammar.c.der\r
        -$(MV) Headers/cgrammar_tokens.h Headers/cgrammar_tokens.bak\r
-       $(CAT) bison.head cgrammar.tab.h bison.reset | $(SED) \\r
-         -e 's/YYSTYPE/cgrammar_YYSTYPE/g' -e 's/lsllex/cgrammar_lsllex/g' \\r
-         >Headers/cgrammar_tokens.h\r
+       $(CAT) bison.head cgrammar.tab.h bison.reset >Headers/cgrammar_tokens.h\r
        $(RM) cgrammar.tab.c cgrammar.tab.h\r
 endif\r
 \r
@@ -285,31 +201,31 @@ endif
 \r
 cscanner.c: cscanner.l\r
        $(FLEX) $(LFLAGS) cscanner.l \r
-       $(CAT) flex.head lexyy.c flex.reset | $(SED) \\r
-         -e 's/YYSTYPE/cgrammar_YYSTYPE/g' -e 's/lsllex/cgrammar_lsllex/g' \\r
-         >cscanner.c\r
+       $(CAT) flex.head lexyy.c flex.reset > cscanner.c\r
 \r
 Headers/flag_codes.gen: flags.def\r
        grep "FLG_" flags.def > Headers/flag_codes.gen\r
+       $(MAKE)\r
+       cd ../lib; $(MAKE)\r
 \r
 $(binDir)/splint$(EXEEXT):  splint$(EXEEXT)\r
        -$(RM) -f $(binDir)/splint$(EXEEXT)\r
        $(CP) splint$(EXEEXT)  $(binDir)/splint$(EXEEXT)\r
 \r
-up: clean\r
-       rm -f cgrammar.c llgrammar.c mtgrammar.c signature.c cscanner.c\r
-\r
-\r
 clean: \r
        -rm -f $(splint_OBJECTS) core *.core *~ \r
-\r
+       -rm -f cgrammar.c llgrammar.c mtgrammar.c signature.c cscanner.c\r
 \r
 CLEANFILES = splint$(EXEEXT)  $(binDir)/splint$(EXEEXT)\r
 \r
+snprintf$O: snprintf.c\r
+       $(CC) $(CFLAGS) $(DEFS) $(DEFAULT_INCLUDES) \\r
+         -DHAVE_STRING_H -DHAVE_STDLIB_H -DHAVE_CTYPE_H $(CPPFLAGS) -c $<\r
+\r
 %$O: %.c\r
        $(CC) $(CFLAGS) $(DEFS) $(DEFAULT_INCLUDES) $(CPPFLAGS) -c $<\r
 \r
-splint$(EXEEXT) : $(splint_OBJECTS) $(lcl_OBJECTS)\r
+splint$(EXEEXT) : $(splint_OBJECTS) \r
        $(CC) $(OFLAG)$@ $^ $(LDFLAGS)\r
 \r
 list:\r
index 6493cc1b5b8a75c190458eb4f8a00cfa9a1bb23f..0f1906b921bdf4f761bf2dbe48ac5e86f4f5b28e 100644 (file)
@@ -935,7 +935,7 @@ context_resetAllFlags (void)
   ** On by default for Win32, but not Unix
   */
 
-# ifdef WIN32
+# if defined (WIN32) || defined (OS2)
   gc.flags[FLG_PARENFILEFORMAT] = TRUE;
   gc.flags[FLG_CASEINSENSITIVEFILENAMES] = TRUE;
 # endif
index 7b8ad6f3638d228c964fba32be871b1cef22b5fe..343441f64c0148d009b25581b2457477aa6b49a1 100644 (file)
@@ -823,7 +823,7 @@ int main (int argc, char *argv[])
   */
 
   {
-# ifdef WIN32
+# if defined (WIN32) || defined (OS2) && defined (__IBMC__)
     int nfiles = /*@-unrecog@*/ _fcloseall (); /*@=unrecog@*/
 
     if (nfiles != 0) 
@@ -1258,7 +1258,7 @@ cleanupFiles (void)
     }
   else
     {
-# ifdef WIN32
+# if defined (WIN32) || defined (OS2) && defined (__IBMC__)
       int nfiles = /*@-unrecog@*/ _fcloseall (); /*@=unrecog@*/
       
       if (nfiles != 0) 
@@ -1281,7 +1281,7 @@ llexit (int status)
 {
   DPRINTF (("llexit: %d", status));
 
-# ifdef WIN32
+# if defined (WIN32) || defined (OS2) && defined (__IBMC__)
   if (status == LLFAILURE) 
     {
       _fcloseall ();
index 653a0ee8526867f7e74ae4181892fbdb78cc7263..00149429fa998191e8d753b3bc9027b186eee730 100644 (file)
--- a/src/osd.c
+++ b/src/osd.c
@@ -452,7 +452,7 @@ nextdir (d_char *current_dir, d_char *dir, size_t *len)
 # endif
 }
 
-# ifdef WIN32
+# if defined (WIN32) || defined (OS2) && defined (__IBMC__)
 extern /*@external@*/ int _flushall (void) /*@modifies fileSystem@*/ ;
 # endif
 
@@ -463,7 +463,7 @@ int osd_system (cstring cmd)
 {
   int res;
     /* system ("printenv"); */
-# ifdef WIN32
+# if defined (WIN32) || defined (OS2) && defined (__IBMC__)
   (void) _flushall (); 
 # endif
 
diff --git a/src/snprintf.c b/src/snprintf.c
new file mode 100644 (file)
index 0000000..032e7e3
--- /dev/null
@@ -0,0 +1,940 @@
+#if defined (OS2) && defined (__IBMC__)\r
+/*\r
+ * Copyright Patrick Powell 1995\r
+ * This code is based on code written by Patrick Powell (papowell@astart.com)\r
+ * It may be used for any purpose as long as this notice remains intact\r
+ * on all source code distributions\r
+ */\r
+\r
+/**************************************************************\r
+ * Original:\r
+ * Patrick Powell Tue Apr 11 09:48:21 PDT 1995\r
+ * A bombproof version of doprnt (dopr) included.\r
+ * Sigh.  This sort of thing is always nasty do deal with.  Note that\r
+ * the version here does not include floating point...\r
+ *\r
+ * snprintf() is used instead of sprintf() as it does limit checks\r
+ * for string length.  This covers a nasty loophole.\r
+ *\r
+ * The other functions are there to prevent NULL pointers from\r
+ * causing nast effects.\r
+ *\r
+ * More Recently:\r
+ *  Brandon Long <blong@fiction.net> 9/15/96 for mutt 0.43\r
+ *  This was ugly.  It is still ugly.  I opted out of floating point\r
+ *  numbers, but the formatter understands just about everything\r
+ *  from the normal C string format, at least as far as I can tell from\r
+ *  the Solaris 2.5 printf(3S) man page.\r
+ *\r
+ *  Brandon Long <blong@fiction.net> 10/22/97 for mutt 0.87.1\r
+ *    Ok, added some minimal floating point support, which means this\r
+ *    probably requires libm on most operating systems.  Don't yet\r
+ *    support the exponent (e,E) and sigfig (g,G).  Also, fmtint()\r
+ *    was pretty badly broken, it just wasn't being exercised in ways\r
+ *    which showed it, so that's been fixed.  Also, formated the code\r
+ *    to mutt conventions, and removed dead code left over from the\r
+ *    original.  Also, there is now a builtin-test, just compile with:\r
+ *           gcc -DTEST_SNPRINTF -o snprintf snprintf.c -lm\r
+ *    and run snprintf for results.\r
+ *\r
+ *  Thomas Roessler <roessler@guug.de> 01/27/98 for mutt 0.89i\r
+ *    The PGP code was using unsigned hexadecimal formats.\r
+ *    Unfortunately, unsigned formats simply didn't work.\r
+ *\r
+ *  Michael Elkins <me@cs.hmc.edu> 03/05/98 for mutt 0.90.8\r
+ *    The original code assumed that both snprintf() and vsnprintf() were\r
+ *    missing.  Some systems only have snprintf() but not vsnprintf(), so\r
+ *    the code is now broken down under HAVE_SNPRINTF and HAVE_VSNPRINTF.\r
+ *\r
+ *  Andrew Tridgell (tridge@samba.org) Oct 1998\r
+ *    fixed handling of %.0f\r
+ *    added test for HAVE_LONG_DOUBLE\r
+ *\r
+ * tridge@samba.org, idra@samba.org, April 2001\r
+ *    got rid of fcvt code (twas buggy and made testing harder)\r
+ *    added C99 semantics\r
+ *\r
+ **************************************************************/\r
+\r
+#ifndef NO_CONFIG_H /* for some tests */\r
+#include "config.h"\r
+#endif\r
+\r
+#ifdef HAVE_STRING_H\r
+#include <string.h>\r
+#endif\r
+\r
+#ifdef HAVE_STRINGS_H\r
+#include <strings.h>\r
+#endif\r
+#ifdef HAVE_CTYPE_H\r
+#include <ctype.h>\r
+#endif\r
+#include <sys/types.h>\r
+#include <stdarg.h>\r
+#ifdef HAVE_STDLIB_H\r
+#include <stdlib.h>\r
+#endif\r
+\r
+#if defined(HAVE_SNPRINTF) && defined(HAVE_VSNPRINTF) && defined(HAVE_C99_VSNPRINTF)\r
+/* only include stdio.h if we are not re-defining snprintf or vsnprintf */\r
+#include <stdio.h>\r
+/* make the compiler happy with an empty file */\r
+void dummy_snprintf(void) {}\r
+#else\r
+\r
+#ifdef HAVE_LONG_DOUBLE\r
+#define LDOUBLE long double\r
+#else\r
+#define LDOUBLE double\r
+#endif\r
+\r
+#ifdef HAVE_LONG_LONG\r
+#define LLONG long long\r
+#else\r
+#define LLONG long\r
+#endif\r
+\r
+static size_t dopr(char *buffer, size_t maxlen, const char *format,\r
+                   va_list args);\r
+static void fmtstr(char *buffer, size_t *currlen, size_t maxlen,\r
+                   char *value, int flags, int min, int max);\r
+static void fmtint(char *buffer, size_t *currlen, size_t maxlen,\r
+                   long value, int base, int min, int max, int flags);\r
+static void fmtfp(char *buffer, size_t *currlen, size_t maxlen,\r
+                  LDOUBLE fvalue, int min, int max, int flags);\r
+static void dopr_outch(char *buffer, size_t *currlen, size_t maxlen, char c);\r
+\r
+/*\r
+ * dopr(): poor man's version of doprintf\r
+ */\r
+\r
+/* format read states */\r
+#define DP_S_DEFAULT 0\r
+#define DP_S_FLAGS   1\r
+#define DP_S_MIN     2\r
+#define DP_S_DOT     3\r
+#define DP_S_MAX     4\r
+#define DP_S_MOD     5\r
+#define DP_S_CONV    6\r
+#define DP_S_DONE    7\r
+\r
+/* format flags - Bits */\r
+#define DP_F_MINUS      (1 << 0)\r
+#define DP_F_PLUS       (1 << 1)\r
+#define DP_F_SPACE      (1 << 2)\r
+#define DP_F_NUM        (1 << 3)\r
+#define DP_F_ZERO       (1 << 4)\r
+#define DP_F_UP         (1 << 5)\r
+#define DP_F_UNSIGNED   (1 << 6)\r
+\r
+/* Conversion Flags */\r
+#define DP_C_SHORT   1\r
+#define DP_C_LONG    2\r
+#define DP_C_LDOUBLE 3\r
+#define DP_C_LLONG   4\r
+\r
+#define char_to_int(p) ((p)- '0')\r
+#ifndef MAX\r
+#define MAX(p,q) (((p) >= (q)) ? (p) : (q))\r
+#endif\r
+\r
+static size_t dopr(char *buffer, size_t maxlen, const char *format, va_list args)\r
+{\r
+  char ch;\r
+  LLONG value;\r
+  LDOUBLE fvalue;\r
+  char *strvalue;\r
+  int min;\r
+  int max;\r
+  int state;\r
+  int flags;\r
+  int cflags;\r
+  size_t currlen;\r
+        \r
+  state = DP_S_DEFAULT;\r
+  currlen = flags = cflags = min = 0;\r
+  max = -1;\r
+  ch = *format++;\r
+        \r
+  while (state != DP_S_DONE) {\r
+    if (ch == '\0')\r
+      state = DP_S_DONE;\r
+\r
+    switch(state) {\r
+    case DP_S_DEFAULT:\r
+      if (ch == '%')\r
+        state = DP_S_FLAGS;\r
+      else\r
+        dopr_outch (buffer, &currlen, maxlen, ch);\r
+      ch = *format++;\r
+      break;\r
+    case DP_S_FLAGS:\r
+      switch (ch) {\r
+      case '-':\r
+        flags |= DP_F_MINUS;\r
+        ch = *format++;\r
+        break;\r
+      case '+':\r
+        flags |= DP_F_PLUS;\r
+        ch = *format++;\r
+        break;\r
+      case ' ':\r
+        flags |= DP_F_SPACE;\r
+        ch = *format++;\r
+        break;\r
+      case '#':\r
+        flags |= DP_F_NUM;\r
+        ch = *format++;\r
+        break;\r
+      case '0':\r
+        flags |= DP_F_ZERO;\r
+        ch = *format++;\r
+        break;\r
+      default:\r
+        state = DP_S_MIN;\r
+        break;\r
+      }\r
+      break;\r
+    case DP_S_MIN:\r
+      if (isdigit((unsigned char)ch)) {\r
+        min = 10*min + char_to_int (ch);\r
+        ch = *format++;\r
+      } else if (ch == '*') {\r
+        min = va_arg (args, int);\r
+        ch = *format++;\r
+        state = DP_S_DOT;\r
+      } else {\r
+        state = DP_S_DOT;\r
+      }\r
+      break;\r
+    case DP_S_DOT:\r
+      if (ch == '.') {\r
+        state = DP_S_MAX;\r
+        ch = *format++;\r
+      } else {\r
+        state = DP_S_MOD;\r
+      }\r
+      break;\r
+    case DP_S_MAX:\r
+      if (isdigit((unsigned char)ch)) {\r
+        if (max < 0)\r
+          max = 0;\r
+        max = 10*max + char_to_int (ch);\r
+        ch = *format++;\r
+      } else if (ch == '*') {\r
+        max = va_arg (args, int);\r
+        ch = *format++;\r
+        state = DP_S_MOD;\r
+      } else {\r
+        state = DP_S_MOD;\r
+      }\r
+      break;\r
+    case DP_S_MOD:\r
+      switch (ch) {\r
+      case 'h':\r
+        cflags = DP_C_SHORT;\r
+        ch = *format++;\r
+        break;\r
+      case 'l':\r
+        cflags = DP_C_LONG;\r
+        ch = *format++;\r
+        if (ch == 'l') {        /* It's a long long */\r
+          cflags = DP_C_LLONG;\r
+          ch = *format++;\r
+        }\r
+        break;\r
+      case 'L':\r
+        cflags = DP_C_LDOUBLE;\r
+        ch = *format++;\r
+        break;\r
+      default:\r
+        break;\r
+      }\r
+      state = DP_S_CONV;\r
+      break;\r
+    case DP_S_CONV:\r
+      switch (ch) {\r
+      case 'd':\r
+      case 'i':\r
+        if (cflags == DP_C_SHORT)\r
+          value = va_arg (args, int);\r
+        else if (cflags == DP_C_LONG)\r
+          value = va_arg (args, long int);\r
+        else if (cflags == DP_C_LLONG)\r
+          value = va_arg (args, LLONG);\r
+        else\r
+          value = va_arg (args, int);\r
+        fmtint (buffer, &currlen, maxlen, value, 10, min, max, flags);\r
+        break;\r
+      case 'o':\r
+        flags |= DP_F_UNSIGNED;\r
+        if (cflags == DP_C_SHORT)\r
+          value = va_arg (args, unsigned int);\r
+        else if (cflags == DP_C_LONG)\r
+          value = (long)va_arg (args, unsigned long int);\r
+        else if (cflags == DP_C_LLONG)\r
+          value = (long)va_arg (args, unsigned LLONG);\r
+        else\r
+          value = (long)va_arg (args, unsigned int);\r
+        fmtint (buffer, &currlen, maxlen, value, 8, min, max, flags);\r
+        break;\r
+      case 'u':\r
+        flags |= DP_F_UNSIGNED;\r
+        if (cflags == DP_C_SHORT)\r
+          value = va_arg (args, unsigned int);\r
+        else if (cflags == DP_C_LONG)\r
+          value = (long)va_arg (args, unsigned long int);\r
+        else if (cflags == DP_C_LLONG)\r
+          value = (LLONG)va_arg (args, unsigned LLONG);\r
+        else\r
+          value = (long)va_arg (args, unsigned int);\r
+        fmtint (buffer, &currlen, maxlen, value, 10, min, max, flags);\r
+        break;\r
+      case 'X':\r
+        flags |= DP_F_UP;\r
+      case 'x':\r
+        flags |= DP_F_UNSIGNED;\r
+        if (cflags == DP_C_SHORT)\r
+          value = va_arg (args, unsigned int);\r
+        else if (cflags == DP_C_LONG)\r
+          value = (long)va_arg (args, unsigned long int);\r
+        else if (cflags == DP_C_LLONG)\r
+          value = (LLONG)va_arg (args, unsigned LLONG);\r
+        else\r
+          value = (long)va_arg (args, unsigned int);\r
+        fmtint (buffer, &currlen, maxlen, value, 16, min, max, flags);\r
+        break;\r
+      case 'f':\r
+        if (cflags == DP_C_LDOUBLE)\r
+          fvalue = va_arg (args, LDOUBLE);\r
+        else\r
+          fvalue = va_arg (args, double);\r
+        /* um, floating point? */\r
+        fmtfp (buffer, &currlen, maxlen, fvalue, min, max, flags);\r
+        break;\r
+      case 'E':\r
+        flags |= DP_F_UP;\r
+      case 'e':\r
+        if (cflags == DP_C_LDOUBLE)\r
+          fvalue = va_arg (args, LDOUBLE);\r
+        else\r
+          fvalue = va_arg (args, double);\r
+        break;\r
+      case 'G':\r
+        flags |= DP_F_UP;\r
+      case 'g':\r
+        if (cflags == DP_C_LDOUBLE)\r
+          fvalue = va_arg (args, LDOUBLE);\r
+        else\r
+          fvalue = va_arg (args, double);\r
+        break;\r
+      case 'c':\r
+        dopr_outch (buffer, &currlen, maxlen, va_arg (args, int));\r
+        break;\r
+      case 's':\r
+        strvalue = va_arg (args, char *);\r
+        if (max == -1) {\r
+          max = strlen(strvalue);\r
+        }\r
+        if (min > 0 && max >= 0 && min > max) max = min;\r
+        fmtstr (buffer, &currlen, maxlen, strvalue, flags, min, max);\r
+        break;\r
+      case 'p':\r
+        strvalue = va_arg (args, void *);\r
+        fmtint (buffer, &currlen, maxlen, (long) strvalue, 16, min, max, flags);\r
+        break;\r
+      case 'n':\r
+        if (cflags == DP_C_SHORT) {\r
+          short int *num;\r
+          num = va_arg (args, short int *);\r
+          *num = currlen;\r
+        } else if (cflags == DP_C_LONG) {\r
+          long int *num;\r
+          num = va_arg (args, long int *);\r
+          *num = (long int)currlen;\r
+        } else if (cflags == DP_C_LLONG) {\r
+          LLONG *num;\r
+          num = va_arg (args, LLONG *);\r
+          *num = (LLONG)currlen;\r
+        } else {\r
+          int *num;\r
+          num = va_arg (args, int *);\r
+          *num = currlen;\r
+        }\r
+        break;\r
+      case '%':\r
+        dopr_outch (buffer, &currlen, maxlen, ch);\r
+        break;\r
+      case 'w':\r
+        /* not supported yet, treat as next char */\r
+        ch = *format++;\r
+        break;\r
+      default:\r
+        /* Unknown, skip */\r
+        break;\r
+      }\r
+      ch = *format++;\r
+      state = DP_S_DEFAULT;\r
+      flags = cflags = min = 0;\r
+      max = -1;\r
+      break;\r
+    case DP_S_DONE:\r
+      break;\r
+    default:\r
+      /* hmm? */\r
+      break; /* some picky compilers need this */\r
+    }\r
+  }\r
+  if (maxlen != 0) {\r
+    if (currlen < maxlen - 1)\r
+      buffer[currlen] = '\0';\r
+    else if (maxlen > 0)\r
+      buffer[maxlen - 1] = '\0';\r
+  }\r
+        \r
+  return currlen;\r
+}\r
+\r
+static void fmtstr(char *buffer, size_t *currlen, size_t maxlen,\r
+                   char *value, int flags, int min, int max)\r
+{\r
+  int padlen, strln;     /* amount to pad */\r
+  int cnt = 0;\r
+\r
+#ifdef DEBUG_SNPRINTF\r
+  printf("fmtstr min=%d max=%d s=[%s]\n", min, max, value);\r
+#endif\r
+  if (value == 0) {\r
+    value = "<NULL>";\r
+  }\r
+\r
+  for (strln = 0; value[strln]; ++strln); /* strlen */\r
+  padlen = min - strln;\r
+  if (padlen < 0)\r
+    padlen = 0;\r
+  if (flags & DP_F_MINUS)\r
+    padlen = -padlen; /* Left Justify */\r
+        \r
+  while ((padlen > 0) && (cnt < max)) {\r
+    dopr_outch (buffer, currlen, maxlen, ' ');\r
+    --padlen;\r
+    ++cnt;\r
+  }\r
+  while (*value && (cnt < max)) {\r
+    dopr_outch (buffer, currlen, maxlen, *value++);\r
+    ++cnt;\r
+  }\r
+  while ((padlen < 0) && (cnt < max)) {\r
+    dopr_outch (buffer, currlen, maxlen, ' ');\r
+    ++padlen;\r
+    ++cnt;\r
+  }\r
+}\r
+\r
+/* Have to handle DP_F_NUM (ie 0x and 0 alternates) */\r
+\r
+static void fmtint(char *buffer, size_t *currlen, size_t maxlen,\r
+                   long value, int base, int min, int max, int flags)\r
+{\r
+  int signvalue = 0;\r
+  unsigned long uvalue;\r
+  char convert[20];\r
+  int place = 0;\r
+  int spadlen = 0; /* amount to space pad */\r
+  int zpadlen = 0; /* amount to zero pad */\r
+  int caps = 0;\r
+        \r
+  if (max < 0)\r
+    max = 0;\r
+        \r
+  uvalue = value;\r
+        \r
+  if(!(flags & DP_F_UNSIGNED)) {\r
+    if( value < 0 ) {\r
+      signvalue = '-';\r
+      uvalue = -value;\r
+    } else {\r
+      if (flags & DP_F_PLUS)  /* Do a sign (+/i) */\r
+        signvalue = '+';\r
+      else if (flags & DP_F_SPACE)\r
+        signvalue = ' ';\r
+    }\r
+  }\r
+  \r
+  if (flags & DP_F_UP) caps = 1; /* Should characters be upper case? */\r
+\r
+  do {\r
+    convert[place++] =\r
+      (caps? "0123456789ABCDEF":"0123456789abcdef")\r
+      [uvalue % (unsigned)base  ];\r
+    uvalue = (uvalue / (unsigned)base );\r
+  } while(uvalue && (place < 20));\r
+  if (place == 20) place--;\r
+  convert[place] = 0;\r
+\r
+  zpadlen = max - place;\r
+  spadlen = min - MAX (max, place) - (signvalue ? 1 : 0);\r
+  if (zpadlen < 0) zpadlen = 0;\r
+  if (spadlen < 0) spadlen = 0;\r
+  if (flags & DP_F_ZERO) {\r
+    zpadlen = MAX(zpadlen, spadlen);\r
+    spadlen = 0;\r
+  }\r
+  if (flags & DP_F_MINUS)\r
+    spadlen = -spadlen; /* Left Justifty */\r
+\r
+#ifdef DEBUG_SNPRINTF\r
+  printf("zpad: %d, spad: %d, min: %d, max: %d, place: %d\n",\r
+         zpadlen, spadlen, min, max, place);\r
+#endif\r
+\r
+  /* Spaces */\r
+  while (spadlen > 0) {\r
+    dopr_outch (buffer, currlen, maxlen, ' ');\r
+    --spadlen;\r
+  }\r
+\r
+  /* Sign */\r
+  if (signvalue)\r
+    dopr_outch (buffer, currlen, maxlen, signvalue);\r
+\r
+  /* Zeros */\r
+  if (zpadlen > 0) {\r
+    while (zpadlen > 0) {\r
+      dopr_outch (buffer, currlen, maxlen, '0');\r
+      --zpadlen;\r
+    }\r
+  }\r
+\r
+  /* Digits */\r
+  while (place > 0)\r
+    dopr_outch (buffer, currlen, maxlen, convert[--place]);\r
+  \r
+  /* Left Justified spaces */\r
+  while (spadlen < 0) {\r
+    dopr_outch (buffer, currlen, maxlen, ' ');\r
+    ++spadlen;\r
+  }\r
+}\r
+\r
+static LDOUBLE abs_val(LDOUBLE value)\r
+{\r
+  LDOUBLE result = value;\r
+\r
+  if (value < 0)\r
+    result = -value;\r
+        \r
+  return result;\r
+}\r
+\r
+static LDOUBLE POW10(int exp)\r
+{\r
+  LDOUBLE result = 1;\r
+        \r
+  while (exp) {\r
+    result *= 10;\r
+    exp--;\r
+  }\r
+  \r
+  return result;\r
+}\r
+\r
+static LLONG ROUND(LDOUBLE value)\r
+{\r
+  LLONG intpart;\r
+\r
+  intpart = (LLONG)value;\r
+  value = value - intpart;\r
+  if (value >= 0.5) intpart++;\r
+        \r
+  return intpart;\r
+}\r
+\r
+/* a replacement for modf that doesn't need the math library. Should\r
+   be portable, but slow */\r
+static double my_modf(double x0, double *iptr)\r
+{\r
+  int i;\r
+  long l;\r
+  double x = x0;\r
+  double f = 1.0;\r
+\r
+  for (i=0;i<100;i++) {\r
+    l = (long)x;\r
+    if (l <= (x+1) && l >= (x-1)) break;\r
+    x *= 0.1;\r
+    f *= 10.0;\r
+  }\r
+\r
+  if (i == 100) {\r
+    /* yikes! the number is beyond what we can handle. What do we do? */\r
+    (*iptr) = 0;\r
+    return 0;\r
+  }\r
+\r
+  if (i != 0) {\r
+    double i2;\r
+    double ret;\r
+\r
+    ret = my_modf(x0-l*f, &i2);\r
+    (*iptr) = l*f + i2;\r
+    return ret;\r
+  }\r
+\r
+  (*iptr) = l;\r
+  return x - (*iptr);\r
+}\r
+\r
+\r
+static void fmtfp (char *buffer, size_t *currlen, size_t maxlen,\r
+                   LDOUBLE fvalue, int min, int max, int flags)\r
+{\r
+  int signvalue = 0;\r
+  double ufvalue;\r
+  char iconvert[311];\r
+  char fconvert[311];\r
+  int iplace = 0;\r
+  int fplace = 0;\r
+  int padlen = 0; /* amount to pad */\r
+  int zpadlen = 0;\r
+  int caps = 0;\r
+  int index;\r
+  double intpart;\r
+  double fracpart;\r
+  double temp;\r
+  \r
+  /*\r
+   * AIX manpage says the default is 0, but Solaris says the default\r
+   * is 6, and sprintf on AIX defaults to 6\r
+   */\r
+  if (max < 0)\r
+    max = 6;\r
+\r
+  ufvalue = abs_val (fvalue);\r
+\r
+  if (fvalue < 0) {\r
+    signvalue = '-';\r
+  } else {\r
+    if (flags & DP_F_PLUS) { /* Do a sign (+/i) */\r
+      signvalue = '+';\r
+    } else {\r
+      if (flags & DP_F_SPACE)\r
+        signvalue = ' ';\r
+    }\r
+  }\r
+\r
+#if 0\r
+  if (flags & DP_F_UP) caps = 1; /* Should characters be upper case? */\r
+#endif\r
+\r
+#if 0\r
+  if (max == 0) ufvalue += 0.5; /* if max = 0 we must round */\r
+#endif\r
+\r
+  /*\r
+   * Sorry, we only support 16 digits past the decimal because of our\r
+   * conversion method\r
+   */\r
+  if (max > 16)\r
+    max = 16;\r
+\r
+  /* We "cheat" by converting the fractional part to integer by\r
+   * multiplying by a factor of 10\r
+   */\r
+\r
+  temp = ufvalue;\r
+  my_modf(temp, &intpart);\r
+\r
+  fracpart = ROUND((POW10(max)) * (ufvalue - intpart));\r
+        \r
+  if (fracpart >= POW10(max)) {\r
+    intpart++;\r
+    fracpart -= POW10(max);\r
+  }\r
+\r
+\r
+  /* Convert integer part */\r
+  do {\r
+    temp = intpart;\r
+    my_modf(intpart*0.1, &intpart);\r
+    temp = temp*0.1;\r
+    index = (int) ((temp -intpart +0.05)* 10.0);\r
+    /* index = (int) (((double)(temp*0.1) -intpart +0.05) *10.0); */\r
+    /* printf ("%llf, %f, %x\n", temp, intpart, index); */\r
+    iconvert[iplace++] =\r
+      (caps? "0123456789ABCDEF":"0123456789abcdef")[index];\r
+  } while (intpart && (iplace < 311));\r
+  if (iplace == 311) iplace--;\r
+  iconvert[iplace] = 0;\r
+\r
+  /* Convert fractional part */\r
+  if (fracpart)\r
+    {\r
+      do {\r
+        temp = fracpart;\r
+        my_modf(fracpart*0.1, &fracpart);\r
+        temp = temp*0.1;\r
+        index = (int) ((temp -fracpart +0.05)* 10.0);\r
+        /* index = (int) ((((temp/10) -fracpart) +0.05) *10); */\r
+        /* printf ("%lf, %lf, %ld\n", temp, fracpart, index); */\r
+        fconvert[fplace++] =\r
+          (caps? "0123456789ABCDEF":"0123456789abcdef")[index];\r
+      } while(fracpart && (fplace < 311));\r
+      if (fplace == 311) fplace--;\r
+    }\r
+  fconvert[fplace] = 0;\r
+  \r
+  /* -1 for decimal point, another -1 if we are printing a sign */\r
+  padlen = min - iplace - max - 1 - ((signvalue) ? 1 : 0);\r
+  zpadlen = max - fplace;\r
+  if (zpadlen < 0) zpadlen = 0;\r
+  if (padlen < 0)\r
+    padlen = 0;\r
+  if (flags & DP_F_MINUS)\r
+    padlen = -padlen; /* Left Justifty */\r
+        \r
+  if ((flags & DP_F_ZERO) && (padlen > 0)) {\r
+    if (signvalue) {\r
+      dopr_outch (buffer, currlen, maxlen, signvalue);\r
+      --padlen;\r
+      signvalue = 0;\r
+    }\r
+    while (padlen > 0) {\r
+      dopr_outch (buffer, currlen, maxlen, '0');\r
+      --padlen;\r
+    }\r
+  }\r
+  while (padlen > 0) {\r
+    dopr_outch (buffer, currlen, maxlen, ' ');\r
+    --padlen;\r
+  }\r
+  if (signvalue)\r
+    dopr_outch (buffer, currlen, maxlen, signvalue);\r
+        \r
+  while (iplace > 0)\r
+    dopr_outch (buffer, currlen, maxlen, iconvert[--iplace]);\r
+\r
+#ifdef DEBUG_SNPRINTF\r
+  printf("fmtfp: fplace=%d zpadlen=%d\n", fplace, zpadlen);\r
+#endif\r
+\r
+  /*\r
+   * Decimal point.  This should probably use locale to find the correct\r
+   * char to print out.\r
+   */\r
+  if (max > 0) {\r
+    dopr_outch (buffer, currlen, maxlen, '.');\r
+                \r
+    while (fplace > 0)\r
+      dopr_outch (buffer, currlen, maxlen, fconvert[--fplace]);\r
+  }\r
+        \r
+  while (zpadlen > 0) {\r
+    dopr_outch (buffer, currlen, maxlen, '0');\r
+    --zpadlen;\r
+  }\r
+\r
+  while (padlen < 0) {\r
+    dopr_outch (buffer, currlen, maxlen, ' ');\r
+    ++padlen;\r
+  }\r
+}\r
+\r
+static void dopr_outch(char *buffer, size_t *currlen, size_t maxlen, char c)\r
+{\r
+  if (*currlen < maxlen) {\r
+    buffer[(*currlen)] = c;\r
+  }\r
+  (*currlen)++;\r
+}\r
+\r
+#if !defined(HAVE_VSNPRINTF) || !defined(HAVE_C99_VSNPRINTF)\r
+int vsnprintf (char *str, size_t count, const char *fmt, va_list args)\r
+{\r
+  return dopr(str, count, fmt, args);\r
+}\r
+#endif\r
+\r
+#if !defined(HAVE_SNPRINTF) || !defined(HAVE_C99_VSNPRINTF)\r
+int snprintf(char *str,size_t count,const char *fmt,...)\r
+{\r
+  size_t ret;\r
+  va_list ap;\r
+    \r
+  va_start(ap, fmt);\r
+  ret = vsnprintf(str, count, fmt, ap);\r
+  va_end(ap);\r
+  return ret;\r
+}\r
+#endif\r
+\r
+#endif\r
+\r
+#ifndef HAVE_VASPRINTF\r
+int vasprintf(char **ptr, const char *format, va_list ap)\r
+{\r
+  int ret;\r
+        \r
+  ret = vsnprintf(NULL, 0, format, ap);\r
+  if (ret <= 0) return ret;\r
+\r
+  (*ptr) = (char *)malloc(ret+1);\r
+  if (!*ptr) return -1;\r
+  ret = vsnprintf(*ptr, ret+1, format, ap);\r
+\r
+  return ret;\r
+}\r
+#endif\r
+\r
+\r
+#ifndef HAVE_ASPRINTF\r
+int asprintf(char **ptr, const char *format, ...)\r
+{\r
+  va_list ap;\r
+  int ret;\r
+        \r
+  va_start(ap, format);\r
+  ret = vasprintf(ptr, format, ap);\r
+  va_end(ap);\r
+\r
+  return ret;\r
+}\r
+#endif\r
+\r
+#ifdef TEST_SNPRINTF\r
+\r
+int sprintf(char *str,const char *fmt,...);\r
+\r
+int main (void)\r
+{\r
+  char buf1[1024];\r
+  char buf2[1024];\r
+  char *fp_fmt[] = {\r
+    "%1.1f",\r
+    "%-1.5f",\r
+    "%1.5f",\r
+    "%123.9f",\r
+    "%10.5f",\r
+    "% 10.5f",\r
+    "%+22.9f",\r
+    "%+4.9f",\r
+    "%01.3f",\r
+    "%4f",\r
+    "%3.1f",\r
+    "%3.2f",\r
+    "%.0f",\r
+    "%f",\r
+    "-16.16f",\r
+    NULL\r
+  };\r
+  double fp_nums[] = { 6442452944.1234, -1.5, 134.21, 91340.2, 341.1234, 0203.9, 0.96, 0.996,\r
+                       0.9996, 1.996, 4.136,  0};\r
+  char *int_fmt[] = {\r
+    "%-1.5d",\r
+    "%1.5d",\r
+    "%123.9d",\r
+    "%5.5d",\r
+    "%10.5d",\r
+    "% 10.5d",\r
+    "%+22.33d",\r
+    "%01.3d",\r
+    "%4d",\r
+    "%d",\r
+    NULL\r
+  };\r
+  long int_nums[] = { -1, 134, 91340, 341, 0203, 0};\r
+  char *str_fmt[] = {\r
+    "10.5s",\r
+    "5.10s",\r
+    "10.1s",\r
+    "0.10s",\r
+    "10.0s",\r
+    "1.10s",\r
+    "%s",\r
+    "%.1s",\r
+    "%.10s",\r
+    "%10s",\r
+    NULL\r
+  };\r
+  char *str_vals[] = {"hello", "a", "", "a longer string", NULL};\r
+  int x, y;\r
+  int fail = 0;\r
+  int num = 0;\r
+\r
+  printf ("Testing snprintf format codes against system sprintf...\n");\r
+\r
+  for (x = 0; fp_fmt[x] ; x++) {\r
+    for (y = 0; fp_nums[y] != 0 ; y++) {\r
+      int l1 = snprintf(NULL, 0, fp_fmt[x], fp_nums[y]);\r
+      int l2 = snprintf(buf1, sizeof(buf1), fp_fmt[x], fp_nums[y]);\r
+      sprintf (buf2, fp_fmt[x], fp_nums[y]);\r
+      if (strcmp (buf1, buf2)) {\r
+        printf("snprintf doesn't match Format: %s\n\tsnprintf = [%s]\n\t sprintf = [%s]\n",\r
+               fp_fmt[x], buf1, buf2);\r
+        fail++;\r
+      }\r
+      if (l1 != l2) {\r
+        printf("snprintf l1 != l2 (%d %d) %s\n", l1, l2, fp_fmt[x]);\r
+        fail++;\r
+      }\r
+      num++;\r
+    }\r
+  }\r
+\r
+  for (x = 0; int_fmt[x] ; x++) {\r
+    for (y = 0; int_nums[y] != 0 ; y++) {\r
+      int l1 = snprintf(NULL, 0, int_fmt[x], int_nums[y]);\r
+      int l2 = snprintf(buf1, sizeof(buf1), int_fmt[x], int_nums[y]);\r
+      sprintf (buf2, int_fmt[x], int_nums[y]);\r
+      if (strcmp (buf1, buf2)) {\r
+        printf("snprintf doesn't match Format: %s\n\tsnprintf = [%s]\n\t sprintf = [%s]\n",\r
+               int_fmt[x], buf1, buf2);\r
+        fail++;\r
+      }\r
+      if (l1 != l2) {\r
+        printf("snprintf l1 != l2 (%d %d) %s\n", l1, l2, int_fmt[x]);\r
+        fail++;\r
+      }\r
+      num++;\r
+    }\r
+  }\r
+\r
+  for (x = 0; str_fmt[x] ; x++) {\r
+    for (y = 0; str_vals[y] != 0 ; y++) {\r
+      int l1 = snprintf(NULL, 0, str_fmt[x], str_vals[y]);\r
+      int l2 = snprintf(buf1, sizeof(buf1), str_fmt[x], str_vals[y]);\r
+      sprintf (buf2, str_fmt[x], str_vals[y]);\r
+      if (strcmp (buf1, buf2)) {\r
+        printf("snprintf doesn't match Format: %s\n\tsnprintf = [%s]\n\t sprintf = [%s]\n",\r
+               str_fmt[x], buf1, buf2);\r
+        fail++;\r
+      }\r
+      if (l1 != l2) {\r
+        printf("snprintf l1 != l2 (%d %d) %s\n", l1, l2, str_fmt[x]);\r
+        fail++;\r
+      }\r
+      num++;\r
+    }\r
+  }\r
+\r
+  printf ("%d tests failed out of %d.\n", fail, num);\r
+\r
+  printf("seeing how many digits we support\n");\r
+  {\r
+    double v0 = 0.12345678901234567890123456789012345678901;\r
+    for (x=0; x<100; x++) {\r
+      snprintf(buf1, sizeof(buf1), "%1.1f", v0*pow(10, x));\r
+      sprintf(buf2,                "%1.1f", v0*pow(10, x));\r
+      if (strcmp(buf1, buf2)) {\r
+        printf("we seem to support %d digits\n", x-1);\r
+        break;\r
+      }\r
+    }\r
+  }\r
+\r
+  return 0;\r
+}\r
+#endif /* SNPRINTF_TEST */\r
+\r
+#endif /* OS2 && __IBMC__ */\r
index d7c9b5a658a5eb6252b8823f7edc5ba99a024544..430a8feed997b9cb3ff5819f72775ed975d281e7 100644 (file)
@@ -36,11 +36,11 @@ UNITTESTS = \
   abstptr abstract alias alttypes ansireserved argorder \\r
   args arraydims arrayinit arraylit blocks break cases cast chararraylit charlit clauses commentchar compdestroy \\r
   compoundliterals compoundstmt constannot controldepth csyntax czechnames czechoslovaknames deadparam \\r
-  decl divzero enum exports external fields flags forbody format freearray \\r
+  decl divzero enum enumtag exports external fields flags forbody format freearray \\r
   funcpointer functionmacro glob globals impabstract info init inparam internal iter keep libs \\r
-  linked lintcomments list loopexec looptesteffect \\r
+  linked lintcomments list longint loopexec looptesteffect \\r
   macros macrosef merge mergenull modifies modtest moduncon \\r
-  mongoincludes mystrncat noeffect null observer oldstyle outglob outparam \\r
+  mongoincludes mystrncat noeffect null nullret nullassign numabstract observer oldstyle outglob outparam \\r
   parentype postnotnull preds prefixes printflike rc refcounts release repexpose \\r
   returned sharing shifts sizesigns slovaknames \\r
   specclauses \\r
@@ -53,10 +53,12 @@ UNITTESTS = \
 UNITEXPECTS = $(addsuffix .expect, $(UNITTESTS))\r
 \r
 ### warnuse doesn't work yet!\r
-SUBDIRTESTS = metastate mergestate tainted fileio \\r
+SUBDIRTESTS1 = metastate mergestate fileio \\r
    simplebufferConstraintTests moreBufferTests moreBufferTests2 globalbufferannotation \\r
-   maxset strchr for manual\\r
-tests2.2 tests2.4 tests2.5 db1 db2 db3\r
+   maxset strchr sizeoftest for manual\r
+SUBDIRTESTS1 = tests2.5 db1 db2 db3\r
+SUBDIRTESTS2 = tainted tests2.2 tests2.4 \r
+SUBDIRTESTS = $(SUBDIRTESTS1) $(SUBDIRTESTS2)\r
 \r
 SPLINTTESTS = $(UNITTESTS) $(SUBDIRTESTS)\r
 \r
@@ -75,11 +77,12 @@ quicktest: $(SPLINTTESTS)
 \r
 help:\r
        -@$(SPLINT)\r
-       #@LARCH_PATH=/dev/null; $(SPLINT) -nof empty.lcl\r
-       @$(SPLINT) -help\r
-       @$(SPLINTP) -asdf\r
-       @$(SPLINTP) +boolint +boolint \r
-       @$(SPLINT) -help flags alpha\r
+       -@$(SPLINT) -help\r
+       -@$(SPLINTP) -asdf\r
+       -@$(SPLINTP) +boolint +boolint \r
+       -@$(SPLINT) -help flags alpha\r
+\r
+### Rules for tests start here\r
 \r
 .PHONY: abstptr\r
 abstptr:\r
@@ -175,15 +178,16 @@ cast:
 \r
 .PHONY: chararraylit\r
 chararraylit:\r
-       -$(SPLINTR) chararraylit.c -expect 2\r
+       $(SPLINTR) chararraylit.c -expect 2\r
 \r
 ### Two addition errors detected with 2.5 with -numliteral.\r
 \r
+### evans 2002-12-15: finds one more but in charlit\r
 .PHONY: charlit\r
 charlit:\r
        $(SPLINTR) +hints charlit.c -expect 4\r
        $(SPLINTR) +hints -numliteral charlit.c -expect 6\r
-       $(SPLINTR) +hints charlit.c +charintliteral +ignoresigns\r
+       $(SPLINTR) +hints charlit.c +charintliteral +ignoresigns -expect 1\r
 \r
 .PHONY: clauses\r
 clauses: \r
@@ -284,7 +288,7 @@ enum:
 \r
 .PHONY: enumtag\r
 enumtag:\r
-       -$(SPLINTR) enumtag.c -expect 2\r
+       $(SPLINTR) enumtag.c -expect 2\r
 \r
 .PHONY: exports\r
 exports:\r
@@ -400,13 +404,14 @@ keep:
 ### libs\r
 ### 2001-05-22: 2 new errors found (fixed spec of signal)\r
 ### 2001-05-30: 3 new errors found (formatconst)\r
+### 2002-07-08: 2 new errors found (getc modifies errno)\r
 \r
 .PHONY: libs\r
 libs:\r
        $(SPLINTR) libs.c +longunsignedunsignedintegral -expect 18\r
        $(SPLINTR) libs.c -expect 22\r
        $(SPLINTR) libs.c +globunspec +modunspec -expect 25\r
-       $(SPLINTR) libs.c +strictlib +globunspec +modunspec -expect 42\r
+       $(SPLINTR) libs.c +strictlib +globunspec +modunspec -expect 44\r
 \r
 .PHONY: lintcomments\r
 lintcomments:\r
@@ -418,6 +423,17 @@ lintcomments:
 list:\r
        $(SPLINTR) list.c -expect 3\r
 \r
+###\r
+### 2002-12-12: Added test case for +longint and +shortint flags\r
+###\r
+\r
+.PHONY: longint\r
+longint:\r
+       $(SPLINTR) longint.c -expect 3\r
+       $(SPLINTR) longint.c +longint -expect 2\r
+       $(SPLINTR) longint.c +shortint -expect 2\r
+       $(SPLINTR) longint.c +shortint +longint -expect 0\r
+\r
 ###\r
 ### 2002-01-01: Added test case for obvious loop execution.\r
 ###\r
@@ -493,7 +509,7 @@ null:
        $(SPLINTR) null1.c -null -mustdefine -expect 4\r
        $(SPLINTR) null2.c -expect 11\r
        $(SPLINTR) null3.c -expect 15\r
-       $(SPLINTR) null3.c -warnunixlib +unixlib -expect 16\r
+       $(SPLINTR) null3.c +unixlib -expect 16\r
        $(SPLINTR) null4.c -expect 1\r
        $(SPLINTR) null5.c -expect 4\r
        $(SPLINTR) null6 -expect 4\r
@@ -505,13 +521,21 @@ null:
 .PHONY: nullret\r
 nullret:\r
        $(SPLINTR) nullret.c -expect 2\r
-       $(SPLINTR) -nullret nullret.c -expect 1\r
+       $(SPLINTR) -nullret nullret.c -expect 0\r
 \r
 .PHONY: nullassign\r
 nullassign:\r
        $(SPLINTR) nullassign.c -expect 2\r
        $(SPLINTR) -nullassign nullassign.c -expect 1\r
 \r
+### Added for 3.1 - evans 2002-12-14\r
+\r
+.PHONY: numabstract\r
+numabstract:\r
+       $(SPLINTR) numabstract.c -expect 11\r
+       $(SPLINTR) numabstract.c +numabstractlit -expect 9\r
+       $(SPLINTR) numabstract.c -numabstractcast -expect 10\r
+\r
 #\r
 # Before 2.4, expected one more because error was reported both as \r
 # dependent and observer.\r
@@ -554,7 +578,7 @@ parentype:
 preds:\r
        $(SPLINTR) +hints preds.c -expect 6\r
        $(SPLINTRN) +hints preds.c -weak -expect 1\r
-       $(SPLINTRN) +hints preds.c -strict -exportlocal -exportheader -expect 12\r
+       $(SPLINTRN) +hints preds.c -strict -exportlocal -exportheader -expect 10\r
 \r
 .PHONY: prefixes\r
 prefixes:\r
@@ -573,7 +597,7 @@ prefixes:
        $(SPLINTR) prefixes.c -globalprefix "&G?_^" -expect 1\r
        $(SPLINTR) prefixes.c -externalprefix "G" -expect 5\r
        $(SPLINTR) prefixes.c -typeprefix "T" -externalprefix "G" -expect 4\r
-#      herbert: unsolved problem with quoting the '*' here!\r
+#      Herbert: this does not work under OS/2\r
 #      $(SPLINTR) prefixes.c -localprefix "?*" +localprefixexclude -expect 13\r
 \r
 .PHONY: printflike\r
@@ -592,7 +616,7 @@ rc:
 \r
 .PHONY: rcfiles\r
 rcfiles:\r
-       cd rcfiles; ${MAKE} SPLINT="$(SPLINTPNEST)"\r
+       cd rcfiles; ${MAKE} SPLINT="-$(SPLINTPNEST)"\r
 \r
 .PHONY: refcounts\r
 refcounts:\r
@@ -629,12 +653,12 @@ shifts:
        $(SPLINTR) shifts.c -shiftimplementation -expect 3\r
        $(SPLINTR) shifts.c -shiftnegative -expect 1\r
 \r
+#drl comment this out until sizesigns is added to cvs\r
+\r
 ### evans - added 2002-08-17: check warnings with arbitrary integral types\r
 sizesigns:\r
-       -$(SPLINTR) +strict sizesigns.c\r
-       -$(SPLINTR) +strict +ignoresigns sizesigns.c\r
-       -$(SPLINTR) +strict +matcharbitraryintegral sizesigns.c\r
-       -$(SPLINTR) +strict +matcharbitraryintegral +ignoresignz sizesigns.c\r
+       $(SPLINTR) +strict sizesigns.c -expect 5\r
+       $(SPLINTR) +strict +matchanyintegral sizesigns.c -expect 4\r
 \r
 .PHONY: slovaknames\r
 slovaknames:\r
@@ -775,6 +799,8 @@ ullint:
 ###\r
 ### 2001-12-30: Poor warnings reported by Peter Deutsch\r
 ###\r
+### 2002-07-03: removed warnings for datatype/macro definitions\r
+###\r
 \r
 .PHONY: utypes\r
 utypes:\r
@@ -819,7 +845,15 @@ sizeof:
 buffertest:\r
        $(SPLINTR) +bounds buffertest1.c -expect 5\r
 \r
-.PHONY: $(SUBDIRTESTS)\r
-$(SUBDIRTESTS):\r
-       $(MAKE) -C $@ SPLINT="$(SPLINTRNNEST)" \r
+.PHONY: $(SUBDIRTESTS1)\r
+$(SUBDIRTESTS1):\r
+       cd $@; $(MAKE) SPLINT="$(SPLINTRNNEST)"\r
+\r
+.PHONY: $(SUBDIRTESTS2)\r
+$(SUBDIRTESTS2):\r
+       cd $@; $(MAKE) SPLINT="$(SPLINTRNNEST)" -f Makefile.os2\r
 \r
+#              sizesigns.c sizesigns.expect \\r
+# Tell versions [3.59,3.63) of GNU make to not export all variables.\r
+# Otherwise a system limit (for SysV at least) may be exceeded.\r
+.NOEXPORT:\r
diff --git a/test/tainted/Makefile.os2 b/test/tainted/Makefile.os2
new file mode 100644 (file)
index 0000000..247d905
--- /dev/null
@@ -0,0 +1,19 @@
+.PHONY: tainted \r
+\r
+SPLINT = splint\r
+\r
+all: tainted \r
+\r
+tainted:\r
+       ${SPLINT} -mts tainted tainted.c -mustfree -exportlocal -expect 4\r
+#      herbert: TODO\r
+       ${SPLINT} tainted-bad.mts tainted.xh tainted.c -mustfree -exportlocal -expect 9\r
+       ${SPLINT} -mts tainted tainted2.c -mustfree -exportlocal -expect 1\r
+       ${SPLINT} -mts tainted tainted3.c -mustfree -exportlocal -expect 1\r
+       ${SPLINT} -mts tainted tainted4.c -mustfree -exportlocal -expect 1\r
+       ${SPLINT} -mts tainted tainted5.c -mustfree -exportlocal\r
+       ${SPLINT} -mts tainted taintedmerge.c -mustfree -exportlocal -expect 3\r
+       ${SPLINT} -mts tainted taintedimplicit.c -mustfree -exportlocal -expect 1\r
+       ${SPLINT} -mts tainted sprintf.c -expect 5\r
+       \r
+# evans 2002-07-09: 3 more warnings for sprintf because of sprintf\r
diff --git a/test/tests2.2/Makefile-tests2.2.os2 b/test/tests2.2/Makefile-tests2.2.os2
deleted file mode 100644 (file)
index 8f6f70a..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-.PHONY: boolops bool boolenum break bstring decl enumbool extension modarray nestext offestof sizeofarray rex struct\r
-\r
-LCLINT = lclint\r
-\r
-all: boolops bool boolenum break bstring decl enumbool extension modarray nestext offestof sizeofarray rex struct\r
-\r
-boolops:\r
-       $(LCLINT) boolops.c -expect 1\r
-\r
-bool:\r
-       $(LCLINT) bool.lcl booldef.c -expect 1\r
-\r
-boolenum:\r
-       $(LCLINT) boolenum.c -booltype BOOLEAN -expect 1 \r
-\r
-break:\r
-       $(LCLINT) break.c -expect 1\r
-\r
-bstring:\r
-       $(LCLINT) bstring.c -expect 2 \r
-\r
-decl:\r
-       $(LCLINT) decl.c -expect 1 \r
-\r
-enumbool:\r
-       $(LCLINT) enumbool.c -expect 3 \r
-       $(LCLINT) enumbool.c -booltype "bool" -booltrue "true" -boolfalse "false" \r
-\r
-extension:\r
-       -$(LCLINT) extension.c\r
-       -$(LCLINT) -gnuextensions extension.c \r
-\r
-modarray:\r
-       $(LCLINT) modarray.c\r
-\r
-nestext:\r
-       $(LCLINT) nestext.c -expect 1\r
-\r
-offsetof:\r
-       $(LCLINT) offsetof.c\r
-\r
-sizeofarray:\r
-       $(LCLINT) sizeofarray.c -expect 3 \r
-\r
-rex:\r
-       $(LCLINT) rex.c -expect 4\r
-### 3 new errors reported\r
-\r
-struct:\r
-       $(LCLINT) struct.c -expect 1\r
diff --git a/test/tests2.2/Makefile.os2 b/test/tests2.2/Makefile.os2
new file mode 100644 (file)
index 0000000..0f25149
--- /dev/null
@@ -0,0 +1,52 @@
+.PHONY: boolops bool boolenum break bstring decl enumbool extension modarray nestext offestof sizeofarray rex struct\r
+\r
+SPLINT = splint\r
+\r
+all: boolops bool boolenum break bstring decl enumbool extension modarray nestext offestof sizeofarray rex struct\r
+\r
+boolops:\r
+       $(SPLINT) boolops.c -expect 1\r
+\r
+bool:\r
+       -$(SPLINT) bool.lcl booldef.c -expect 1\r
+\r
+boolenum:\r
+       $(SPLINT) boolenum.c -booltype BOOLEAN -booltrue TRUE -boolfalse FALSE -expect 1 \r
+\r
+break:\r
+       $(SPLINT) break.c -expect 1\r
+\r
+bstring:\r
+       $(SPLINT) bstring.c -expect 2 \r
+\r
+decl:\r
+       $(SPLINT) decl.c -expect 1 \r
+\r
+enumbool:\r
+       $(SPLINT) enumbool.c -booltrue true -boolfalse false \r
+#      Herbert: TODO\r
+       -$(SPLINT) enumbool.c -booltrue TRUE -boolfalse FALSE -expect 2 \r
+\r
+extension:\r
+       $(SPLINT) extension.c\r
+#      Herbert: TODO\r
+       -$(SPLINT) -gnuextensions extension.c \r
+\r
+modarray:\r
+       $(SPLINT) modarray.c\r
+\r
+nestext:\r
+       $(SPLINT) nestext.c -expect 1\r
+\r
+offsetof:\r
+       $(SPLINT) offsetof.c\r
+\r
+sizeofarray:\r
+       $(SPLINT) sizeofarray.c -expect 3 \r
+\r
+rex:\r
+       $(SPLINT) rex.c -expect 4\r
+### 3 new errors reported\r
+\r
+struct:\r
+       $(SPLINT) struct.c -expect 1\r
diff --git a/test/tests2.4/Makefile-tests2.4.os2 b/test/tests2.4/Makefile-tests2.4.os2
deleted file mode 100644 (file)
index ea99f56..0000000
+++ /dev/null
@@ -1,78 +0,0 @@
-.PHONY: emptycase enumtest duffs bitfields bugs tests hexconstants innercomment nothing offsetof komazi print syslog error ulrich cpptest longlong subdir fink driverstub alignof source emptycase enumtest duffs bitfields bugs tests hexconstants innercomment nothing offsetof komazi print syslog error ulrich cpptest longlong subdir fink driverstub alignof source\r
-\r
-LCLINT = lclint\r
-\r
-all: emptycase enumtest duffs bitfields bugs tests hexconstants innercomment nothing offsetof komazi print syslog ulrich cpptest longlong subdir fink alignof source \r
-#error driverstub \r
-\r
-emptycase:\r
-       $(LCLINT) emptycase.c \r
-\r
-enumtest:\r
-       $(LCLINT) enumtest.c -expect 2\r
-\r
-duffs:\r
-       $(LCLINT) duffs.c -expect 7\r
-\r
-bitfields:\r
-       $(LCLINT) bitfields.c\r
-\r
-bugs:\r
-       $(LCLINT) bug1.c \r
-       $(LCLINT) bug2.c -expect 5 \r
-       $(LCLINT) bug3.c -expect 3\r
-\r
-tests:\r
-       $(LCLINT) test0.c \r
-       $(LCLINT) test1.c \r
-       $(LCLINT) test2.c \r
-\r
-hexconstants:\r
-       $(LCLINT) hexconstants.c -expect 1 \r
-       $(LCLINT) +checks hexconstants.c -expect 4\r
-\r
-innercomment:\r
-       $(LCLINT) innercomment.c -expect 2 +forcehints \r
-       $(LCLINT) innercomment.c -nestcomment\r
-\r
-nothing:\r
-       $(LCLINT) nothing.c \r
-\r
-offsetof:\r
-       $(LCLINT) offsetof.c -expect 2 \r
-\r
-komazi:\r
-       $(LCLINT) komazi.c \r
-\r
-print:\r
-       $(LCLINT) print.c \r
-\r
-syslog:\r
-       $(LCLINT) syslog.c -warnunixlib +unixlib \r
-\r
-#error:\r
-#      $(LCLINT) error.c -expect 1 \r
-\r
-ulrich:\r
-       $(LCLINT) ulrich.c -expect 1\r
-\r
-cpptest:\r
-       $(LCLINT) cpptest.c '-D__P(x)=x' -expect 1\r
-\r
-longlong:\r
-       $(LCLINT) longlong.c -expect 4\r
-\r
-subdir:\r
-       $(LCLINT) subdir/main.c subdir/main.lcl\r
-\r
-fink:\r
-       $(LCLINT) fink.c \r
-\r
-driverstub:\r
-       $(LCLINT) driverstub.c\r
-\r
-alignof:\r
-       $(LCLINT) alignof.c -expect 2\r
-\r
-source:\r
-       $(LCLINT) -D DBL_MANT_DIG=25 source.c\r
diff --git a/test/tests2.4/Makefile.os2 b/test/tests2.4/Makefile.os2
new file mode 100644 (file)
index 0000000..ac093cd
--- /dev/null
@@ -0,0 +1,89 @@
+.PHONY: emptycase enumtest duffs bitfields bugs tests hexconstants innercomment nothing offsetof komazi print syslog error ulrich cpptest longlong subdir fink driverstub alignof source emptycase enumtest duffs bitfields bugs tests hexconstants innercomment nothing offsetof komazi print syslog error ulrich cpptest longlong subdir fink driverstub alignof source\r
+\r
+SPLINT = splint\r
+\r
+all: check\r
+\r
+check: emptycase enumtest duffs bitfields bugs tests hexconstants innercomment nothing offsetof komazi print syslog error ulrich cpptest longlong subdir fink alignof source \r
+\r
+emptycase:\r
+       $(SPLINT) emptycase.c \r
+\r
+enumtest:\r
+       $(SPLINT) enumtest.c -expect 2\r
+\r
+duffs:\r
+       $(SPLINT) duffs.c -expect 7\r
+\r
+bitfields:\r
+       $(SPLINT) bitfields.c\r
+\r
+bugs:\r
+       $(SPLINT) bug1.c \r
+       $(SPLINT) bug2.c -expect 5 \r
+       $(SPLINT) bug3.c -expect 3\r
+\r
+tests:\r
+       $(SPLINT) test0.c \r
+       $(SPLINT) test1.c \r
+       $(SPLINT) test2.c \r
+\r
+hexconstants:\r
+       $(SPLINT) hexconstants.c -expect 1 \r
+       $(SPLINT) +checks hexconstants.c -expect 4\r
+\r
+innercomment:\r
+       $(SPLINT) innercomment.c -expect 2 +forcehints \r
+       $(SPLINT) innercomment.c -nestcomment\r
+\r
+nothing:\r
+       $(SPLINT) nothing.c \r
+\r
+offsetof:\r
+       $(SPLINT) offsetof.c -expect 2 \r
+\r
+komazi:\r
+       $(SPLINT) komazi.c \r
+\r
+print:\r
+       $(SPLINT) print.c \r
+\r
+syslog:\r
+       $(SPLINT) syslog.c +unixlib \r
+\r
+error:\r
+       $(SPLINT) error.c -expect 1 \r
+\r
+ulrich:\r
+       $(SPLINT) ulrich.c -expect 1\r
+\r
+cpptest:\r
+       $(SPLINT) cpptest.c '-D__P(x)=x' -expect 1\r
+\r
+longlong:\r
+       $(SPLINT) longlong.c -expect 4\r
+\r
+subdir:\r
+       $(SPLINT) subdir/main.c subdir/main.lcl\r
+\r
+fink:\r
+       $(SPLINT) fink.c \r
+\r
+# Herbert: don't test this, since splint is installed in /usr on my box\r
+driverstub:\r
+       $(SPLINT) driverstub.c -sysdirs "/usr/"\r
+\r
+alignof:\r
+       $(SPLINT) alignof.c -expect 2\r
+\r
+source:\r
+       $(SPLINT) -D DBL_MANT_DIG=25 source.c -expect 1\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
This page took 0.196801 seconds and 5 git commands to generate.