Change "obsolete" in all filenames into "obsolescent", and also update all references to such files.
Neither the C standard, the C++ standard, or POSIX talks about "obsolete". All of them use the word "obsolescent", which is a different word with a different meaning.
This commit is contained in:
parent
ee93d30d94
commit
1cc872f5b2
|
@ -12,7 +12,7 @@
|
||||||
39E60EBB1270DE3A00AC0D02 /* checkclass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 39E60E911270DE3A00AC0D02 /* checkclass.cpp */; };
|
39E60EBB1270DE3A00AC0D02 /* checkclass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 39E60E911270DE3A00AC0D02 /* checkclass.cpp */; };
|
||||||
39E60EBC1270DE3A00AC0D02 /* checkexceptionsafety.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 39E60E931270DE3A00AC0D02 /* checkexceptionsafety.cpp */; };
|
39E60EBC1270DE3A00AC0D02 /* checkexceptionsafety.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 39E60E931270DE3A00AC0D02 /* checkexceptionsafety.cpp */; };
|
||||||
39E60EBD1270DE3A00AC0D02 /* checkmemoryleak.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 39E60E951270DE3A00AC0D02 /* checkmemoryleak.cpp */; };
|
39E60EBD1270DE3A00AC0D02 /* checkmemoryleak.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 39E60E951270DE3A00AC0D02 /* checkmemoryleak.cpp */; };
|
||||||
39E60EBE1270DE3A00AC0D02 /* checkobsoletefunctions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 39E60E971270DE3A00AC0D02 /* checkobsoletefunctions.cpp */; };
|
39E60EBE1270DE3A00AC0D02 /* checkobsolescentfunctions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 39E60E971270DE3A00AC0D02 /* checkobsolescentfunctions.cpp */; };
|
||||||
39E60EBF1270DE3A00AC0D02 /* checkother.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 39E60E991270DE3A00AC0D02 /* checkother.cpp */; };
|
39E60EBF1270DE3A00AC0D02 /* checkother.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 39E60E991270DE3A00AC0D02 /* checkother.cpp */; };
|
||||||
39E60EC01270DE3A00AC0D02 /* checkpostfixoperator.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 39E60E9B1270DE3A00AC0D02 /* checkpostfixoperator.cpp */; };
|
39E60EC01270DE3A00AC0D02 /* checkpostfixoperator.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 39E60E9B1270DE3A00AC0D02 /* checkpostfixoperator.cpp */; };
|
||||||
39E60EC11270DE3A00AC0D02 /* checkstl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 39E60E9D1270DE3A00AC0D02 /* checkstl.cpp */; };
|
39E60EC11270DE3A00AC0D02 /* checkstl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 39E60E9D1270DE3A00AC0D02 /* checkstl.cpp */; };
|
||||||
|
@ -81,7 +81,7 @@
|
||||||
F4C348821825692B00521683 /* testmemleak.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F45BDD9E17AB8511006C06AF /* testmemleak.cpp */; };
|
F4C348821825692B00521683 /* testmemleak.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F45BDD9E17AB8511006C06AF /* testmemleak.cpp */; };
|
||||||
F4C348831825692B00521683 /* testnonreentrantfunctions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F45BDD9F17AB8511006C06AF /* testnonreentrantfunctions.cpp */; };
|
F4C348831825692B00521683 /* testnonreentrantfunctions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F45BDD9F17AB8511006C06AF /* testnonreentrantfunctions.cpp */; };
|
||||||
F4C348841825692B00521683 /* testnullpointer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F45BDDA017AB8511006C06AF /* testnullpointer.cpp */; };
|
F4C348841825692B00521683 /* testnullpointer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F45BDDA017AB8511006C06AF /* testnullpointer.cpp */; };
|
||||||
F4C348851825692B00521683 /* testobsoletefunctions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F45BDDA117AB8511006C06AF /* testobsoletefunctions.cpp */; };
|
F4C348851825692B00521683 /* testobsolescentfunctions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F45BDDA117AB8511006C06AF /* testobsolescentfunctions.cpp */; };
|
||||||
F4C348861825692B00521683 /* testoptions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F45BDDA217AB8511006C06AF /* testoptions.cpp */; };
|
F4C348861825692B00521683 /* testoptions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F45BDDA217AB8511006C06AF /* testoptions.cpp */; };
|
||||||
F4C348871825692B00521683 /* testother.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F45BDDA317AB8511006C06AF /* testother.cpp */; };
|
F4C348871825692B00521683 /* testother.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F45BDDA317AB8511006C06AF /* testother.cpp */; };
|
||||||
F4C348881825692B00521683 /* testpath.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F45BDDA417AB8511006C06AF /* testpath.cpp */; };
|
F4C348881825692B00521683 /* testpath.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F45BDDA417AB8511006C06AF /* testpath.cpp */; };
|
||||||
|
@ -118,7 +118,7 @@
|
||||||
F4C348A718256A4500521683 /* checkmemoryleak.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 39E60E951270DE3A00AC0D02 /* checkmemoryleak.cpp */; };
|
F4C348A718256A4500521683 /* checkmemoryleak.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 39E60E951270DE3A00AC0D02 /* checkmemoryleak.cpp */; };
|
||||||
F4C348A818256A4500521683 /* checknonreentrantfunctions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F4043DC3177F093300CD5A40 /* checknonreentrantfunctions.cpp */; };
|
F4C348A818256A4500521683 /* checknonreentrantfunctions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F4043DC3177F093300CD5A40 /* checknonreentrantfunctions.cpp */; };
|
||||||
F4C348A918256A4500521683 /* checknullpointer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F4043DC5177F093300CD5A40 /* checknullpointer.cpp */; };
|
F4C348A918256A4500521683 /* checknullpointer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F4043DC5177F093300CD5A40 /* checknullpointer.cpp */; };
|
||||||
F4C348AA18256A4500521683 /* checkobsoletefunctions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 39E60E971270DE3A00AC0D02 /* checkobsoletefunctions.cpp */; };
|
F4C348AA18256A4500521683 /* checkobsolescentfunctions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 39E60E971270DE3A00AC0D02 /* checkobsolescentfunctions.cpp */; };
|
||||||
F4C348AB18256A4500521683 /* checkother.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 39E60E991270DE3A00AC0D02 /* checkother.cpp */; };
|
F4C348AB18256A4500521683 /* checkother.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 39E60E991270DE3A00AC0D02 /* checkother.cpp */; };
|
||||||
F4C348AC18256A4500521683 /* checkpostfixoperator.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 39E60E9B1270DE3A00AC0D02 /* checkpostfixoperator.cpp */; };
|
F4C348AC18256A4500521683 /* checkpostfixoperator.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 39E60E9B1270DE3A00AC0D02 /* checkpostfixoperator.cpp */; };
|
||||||
F4C348AD18256A4500521683 /* checksizeof.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F4043DC7177F093300CD5A40 /* checksizeof.cpp */; };
|
F4C348AD18256A4500521683 /* checksizeof.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F4043DC7177F093300CD5A40 /* checksizeof.cpp */; };
|
||||||
|
@ -180,8 +180,8 @@
|
||||||
39E60E941270DE3A00AC0D02 /* checkexceptionsafety.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = checkexceptionsafety.h; path = lib/checkexceptionsafety.h; sourceTree = "<group>"; };
|
39E60E941270DE3A00AC0D02 /* checkexceptionsafety.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = checkexceptionsafety.h; path = lib/checkexceptionsafety.h; sourceTree = "<group>"; };
|
||||||
39E60E951270DE3A00AC0D02 /* checkmemoryleak.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = checkmemoryleak.cpp; path = lib/checkmemoryleak.cpp; sourceTree = "<group>"; };
|
39E60E951270DE3A00AC0D02 /* checkmemoryleak.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = checkmemoryleak.cpp; path = lib/checkmemoryleak.cpp; sourceTree = "<group>"; };
|
||||||
39E60E961270DE3A00AC0D02 /* checkmemoryleak.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = checkmemoryleak.h; path = lib/checkmemoryleak.h; sourceTree = "<group>"; };
|
39E60E961270DE3A00AC0D02 /* checkmemoryleak.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = checkmemoryleak.h; path = lib/checkmemoryleak.h; sourceTree = "<group>"; };
|
||||||
39E60E971270DE3A00AC0D02 /* checkobsoletefunctions.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = checkobsoletefunctions.cpp; path = lib/checkobsoletefunctions.cpp; sourceTree = "<group>"; };
|
39E60E971270DE3A00AC0D02 /* checkobsolescentfunctions.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = checkobsolescentfunctions.cpp; path = lib/checkobsolescentfunctions.cpp; sourceTree = "<group>"; };
|
||||||
39E60E981270DE3A00AC0D02 /* checkobsoletefunctions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = checkobsoletefunctions.h; path = lib/checkobsoletefunctions.h; sourceTree = "<group>"; };
|
39E60E981270DE3A00AC0D02 /* checkobsolescentfunctions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = checkobsolescentfunctions.h; path = lib/checkobsolescentfunctions.h; sourceTree = "<group>"; };
|
||||||
39E60E991270DE3A00AC0D02 /* checkother.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = checkother.cpp; path = lib/checkother.cpp; sourceTree = "<group>"; };
|
39E60E991270DE3A00AC0D02 /* checkother.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = checkother.cpp; path = lib/checkother.cpp; sourceTree = "<group>"; };
|
||||||
39E60E9A1270DE3A00AC0D02 /* checkother.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = checkother.h; path = lib/checkother.h; sourceTree = "<group>"; };
|
39E60E9A1270DE3A00AC0D02 /* checkother.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = checkother.h; path = lib/checkother.h; sourceTree = "<group>"; };
|
||||||
39E60E9B1270DE3A00AC0D02 /* checkpostfixoperator.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = checkpostfixoperator.cpp; path = lib/checkpostfixoperator.cpp; sourceTree = "<group>"; };
|
39E60E9B1270DE3A00AC0D02 /* checkpostfixoperator.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = checkpostfixoperator.cpp; path = lib/checkpostfixoperator.cpp; sourceTree = "<group>"; };
|
||||||
|
@ -287,7 +287,7 @@
|
||||||
F45BDD9E17AB8511006C06AF /* testmemleak.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = testmemleak.cpp; path = test/testmemleak.cpp; sourceTree = "<group>"; };
|
F45BDD9E17AB8511006C06AF /* testmemleak.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = testmemleak.cpp; path = test/testmemleak.cpp; sourceTree = "<group>"; };
|
||||||
F45BDD9F17AB8511006C06AF /* testnonreentrantfunctions.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = testnonreentrantfunctions.cpp; path = test/testnonreentrantfunctions.cpp; sourceTree = "<group>"; };
|
F45BDD9F17AB8511006C06AF /* testnonreentrantfunctions.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = testnonreentrantfunctions.cpp; path = test/testnonreentrantfunctions.cpp; sourceTree = "<group>"; };
|
||||||
F45BDDA017AB8511006C06AF /* testnullpointer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = testnullpointer.cpp; path = test/testnullpointer.cpp; sourceTree = "<group>"; };
|
F45BDDA017AB8511006C06AF /* testnullpointer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = testnullpointer.cpp; path = test/testnullpointer.cpp; sourceTree = "<group>"; };
|
||||||
F45BDDA117AB8511006C06AF /* testobsoletefunctions.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = testobsoletefunctions.cpp; path = test/testobsoletefunctions.cpp; sourceTree = "<group>"; };
|
F45BDDA117AB8511006C06AF /* testobsolescentfunctions.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = testobsolescentfunctions.cpp; path = test/testobsolescentfunctions.cpp; sourceTree = "<group>"; };
|
||||||
F45BDDA217AB8511006C06AF /* testoptions.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = testoptions.cpp; path = test/testoptions.cpp; sourceTree = "<group>"; };
|
F45BDDA217AB8511006C06AF /* testoptions.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = testoptions.cpp; path = test/testoptions.cpp; sourceTree = "<group>"; };
|
||||||
F45BDDA317AB8511006C06AF /* testother.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = testother.cpp; path = test/testother.cpp; sourceTree = "<group>"; };
|
F45BDDA317AB8511006C06AF /* testother.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = testother.cpp; path = test/testother.cpp; sourceTree = "<group>"; };
|
||||||
F45BDDA417AB8511006C06AF /* testpath.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = testpath.cpp; path = test/testpath.cpp; sourceTree = "<group>"; };
|
F45BDDA417AB8511006C06AF /* testpath.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = testpath.cpp; path = test/testpath.cpp; sourceTree = "<group>"; };
|
||||||
|
@ -426,8 +426,8 @@
|
||||||
F4043DC4177F093300CD5A40 /* checknonreentrantfunctions.h */,
|
F4043DC4177F093300CD5A40 /* checknonreentrantfunctions.h */,
|
||||||
F4043DC5177F093300CD5A40 /* checknullpointer.cpp */,
|
F4043DC5177F093300CD5A40 /* checknullpointer.cpp */,
|
||||||
F4043DC6177F093300CD5A40 /* checknullpointer.h */,
|
F4043DC6177F093300CD5A40 /* checknullpointer.h */,
|
||||||
39E60E971270DE3A00AC0D02 /* checkobsoletefunctions.cpp */,
|
39E60E971270DE3A00AC0D02 /* checkobsolescentfunctions.cpp */,
|
||||||
39E60E981270DE3A00AC0D02 /* checkobsoletefunctions.h */,
|
39E60E981270DE3A00AC0D02 /* checkobsolescentfunctions.h */,
|
||||||
39E60E991270DE3A00AC0D02 /* checkother.cpp */,
|
39E60E991270DE3A00AC0D02 /* checkother.cpp */,
|
||||||
39E60E9A1270DE3A00AC0D02 /* checkother.h */,
|
39E60E9A1270DE3A00AC0D02 /* checkother.h */,
|
||||||
39E60E9B1270DE3A00AC0D02 /* checkpostfixoperator.cpp */,
|
39E60E9B1270DE3A00AC0D02 /* checkpostfixoperator.cpp */,
|
||||||
|
@ -515,7 +515,7 @@
|
||||||
F45BDD9E17AB8511006C06AF /* testmemleak.cpp */,
|
F45BDD9E17AB8511006C06AF /* testmemleak.cpp */,
|
||||||
F45BDD9F17AB8511006C06AF /* testnonreentrantfunctions.cpp */,
|
F45BDD9F17AB8511006C06AF /* testnonreentrantfunctions.cpp */,
|
||||||
F45BDDA017AB8511006C06AF /* testnullpointer.cpp */,
|
F45BDDA017AB8511006C06AF /* testnullpointer.cpp */,
|
||||||
F45BDDA117AB8511006C06AF /* testobsoletefunctions.cpp */,
|
F45BDDA117AB8511006C06AF /* testobsolescentfunctions.cpp */,
|
||||||
F45BDDA217AB8511006C06AF /* testoptions.cpp */,
|
F45BDDA217AB8511006C06AF /* testoptions.cpp */,
|
||||||
F45BDDA317AB8511006C06AF /* testother.cpp */,
|
F45BDDA317AB8511006C06AF /* testother.cpp */,
|
||||||
F45BDDA417AB8511006C06AF /* testpath.cpp */,
|
F45BDDA417AB8511006C06AF /* testpath.cpp */,
|
||||||
|
@ -649,7 +649,7 @@
|
||||||
F4CDD6981880888F006CF685 /* valueflow.cpp in Sources */,
|
F4CDD6981880888F006CF685 /* valueflow.cpp in Sources */,
|
||||||
39E60EBC1270DE3A00AC0D02 /* checkexceptionsafety.cpp in Sources */,
|
39E60EBC1270DE3A00AC0D02 /* checkexceptionsafety.cpp in Sources */,
|
||||||
39E60EBD1270DE3A00AC0D02 /* checkmemoryleak.cpp in Sources */,
|
39E60EBD1270DE3A00AC0D02 /* checkmemoryleak.cpp in Sources */,
|
||||||
39E60EBE1270DE3A00AC0D02 /* checkobsoletefunctions.cpp in Sources */,
|
39E60EBE1270DE3A00AC0D02 /* checkobsolescentfunctions.cpp in Sources */,
|
||||||
39E60EBF1270DE3A00AC0D02 /* checkother.cpp in Sources */,
|
39E60EBF1270DE3A00AC0D02 /* checkother.cpp in Sources */,
|
||||||
39E60EC01270DE3A00AC0D02 /* checkpostfixoperator.cpp in Sources */,
|
39E60EC01270DE3A00AC0D02 /* checkpostfixoperator.cpp in Sources */,
|
||||||
39E60EC11270DE3A00AC0D02 /* checkstl.cpp in Sources */,
|
39E60EC11270DE3A00AC0D02 /* checkstl.cpp in Sources */,
|
||||||
|
@ -715,7 +715,7 @@
|
||||||
F4C348A718256A4500521683 /* checkmemoryleak.cpp in Sources */,
|
F4C348A718256A4500521683 /* checkmemoryleak.cpp in Sources */,
|
||||||
F4C348A818256A4500521683 /* checknonreentrantfunctions.cpp in Sources */,
|
F4C348A818256A4500521683 /* checknonreentrantfunctions.cpp in Sources */,
|
||||||
F4C348A918256A4500521683 /* checknullpointer.cpp in Sources */,
|
F4C348A918256A4500521683 /* checknullpointer.cpp in Sources */,
|
||||||
F4C348AA18256A4500521683 /* checkobsoletefunctions.cpp in Sources */,
|
F4C348AA18256A4500521683 /* checkobsolescentfunctions.cpp in Sources */,
|
||||||
F4C348AB18256A4500521683 /* checkother.cpp in Sources */,
|
F4C348AB18256A4500521683 /* checkother.cpp in Sources */,
|
||||||
F4C348AC18256A4500521683 /* checkpostfixoperator.cpp in Sources */,
|
F4C348AC18256A4500521683 /* checkpostfixoperator.cpp in Sources */,
|
||||||
F4C348AD18256A4500521683 /* checksizeof.cpp in Sources */,
|
F4C348AD18256A4500521683 /* checksizeof.cpp in Sources */,
|
||||||
|
@ -761,7 +761,7 @@
|
||||||
F4C348821825692B00521683 /* testmemleak.cpp in Sources */,
|
F4C348821825692B00521683 /* testmemleak.cpp in Sources */,
|
||||||
F4C348831825692B00521683 /* testnonreentrantfunctions.cpp in Sources */,
|
F4C348831825692B00521683 /* testnonreentrantfunctions.cpp in Sources */,
|
||||||
F4C348841825692B00521683 /* testnullpointer.cpp in Sources */,
|
F4C348841825692B00521683 /* testnullpointer.cpp in Sources */,
|
||||||
F4C348851825692B00521683 /* testobsoletefunctions.cpp in Sources */,
|
F4C348851825692B00521683 /* testobsolescentfunctions.cpp in Sources */,
|
||||||
F4C348861825692B00521683 /* testoptions.cpp in Sources */,
|
F4C348861825692B00521683 /* testoptions.cpp in Sources */,
|
||||||
F4C348871825692B00521683 /* testother.cpp in Sources */,
|
F4C348871825692B00521683 /* testother.cpp in Sources */,
|
||||||
F4C348881825692B00521683 /* testpath.cpp in Sources */,
|
F4C348881825692B00521683 /* testpath.cpp in Sources */,
|
||||||
|
|
12
Makefile
12
Makefile
|
@ -131,7 +131,7 @@ LIBOBJ = $(SRCDIR)/check.o \
|
||||||
$(SRCDIR)/checkmemoryleak.o \
|
$(SRCDIR)/checkmemoryleak.o \
|
||||||
$(SRCDIR)/checknonreentrantfunctions.o \
|
$(SRCDIR)/checknonreentrantfunctions.o \
|
||||||
$(SRCDIR)/checknullpointer.o \
|
$(SRCDIR)/checknullpointer.o \
|
||||||
$(SRCDIR)/checkobsoletefunctions.o \
|
$(SRCDIR)/checkobsolescentfunctions.o \
|
||||||
$(SRCDIR)/checkother.o \
|
$(SRCDIR)/checkother.o \
|
||||||
$(SRCDIR)/checkpostfixoperator.o \
|
$(SRCDIR)/checkpostfixoperator.o \
|
||||||
$(SRCDIR)/checksizeof.o \
|
$(SRCDIR)/checksizeof.o \
|
||||||
|
@ -191,7 +191,7 @@ TESTOBJ = test/options.o \
|
||||||
test/testmemleak.o \
|
test/testmemleak.o \
|
||||||
test/testnonreentrantfunctions.o \
|
test/testnonreentrantfunctions.o \
|
||||||
test/testnullpointer.o \
|
test/testnullpointer.o \
|
||||||
test/testobsoletefunctions.o \
|
test/testobsolescentfunctions.o \
|
||||||
test/testoptions.o \
|
test/testoptions.o \
|
||||||
test/testother.o \
|
test/testother.o \
|
||||||
test/testpath.o \
|
test/testpath.o \
|
||||||
|
@ -323,8 +323,8 @@ $(SRCDIR)/checknonreentrantfunctions.o: lib/checknonreentrantfunctions.cpp lib/c
|
||||||
$(SRCDIR)/checknullpointer.o: lib/checknullpointer.cpp lib/cxx11emu.h lib/checknullpointer.h lib/config.h lib/check.h lib/token.h lib/valueflow.h lib/mathlib.h lib/tokenize.h lib/errorlogger.h lib/suppressions.h lib/tokenlist.h lib/settings.h lib/library.h lib/path.h lib/standards.h lib/timer.h lib/symboldatabase.h
|
$(SRCDIR)/checknullpointer.o: lib/checknullpointer.cpp lib/cxx11emu.h lib/checknullpointer.h lib/config.h lib/check.h lib/token.h lib/valueflow.h lib/mathlib.h lib/tokenize.h lib/errorlogger.h lib/suppressions.h lib/tokenlist.h lib/settings.h lib/library.h lib/path.h lib/standards.h lib/timer.h lib/symboldatabase.h
|
||||||
$(CXX) ${INCLUDE_FOR_LIB} $(CPPFLAGS) $(CFG) $(CXXFLAGS) $(UNDEF_STRICT_ANSI) -std=c++0x -c -o $(SRCDIR)/checknullpointer.o $(SRCDIR)/checknullpointer.cpp
|
$(CXX) ${INCLUDE_FOR_LIB} $(CPPFLAGS) $(CFG) $(CXXFLAGS) $(UNDEF_STRICT_ANSI) -std=c++0x -c -o $(SRCDIR)/checknullpointer.o $(SRCDIR)/checknullpointer.cpp
|
||||||
|
|
||||||
$(SRCDIR)/checkobsoletefunctions.o: lib/checkobsoletefunctions.cpp lib/cxx11emu.h lib/checkobsoletefunctions.h lib/config.h lib/check.h lib/token.h lib/valueflow.h lib/mathlib.h lib/tokenize.h lib/errorlogger.h lib/suppressions.h lib/tokenlist.h lib/settings.h lib/library.h lib/path.h lib/standards.h lib/timer.h lib/symboldatabase.h
|
$(SRCDIR)/checkobsolescentfunctions.o: lib/checkobsolescentfunctions.cpp lib/cxx11emu.h lib/checkobsolescentfunctions.h lib/config.h lib/check.h lib/token.h lib/valueflow.h lib/mathlib.h lib/tokenize.h lib/errorlogger.h lib/suppressions.h lib/tokenlist.h lib/settings.h lib/library.h lib/path.h lib/standards.h lib/timer.h lib/symboldatabase.h
|
||||||
$(CXX) ${INCLUDE_FOR_LIB} $(CPPFLAGS) $(CFG) $(CXXFLAGS) $(UNDEF_STRICT_ANSI) -std=c++0x -c -o $(SRCDIR)/checkobsoletefunctions.o $(SRCDIR)/checkobsoletefunctions.cpp
|
$(CXX) ${INCLUDE_FOR_LIB} $(CPPFLAGS) $(CFG) $(CXXFLAGS) $(UNDEF_STRICT_ANSI) -std=c++0x -c -o $(SRCDIR)/checkobsolescentfunctions.o $(SRCDIR)/checkobsolescentfunctions.cpp
|
||||||
|
|
||||||
$(SRCDIR)/checkother.o: lib/checkother.cpp lib/cxx11emu.h lib/checkother.h lib/config.h lib/check.h lib/token.h lib/valueflow.h lib/mathlib.h lib/tokenize.h lib/errorlogger.h lib/suppressions.h lib/tokenlist.h lib/settings.h lib/library.h lib/path.h lib/standards.h lib/timer.h lib/symboldatabase.h
|
$(SRCDIR)/checkother.o: lib/checkother.cpp lib/cxx11emu.h lib/checkother.h lib/config.h lib/check.h lib/token.h lib/valueflow.h lib/mathlib.h lib/tokenize.h lib/errorlogger.h lib/suppressions.h lib/tokenlist.h lib/settings.h lib/library.h lib/path.h lib/standards.h lib/timer.h lib/symboldatabase.h
|
||||||
$(CXX) ${INCLUDE_FOR_LIB} $(CPPFLAGS) $(CFG) $(CXXFLAGS) $(UNDEF_STRICT_ANSI) -std=c++0x -c -o $(SRCDIR)/checkother.o $(SRCDIR)/checkother.cpp
|
$(CXX) ${INCLUDE_FOR_LIB} $(CPPFLAGS) $(CFG) $(CXXFLAGS) $(UNDEF_STRICT_ANSI) -std=c++0x -c -o $(SRCDIR)/checkother.o $(SRCDIR)/checkother.cpp
|
||||||
|
@ -497,8 +497,8 @@ test/testnonreentrantfunctions.o: test/testnonreentrantfunctions.cpp lib/cxx11em
|
||||||
test/testnullpointer.o: test/testnullpointer.cpp lib/cxx11emu.h lib/tokenize.h lib/errorlogger.h lib/config.h lib/suppressions.h lib/tokenlist.h lib/checknullpointer.h lib/check.h lib/token.h lib/valueflow.h lib/mathlib.h lib/settings.h lib/library.h lib/path.h lib/standards.h lib/timer.h test/testsuite.h test/redirect.h
|
test/testnullpointer.o: test/testnullpointer.cpp lib/cxx11emu.h lib/tokenize.h lib/errorlogger.h lib/config.h lib/suppressions.h lib/tokenlist.h lib/checknullpointer.h lib/check.h lib/token.h lib/valueflow.h lib/mathlib.h lib/settings.h lib/library.h lib/path.h lib/standards.h lib/timer.h test/testsuite.h test/redirect.h
|
||||||
$(CXX) ${INCLUDE_FOR_TEST} $(CPPFLAGS) $(CFG) $(CXXFLAGS) $(UNDEF_STRICT_ANSI) -std=c++0x -c -o test/testnullpointer.o test/testnullpointer.cpp
|
$(CXX) ${INCLUDE_FOR_TEST} $(CPPFLAGS) $(CFG) $(CXXFLAGS) $(UNDEF_STRICT_ANSI) -std=c++0x -c -o test/testnullpointer.o test/testnullpointer.cpp
|
||||||
|
|
||||||
test/testobsoletefunctions.o: test/testobsoletefunctions.cpp lib/cxx11emu.h lib/tokenize.h lib/errorlogger.h lib/config.h lib/suppressions.h lib/tokenlist.h lib/checkobsoletefunctions.h lib/check.h lib/token.h lib/valueflow.h lib/mathlib.h lib/settings.h lib/library.h lib/path.h lib/standards.h lib/timer.h test/testsuite.h test/redirect.h
|
test/testobsolescentfunctions.o: test/testobsolescentfunctions.cpp lib/cxx11emu.h lib/tokenize.h lib/errorlogger.h lib/config.h lib/suppressions.h lib/tokenlist.h lib/checkobsolescentfunctions.h lib/check.h lib/token.h lib/valueflow.h lib/mathlib.h lib/settings.h lib/library.h lib/path.h lib/standards.h lib/timer.h test/testsuite.h test/redirect.h
|
||||||
$(CXX) ${INCLUDE_FOR_TEST} $(CPPFLAGS) $(CFG) $(CXXFLAGS) $(UNDEF_STRICT_ANSI) -std=c++0x -c -o test/testobsoletefunctions.o test/testobsoletefunctions.cpp
|
$(CXX) ${INCLUDE_FOR_TEST} $(CPPFLAGS) $(CFG) $(CXXFLAGS) $(UNDEF_STRICT_ANSI) -std=c++0x -c -o test/testobsolescentfunctions.o test/testobsolescentfunctions.cpp
|
||||||
|
|
||||||
test/testoptions.o: test/testoptions.cpp lib/cxx11emu.h test/options.h test/testsuite.h lib/errorlogger.h lib/config.h lib/suppressions.h test/redirect.h lib/library.h lib/path.h lib/mathlib.h lib/token.h lib/valueflow.h
|
test/testoptions.o: test/testoptions.cpp lib/cxx11emu.h test/options.h test/testsuite.h lib/errorlogger.h lib/config.h lib/suppressions.h test/redirect.h lib/library.h lib/path.h lib/mathlib.h lib/token.h lib/valueflow.h
|
||||||
$(CXX) ${INCLUDE_FOR_TEST} $(CPPFLAGS) $(CFG) $(CXXFLAGS) $(UNDEF_STRICT_ANSI) -std=c++0x -c -o test/testoptions.o test/testoptions.cpp
|
$(CXX) ${INCLUDE_FOR_TEST} $(CPPFLAGS) $(CFG) $(CXXFLAGS) $(UNDEF_STRICT_ANSI) -std=c++0x -c -o test/testoptions.o test/testoptions.cpp
|
||||||
|
|
|
@ -126,8 +126,8 @@
|
||||||
<Unit filename="lib/checknonreentrantfunctions.h" />
|
<Unit filename="lib/checknonreentrantfunctions.h" />
|
||||||
<Unit filename="lib/checknullpointer.cpp" />
|
<Unit filename="lib/checknullpointer.cpp" />
|
||||||
<Unit filename="lib/checknullpointer.h" />
|
<Unit filename="lib/checknullpointer.h" />
|
||||||
<Unit filename="lib/checkobsoletefunctions.cpp" />
|
<Unit filename="lib/checkobsolescentfunctions.cpp" />
|
||||||
<Unit filename="lib/checkobsoletefunctions.h" />
|
<Unit filename="lib/checkobsolescentfunctions.h" />
|
||||||
<Unit filename="lib/checkother.cpp" />
|
<Unit filename="lib/checkother.cpp" />
|
||||||
<Unit filename="lib/checkother.h" />
|
<Unit filename="lib/checkother.h" />
|
||||||
<Unit filename="lib/checkpostfixoperator.cpp" />
|
<Unit filename="lib/checkpostfixoperator.cpp" />
|
||||||
|
@ -191,7 +191,7 @@
|
||||||
<Unit filename="test/testmemleak.cpp" />
|
<Unit filename="test/testmemleak.cpp" />
|
||||||
<Unit filename="test/testnonreentrantfunctions.cpp" />
|
<Unit filename="test/testnonreentrantfunctions.cpp" />
|
||||||
<Unit filename="test/testnullpointer.cpp" />
|
<Unit filename="test/testnullpointer.cpp" />
|
||||||
<Unit filename="test/testobsoletefunctions.cpp" />
|
<Unit filename="test/testobsolescentfunctions.cpp" />
|
||||||
<Unit filename="test/testoptions.cpp" />
|
<Unit filename="test/testoptions.cpp" />
|
||||||
<Unit filename="test/testother.cpp" />
|
<Unit filename="test/testother.cpp" />
|
||||||
<Unit filename="test/testpath.cpp" />
|
<Unit filename="test/testpath.cpp" />
|
||||||
|
|
|
@ -4,6 +4,6 @@
|
||||||
<error file="test.cxx" line="28" id="unreadVariable" severity="style" msg="Variable &#039;b&#039; is assigned a value that is never used"/>
|
<error file="test.cxx" line="28" id="unreadVariable" severity="style" msg="Variable &#039;b&#039; is assigned a value that is never used"/>
|
||||||
<error file="test.cxx" line="31" id="memleak" severity="error" msg="Memory leak: b"/>
|
<error file="test.cxx" line="31" id="memleak" severity="error" msg="Memory leak: b"/>
|
||||||
<error file="test.cxx" line="16" id="mismatchAllocDealloc" severity="error" msg="Mismatching allocation and deallocation: k"/>
|
<error file="test.cxx" line="16" id="mismatchAllocDealloc" severity="error" msg="Mismatching allocation and deallocation: k"/>
|
||||||
<error file="test.cxx" line="31" id="obsoleteFunctionsgets" severity="style" msg="Found obsolete function &#039;gets&#039;. With gets you&#039;ll get buffer overruns if the input data too big for the buffer. It is recommended to use the function &#039;fgets&#039; instead."/>
|
<error file="test.cxx" line="31" id="obsoleteFunctionsgets" severity="style" msg="Found obsolescent function &#039;gets&#039;. With gets you&#039;ll get buffer overruns if the input data too big for the buffer. It is recommended to use the function &#039;fgets&#039; instead."/>
|
||||||
<error file="test.cxx" line="22" id="postfixOperator" severity="performance" msg="Prefix ++/-- operators should be preferred for non-primitive types. Pre-increment/decrement can be more efficient than post-increment/decrement. Post-increment/decrement usually involves keeping a copy of the previous value around and adds a little extra code."/>
|
<error file="test.cxx" line="22" id="postfixOperator" severity="performance" msg="Prefix ++/-- operators should be preferred for non-primitive types. Pre-increment/decrement can be more efficient than post-increment/decrement. Post-increment/decrement usually involves keeping a copy of the previous value around and adds a little extra code."/>
|
||||||
</results>
|
</results>
|
||||||
|
|
|
@ -15,7 +15,7 @@
|
||||||
<location file="test.cxx" line="32"/>
|
<location file="test.cxx" line="32"/>
|
||||||
<location file="test.cxx" line="16"/>
|
<location file="test.cxx" line="16"/>
|
||||||
</error>
|
</error>
|
||||||
<error id="obsoleteFunctionsgets" severity="style" msg="Found obsolete function &#039;gets&#039;. It is recommended to use the function &#039;fgets&#039; instead" verbose="Found obsolete function &#039;gets&#039;. With gets you&#039;ll get buffer overruns if the input data too big for the buffer. It is recommended to use the function &#039;fgets&#039; instead.">
|
<error id="obsoleteFunctionsgets" severity="style" msg="Found obsolescent function &#039;gets&#039;. It is recommended to use the function &#039;fgets&#039; instead" verbose="Found obsolescent function &#039;gets&#039;. With gets you&#039;ll get buffer overruns if the input data too big for the buffer. It is recommended to use the function &#039;fgets&#039; instead.">
|
||||||
<location file="test.cxx" line="31"/>
|
<location file="test.cxx" line="31"/>
|
||||||
</error>
|
</error>
|
||||||
<error id="postfixOperator" severity="performance" msg="Prefer prefix ++/-- operators for non-primitive types." verbose="Prefix ++/-- operators should be preferred for non-primitive types. Pre-increment/decrement can be more efficient than post-increment/decrement. Post-increment/decrement usually involves keeping a copy of the previous value around and adds a little extra code.">
|
<error id="postfixOperator" severity="performance" msg="Prefer prefix ++/-- operators for non-primitive types." verbose="Prefix ++/-- operators should be preferred for non-primitive types. Pre-increment/decrement can be more efficient than post-increment/decrement. Post-increment/decrement usually involves keeping a copy of the previous value around and adds a little extra code.">
|
||||||
|
|
|
@ -1,79 +0,0 @@
|
||||||
/*
|
|
||||||
* Cppcheck - A tool for static C/C++ code analysis
|
|
||||||
* Copyright (C) 2007-2014 Daniel Marjamäki and Cppcheck team.
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
//---------------------------------------------------------------------------
|
|
||||||
// Obsolete functions
|
|
||||||
//---------------------------------------------------------------------------
|
|
||||||
|
|
||||||
#include "checkobsoletefunctions.h"
|
|
||||||
#include "symboldatabase.h"
|
|
||||||
|
|
||||||
//---------------------------------------------------------------------------
|
|
||||||
|
|
||||||
|
|
||||||
// Register this check class (by creating a static instance of it)
|
|
||||||
namespace {
|
|
||||||
CheckObsoleteFunctions instance;
|
|
||||||
}
|
|
||||||
|
|
||||||
void CheckObsoleteFunctions::obsoleteFunctions()
|
|
||||||
{
|
|
||||||
if (!_settings->isEnabled("style"))
|
|
||||||
return;
|
|
||||||
|
|
||||||
const SymbolDatabase *symbolDatabase = _tokenizer->getSymbolDatabase();
|
|
||||||
|
|
||||||
// Functions defined somewhere?
|
|
||||||
for (unsigned int i = 0; i < symbolDatabase->functionScopes.size(); i++) {
|
|
||||||
const Scope* scope = symbolDatabase->functionScopes[i];
|
|
||||||
_obsoleteStandardFunctions.erase(scope->className);
|
|
||||||
_obsoletePosixFunctions.erase(scope->className);
|
|
||||||
_obsoleteC99Functions.erase(scope->className);
|
|
||||||
}
|
|
||||||
|
|
||||||
for (unsigned int i = 0; i < symbolDatabase->functionScopes.size(); i++) {
|
|
||||||
const Scope* scope = symbolDatabase->functionScopes[i];
|
|
||||||
for (const Token* tok = scope->classStart; tok != scope->classEnd; tok = tok->next()) {
|
|
||||||
if (tok->isName() && tok->varId()==0 && (tok->next() && tok->next()->str() == "(") &&
|
|
||||||
(!Token::Match(tok->previous(), ".|::") || Token::simpleMatch(tok->tokAt(-2), "std ::"))) {
|
|
||||||
|
|
||||||
std::map<std::string,std::string>::const_iterator it = _obsoleteStandardFunctions.find(tok->str());
|
|
||||||
if (it != _obsoleteStandardFunctions.end()) {
|
|
||||||
// If checking an old code base it might be uninteresting to update obsolete functions.
|
|
||||||
reportError(tok, Severity::style, "obsoleteFunctions"+it->first, it->second);
|
|
||||||
} else {
|
|
||||||
if (_settings->standards.posix) {
|
|
||||||
it = _obsoletePosixFunctions.find(tok->str());
|
|
||||||
if (it != _obsoletePosixFunctions.end()) {
|
|
||||||
// If checking an old code base it might be uninteresting to update obsolete functions.
|
|
||||||
reportError(tok, Severity::style, "obsoleteFunctions"+it->first, it->second);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (_settings->standards.c >= Standards::C99) {
|
|
||||||
// alloca : this function is obsolete in C but not in C++ (#4382)
|
|
||||||
it = _obsoleteC99Functions.find(tok->str());
|
|
||||||
if (it != _obsoleteC99Functions.end() && !(tok->str() == "alloca" && _tokenizer->isCPP())) {
|
|
||||||
reportError(tok, Severity::style, "obsoleteFunctions"+it->first, it->second);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
//---------------------------------------------------------------------------
|
|
|
@ -1,149 +0,0 @@
|
||||||
/*
|
|
||||||
* Cppcheck - A tool for static C/C++ code analysis
|
|
||||||
* Copyright (C) 2007-2014 Daniel Marjamäki and Cppcheck team.
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
//---------------------------------------------------------------------------
|
|
||||||
#ifndef checkobsoletefunctionsH
|
|
||||||
#define checkobsoletefunctionsH
|
|
||||||
//---------------------------------------------------------------------------
|
|
||||||
|
|
||||||
#include "config.h"
|
|
||||||
#include "check.h"
|
|
||||||
#include <string>
|
|
||||||
#include <map>
|
|
||||||
|
|
||||||
|
|
||||||
/// @addtogroup Checks
|
|
||||||
/// @{
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief Using obsolete functions that are always insecure to use.
|
|
||||||
*/
|
|
||||||
|
|
||||||
class CPPCHECKLIB CheckObsoleteFunctions : public Check {
|
|
||||||
public:
|
|
||||||
/** This constructor is used when registering the CheckObsoleteFunctions */
|
|
||||||
CheckObsoleteFunctions() : Check(myName()) {
|
|
||||||
initObsoleteFunctions();
|
|
||||||
}
|
|
||||||
|
|
||||||
/** This constructor is used when running checks. */
|
|
||||||
CheckObsoleteFunctions(const Tokenizer *tokenizer, const Settings *settings, ErrorLogger *errorLogger)
|
|
||||||
: Check(myName(), tokenizer, settings, errorLogger) {
|
|
||||||
initObsoleteFunctions();
|
|
||||||
}
|
|
||||||
|
|
||||||
void runSimplifiedChecks(const Tokenizer *tokenizer, const Settings *settings, ErrorLogger *errorLogger) {
|
|
||||||
CheckObsoleteFunctions checkObsoleteFunctions(tokenizer, settings, errorLogger);
|
|
||||||
checkObsoleteFunctions.obsoleteFunctions();
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Check for obsolete functions */
|
|
||||||
void obsoleteFunctions();
|
|
||||||
|
|
||||||
private:
|
|
||||||
/* function name / error message */
|
|
||||||
std::map<std::string, std::string> _obsoleteStandardFunctions;
|
|
||||||
std::map<std::string, std::string> _obsoletePosixFunctions;
|
|
||||||
std::map<std::string, std::string> _obsoleteC99Functions;
|
|
||||||
|
|
||||||
/** init obsolete functions list ' */
|
|
||||||
void initObsoleteFunctions() {
|
|
||||||
// Obsolete posix functions, which messages suggest only one alternative and doesn't contain additional information.
|
|
||||||
const struct {
|
|
||||||
const char* bad;
|
|
||||||
const char* good;
|
|
||||||
} posix_stdmsgs[] = {
|
|
||||||
{"bsd_signal", "sigaction"},
|
|
||||||
{"gethostbyaddr", "getnameinfo"},
|
|
||||||
{"gethostbyname", "getaddrinfo"},
|
|
||||||
{"bcmp", "memcmp"},
|
|
||||||
{"bzero", "memset"},
|
|
||||||
{"ecvt", "sprintf"},
|
|
||||||
{"fcvt", "sprintf"},
|
|
||||||
{"gcvt", "sprintf"},
|
|
||||||
{"getwd", "getcwd"},
|
|
||||||
{"index", "strchr"}, // See #2334 (using the Qt Model/View function 'index')
|
|
||||||
{"rindex", "strrchr"},
|
|
||||||
{"pthread_attr_getstackaddr", "pthread_attr_getstack"},
|
|
||||||
{"pthread_attr_setstackaddr", "pthread_attr_setstack"},
|
|
||||||
{"vfork", "fork"},
|
|
||||||
{"wcswcs", "wcsstr"},
|
|
||||||
{"rand_r", "rand"},
|
|
||||||
{"utime", "utimensat"},
|
|
||||||
{"asctime_r", "strftime"},
|
|
||||||
{"ctime_r", "strftime"}
|
|
||||||
};
|
|
||||||
|
|
||||||
for (std::size_t i = 0; i < (sizeof(posix_stdmsgs) / sizeof(*posix_stdmsgs)); ++i) {
|
|
||||||
_obsoletePosixFunctions[posix_stdmsgs[i].bad] = "Obsolete function '" + std::string(posix_stdmsgs[i].bad) + "' called. It is recommended to use the function '" + posix_stdmsgs[i].good + "' instead.";
|
|
||||||
}
|
|
||||||
|
|
||||||
_obsoletePosixFunctions["usleep"] = "Obsolete function 'usleep' called. It is recommended to use the 'nanosleep' or 'setitimer' function instead.\n"
|
|
||||||
"The obsolete function 'usleep' is called. POSIX.1-2001 declares usleep() function obsolete and POSIX.1-2008 removes it. It is recommended that new applications use the 'nanosleep' or 'setitimer' function.";
|
|
||||||
|
|
||||||
_obsoletePosixFunctions["bcopy"] = "Obsolete function 'bcopy' called. It is recommended to use the 'memmove' or 'memcpy' function instead.";
|
|
||||||
|
|
||||||
_obsoletePosixFunctions["ftime"] = "Obsolete function 'ftime' called. It is recommended to use time(), gettimeofday() or clock_gettime() instead.";
|
|
||||||
|
|
||||||
_obsoletePosixFunctions["getcontext"] = "Obsolete function 'getcontext' called. Due to portability issues, applications are recommended to be rewritten to use POSIX threads.";
|
|
||||||
_obsoletePosixFunctions["makecontext"] = "Obsolete function 'makecontext' called. Due to portability issues, applications are recommended to be rewritten to use POSIX threads.";
|
|
||||||
_obsoletePosixFunctions["swapcontext"] = "Obsolete function 'swapcontext' called. Due to portability issues, applications are recommended to be rewritten to use POSIX threads.";
|
|
||||||
|
|
||||||
_obsoletePosixFunctions["scalbln"] = "Obsolete function 'scalb' called. It is recommended to use 'scalbln', 'scalblnf' or 'scalblnl' instead.";
|
|
||||||
|
|
||||||
_obsoletePosixFunctions["ualarm"] = "Obsolete function 'ualarm' called. It is recommended to use 'timer_create', 'timer_delete', 'timer_getoverrun', 'timer_gettime' or 'timer_settime' instead.";
|
|
||||||
|
|
||||||
_obsoletePosixFunctions["tmpnam"] = "Obsolete function 'tmpnam' called. It is recommended to use 'tmpfile', 'mkstemp' or 'mkdtemp' instead.";
|
|
||||||
|
|
||||||
_obsoletePosixFunctions["tmpnam_r"] = "Obsolete function 'tmpnam_r' called. It is recommended to use 'tmpfile', 'mkstemp' or 'mkdtemp' instead.";
|
|
||||||
|
|
||||||
_obsoleteStandardFunctions["gets"] = "Obsolete function 'gets' called. It is recommended to use the function 'fgets' instead.\n"
|
|
||||||
"The obsolete function 'gets' is called. With 'gets' you'll get a buffer overrun if the input data exceeds the size of the buffer. It is recommended to use the function 'fgets' instead.";
|
|
||||||
_obsoleteC99Functions["alloca"] = "Obsolete function 'alloca' called. In C99 and later it is recommended to use a variable length array instead.\n"
|
|
||||||
"The obsolete function 'alloca' is called. In C99 and later it is recommended to use a variable length array or a dynamically allocated array instead. The function 'alloca' is dangerous for many reasons (http://stackoverflow.com/questions/1018853/why-is-alloca-not-considered-good-practice and http://linux.die.net/man/3/alloca).";
|
|
||||||
_obsoleteC99Functions["asctime"] = "Obsolete function 'asctime' called. It is recommended to use the function 'strftime' instead.";
|
|
||||||
// ctime is obsolete - it's not threadsafe. but there is no good replacement.
|
|
||||||
//_obsoleteC99Functions["ctime"] = "Obsolete function 'ctime' called. It is recommended to use the function 'strftime' instead.";
|
|
||||||
}
|
|
||||||
|
|
||||||
void getErrorMessages(ErrorLogger *errorLogger, const Settings *settings) const {
|
|
||||||
CheckObsoleteFunctions c(0, settings, errorLogger);
|
|
||||||
|
|
||||||
std::map<std::string,std::string>::const_iterator it(_obsoletePosixFunctions.begin()), itend(_obsoletePosixFunctions.end());
|
|
||||||
for (; it!=itend; ++it) {
|
|
||||||
c.reportError(0, Severity::style, "obsoleteFunctions"+it->first, it->second);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static std::string myName() {
|
|
||||||
return "Obsolete functions";
|
|
||||||
}
|
|
||||||
|
|
||||||
std::string classInfo() const {
|
|
||||||
std::string info = "Warn if any of these obsolete functions are used:\n";
|
|
||||||
std::map<std::string,std::string>::const_iterator it(_obsoletePosixFunctions.begin()), itend(_obsoletePosixFunctions.end());
|
|
||||||
for (; it!=itend; ++it) {
|
|
||||||
info += "* " + it->first + "\n";
|
|
||||||
}
|
|
||||||
return info;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
/// @}
|
|
||||||
//---------------------------------------------------------------------------
|
|
||||||
#endif // checkobsoletefunctionsH
|
|
|
@ -53,7 +53,7 @@
|
||||||
<ClCompile Include="checkmemoryleak.cpp" />
|
<ClCompile Include="checkmemoryleak.cpp" />
|
||||||
<ClCompile Include="checknonreentrantfunctions.cpp" />
|
<ClCompile Include="checknonreentrantfunctions.cpp" />
|
||||||
<ClCompile Include="checknullpointer.cpp" />
|
<ClCompile Include="checknullpointer.cpp" />
|
||||||
<ClCompile Include="checkobsoletefunctions.cpp" />
|
<ClCompile Include="checkobsolescentfunctions.cpp" />
|
||||||
<ClCompile Include="checkother.cpp" />
|
<ClCompile Include="checkother.cpp" />
|
||||||
<ClCompile Include="checkpostfixoperator.cpp" />
|
<ClCompile Include="checkpostfixoperator.cpp" />
|
||||||
<ClCompile Include="checksizeof.cpp" />
|
<ClCompile Include="checksizeof.cpp" />
|
||||||
|
@ -99,7 +99,7 @@
|
||||||
<ClInclude Include="checkmemoryleak.h" />
|
<ClInclude Include="checkmemoryleak.h" />
|
||||||
<ClInclude Include="checknonreentrantfunctions.h" />
|
<ClInclude Include="checknonreentrantfunctions.h" />
|
||||||
<ClInclude Include="checknullpointer.h" />
|
<ClInclude Include="checknullpointer.h" />
|
||||||
<ClInclude Include="checkobsoletefunctions.h" />
|
<ClInclude Include="checkobsolescentfunctions.h" />
|
||||||
<ClInclude Include="checkother.h" />
|
<ClInclude Include="checkother.h" />
|
||||||
<ClInclude Include="checkpostfixoperator.h" />
|
<ClInclude Include="checkpostfixoperator.h" />
|
||||||
<ClInclude Include="checksizeof.h" />
|
<ClInclude Include="checksizeof.h" />
|
||||||
|
|
|
@ -38,7 +38,7 @@
|
||||||
<ClCompile Include="checknullpointer.cpp">
|
<ClCompile Include="checknullpointer.cpp">
|
||||||
<Filter>Source Files</Filter>
|
<Filter>Source Files</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="checkobsoletefunctions.cpp">
|
<ClCompile Include="checkobsolescentfunctions.cpp">
|
||||||
<Filter>Source Files</Filter>
|
<Filter>Source Files</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="checkother.cpp">
|
<ClCompile Include="checkother.cpp">
|
||||||
|
@ -163,7 +163,7 @@
|
||||||
<ClInclude Include="checknullpointer.h">
|
<ClInclude Include="checknullpointer.h">
|
||||||
<Filter>Header Files</Filter>
|
<Filter>Header Files</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="checkobsoletefunctions.h">
|
<ClInclude Include="checkobsolescentfunctions.h">
|
||||||
<Filter>Header Files</Filter>
|
<Filter>Header Files</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="checkother.h">
|
<ClInclude Include="checkother.h">
|
||||||
|
|
|
@ -22,7 +22,7 @@ HEADERS += $${BASEPATH}check.h \
|
||||||
$${BASEPATH}checkmemoryleak.h \
|
$${BASEPATH}checkmemoryleak.h \
|
||||||
$${BASEPATH}checknonreentrantfunctions.h \
|
$${BASEPATH}checknonreentrantfunctions.h \
|
||||||
$${BASEPATH}checknullpointer.h \
|
$${BASEPATH}checknullpointer.h \
|
||||||
$${BASEPATH}checkobsoletefunctions.h \
|
$${BASEPATH}checkobsolescentfunctions.h \
|
||||||
$${BASEPATH}checkother.h \
|
$${BASEPATH}checkother.h \
|
||||||
$${BASEPATH}checkpostfixoperator.h \
|
$${BASEPATH}checkpostfixoperator.h \
|
||||||
$${BASEPATH}checksizeof.h \
|
$${BASEPATH}checksizeof.h \
|
||||||
|
@ -67,7 +67,7 @@ SOURCES += $${BASEPATH}check.cpp \
|
||||||
$${BASEPATH}checkmemoryleak.cpp \
|
$${BASEPATH}checkmemoryleak.cpp \
|
||||||
$${BASEPATH}checknonreentrantfunctions.cpp \
|
$${BASEPATH}checknonreentrantfunctions.cpp \
|
||||||
$${BASEPATH}checknullpointer.cpp \
|
$${BASEPATH}checknullpointer.cpp \
|
||||||
$${BASEPATH}checkobsoletefunctions.cpp \
|
$${BASEPATH}checkobsolescentfunctions.cpp \
|
||||||
$${BASEPATH}checkother.cpp \
|
$${BASEPATH}checkother.cpp \
|
||||||
$${BASEPATH}checkpostfixoperator.cpp \
|
$${BASEPATH}checkpostfixoperator.cpp \
|
||||||
$${BASEPATH}checksizeof.cpp \
|
$${BASEPATH}checksizeof.cpp \
|
||||||
|
|
|
@ -27,7 +27,7 @@ SOURCES += $${BASEPATH}/test64bit.cpp \
|
||||||
$${BASEPATH}/testmemleak.cpp \
|
$${BASEPATH}/testmemleak.cpp \
|
||||||
$${BASEPATH}/testnonreentrantfunctions.cpp \
|
$${BASEPATH}/testnonreentrantfunctions.cpp \
|
||||||
$${BASEPATH}/testnullpointer.cpp \
|
$${BASEPATH}/testnullpointer.cpp \
|
||||||
$${BASEPATH}/testobsoletefunctions.cpp \
|
$${BASEPATH}/testobsolescentfunctions.cpp \
|
||||||
$${BASEPATH}/testoptions.cpp \
|
$${BASEPATH}/testoptions.cpp \
|
||||||
$${BASEPATH}/testother.cpp \
|
$${BASEPATH}/testother.cpp \
|
||||||
$${BASEPATH}/testpath.cpp \
|
$${BASEPATH}/testpath.cpp \
|
||||||
|
|
|
@ -1,307 +0,0 @@
|
||||||
/*
|
|
||||||
* Cppcheck - A tool for static C/C++ code analysis
|
|
||||||
* Copyright (C) 2007-2014 Daniel Marjamäki and Cppcheck team.
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
#include "tokenize.h"
|
|
||||||
#include "checkobsoletefunctions.h"
|
|
||||||
#include "testsuite.h"
|
|
||||||
|
|
||||||
#include <sstream>
|
|
||||||
|
|
||||||
extern std::ostringstream errout;
|
|
||||||
|
|
||||||
class TestObsoleteFunctions : public TestFixture {
|
|
||||||
public:
|
|
||||||
TestObsoleteFunctions() : TestFixture("TestObsoleteFunctions") {
|
|
||||||
}
|
|
||||||
|
|
||||||
private:
|
|
||||||
|
|
||||||
void run() {
|
|
||||||
TEST_CASE(testbsd_signal);
|
|
||||||
TEST_CASE(testgethostbyname);
|
|
||||||
TEST_CASE(testgethostbyaddr);
|
|
||||||
TEST_CASE(testusleep);
|
|
||||||
TEST_CASE(testindex);
|
|
||||||
TEST_CASE(test_qt_index); // FP when using the Qt function 'index'?
|
|
||||||
TEST_CASE(testrindex);
|
|
||||||
|
|
||||||
// no false positives for variables
|
|
||||||
TEST_CASE(testvar);
|
|
||||||
|
|
||||||
// dangerous function
|
|
||||||
TEST_CASE(testgets);
|
|
||||||
|
|
||||||
TEST_CASE(testalloca);
|
|
||||||
|
|
||||||
// declared function ticket #3121
|
|
||||||
TEST_CASE(test_declared_function);
|
|
||||||
|
|
||||||
// test std::gets
|
|
||||||
TEST_CASE(test_std_gets);
|
|
||||||
|
|
||||||
// multiple use of obsolete functions
|
|
||||||
TEST_CASE(test_multiple);
|
|
||||||
|
|
||||||
// c declared function
|
|
||||||
TEST_CASE(test_c_declaration);
|
|
||||||
|
|
||||||
// function with body
|
|
||||||
TEST_CASE(test_function_with_body);
|
|
||||||
|
|
||||||
// null pointer dereference in obsoleteFunctions
|
|
||||||
TEST_CASE(ticket3238);
|
|
||||||
}
|
|
||||||
|
|
||||||
void check(const char code[], const char filename[]="test.cpp") {
|
|
||||||
// Clear the error buffer..
|
|
||||||
errout.str("");
|
|
||||||
|
|
||||||
Settings settings;
|
|
||||||
settings.addEnabled("style");
|
|
||||||
settings.standards.posix = true;
|
|
||||||
settings.standards.c = Standards::C11;
|
|
||||||
|
|
||||||
// Tokenize..
|
|
||||||
Tokenizer tokenizer(&settings, this);
|
|
||||||
std::istringstream istr(code);
|
|
||||||
tokenizer.tokenize(istr, filename);
|
|
||||||
tokenizer.simplifyTokenList2();
|
|
||||||
|
|
||||||
// Check for obsolete functions..
|
|
||||||
CheckObsoleteFunctions checkObsoleteFunctions(&tokenizer, &settings, this);
|
|
||||||
checkObsoleteFunctions.obsoleteFunctions();
|
|
||||||
}
|
|
||||||
|
|
||||||
void testbsd_signal() {
|
|
||||||
check("void f()\n"
|
|
||||||
"{\n"
|
|
||||||
" bsd_signal(SIGABRT, SIG_IGN);\n"
|
|
||||||
"}");
|
|
||||||
ASSERT_EQUALS("[test.cpp:3]: (style) Obsolete function 'bsd_signal' called. It is recommended to use the function 'sigaction' instead.\n", errout.str());
|
|
||||||
|
|
||||||
check("int f()\n"
|
|
||||||
"{\n"
|
|
||||||
" int bsd_signal(0);\n"
|
|
||||||
" return bsd_signal;\n"
|
|
||||||
"}");
|
|
||||||
ASSERT_EQUALS("", errout.str());
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void testgethostbyname() {
|
|
||||||
check("void f()\n"
|
|
||||||
"{\n"
|
|
||||||
" struct hostent *hp;\n"
|
|
||||||
" if(!hp = gethostbyname('127.0.0.1')) {\n"
|
|
||||||
" exit(1);\n"
|
|
||||||
" }\n"
|
|
||||||
"}");
|
|
||||||
ASSERT_EQUALS("[test.cpp:4]: (style) Obsolete function 'gethostbyname' called. It is recommended to use the function 'getaddrinfo' instead.\n", errout.str());
|
|
||||||
}
|
|
||||||
|
|
||||||
void testgethostbyaddr() {
|
|
||||||
check("void f()\n"
|
|
||||||
"{\n"
|
|
||||||
" long addr;\n"
|
|
||||||
" addr = inet_addr('127.0.0.1');\n"
|
|
||||||
" if(!hp = gethostbyaddr((char *) &addr, sizeof(addr), AF_INET)) {\n"
|
|
||||||
" exit(1);\n"
|
|
||||||
" }\n"
|
|
||||||
"}");
|
|
||||||
ASSERT_EQUALS("[test.cpp:5]: (style) Obsolete function 'gethostbyaddr' called. It is recommended to use the function 'getnameinfo' instead.\n", errout.str());
|
|
||||||
}
|
|
||||||
|
|
||||||
void testusleep() {
|
|
||||||
check("void f()\n"
|
|
||||||
"{\n"
|
|
||||||
" usleep( 1000 );\n"
|
|
||||||
"}");
|
|
||||||
ASSERT_EQUALS("[test.cpp:3]: (style) Obsolete function 'usleep' called. It is recommended to use the 'nanosleep' or 'setitimer' function instead.\n", errout.str());
|
|
||||||
}
|
|
||||||
|
|
||||||
void testindex() {
|
|
||||||
|
|
||||||
check("namespace n1 {\n"
|
|
||||||
" int index(){};\n"
|
|
||||||
"}\n"
|
|
||||||
"int main()\n"
|
|
||||||
"{\n"
|
|
||||||
" n1::index();\n"
|
|
||||||
"}");
|
|
||||||
ASSERT_EQUALS("", errout.str());
|
|
||||||
|
|
||||||
check("std::size_t f()\n"
|
|
||||||
"{\n"
|
|
||||||
" std::size_t index(0);\n"
|
|
||||||
" index++;\n"
|
|
||||||
" return index;\n"
|
|
||||||
"}");
|
|
||||||
ASSERT_EQUALS("", errout.str());
|
|
||||||
|
|
||||||
check("int f()\n"
|
|
||||||
"{\n"
|
|
||||||
" return this->index();\n"
|
|
||||||
"}");
|
|
||||||
ASSERT_EQUALS("", errout.str());
|
|
||||||
|
|
||||||
check("void f()\n"
|
|
||||||
"{\n"
|
|
||||||
" int index( 0 );\n"
|
|
||||||
"}");
|
|
||||||
ASSERT_EQUALS("", errout.str());
|
|
||||||
|
|
||||||
check("const char f()\n"
|
|
||||||
"{\n"
|
|
||||||
" const char var[6] = 'index';\n"
|
|
||||||
" const char i = index(var, 0);\n"
|
|
||||||
" return i;\n"
|
|
||||||
"}");
|
|
||||||
ASSERT_EQUALS("[test.cpp:4]: (style) Obsolete function 'index' called. It is recommended to use the function 'strchr' instead.\n",
|
|
||||||
errout.str());
|
|
||||||
}
|
|
||||||
|
|
||||||
void test_qt_index() {
|
|
||||||
check("void TDataModel::forceRowRefresh(int row) {\n"
|
|
||||||
" emit dataChanged(index(row, 0), index(row, columnCount() - 1));\n"
|
|
||||||
"}");
|
|
||||||
ASSERT_EQUALS("[test.cpp:2]: (style) Obsolete function 'index' called. It is recommended to use the function 'strchr' instead.\n", errout.str());
|
|
||||||
}
|
|
||||||
|
|
||||||
void testrindex() {
|
|
||||||
check("void f()\n"
|
|
||||||
"{\n"
|
|
||||||
" int rindex( 0 );\n"
|
|
||||||
"}");
|
|
||||||
ASSERT_EQUALS("", errout.str());
|
|
||||||
|
|
||||||
check("void f()\n"
|
|
||||||
"{\n"
|
|
||||||
" const char var[7] = 'rindex';\n"
|
|
||||||
" print(rindex(var, 0));\n"
|
|
||||||
"}");
|
|
||||||
ASSERT_EQUALS("[test.cpp:4]: (style) Obsolete function 'rindex' called. It is recommended to use the function 'strrchr' instead.\n", errout.str());
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void testvar() {
|
|
||||||
check("class Fred {\n"
|
|
||||||
"public:\n"
|
|
||||||
" Fred() : index(0) { }\n"
|
|
||||||
" int index;\n"
|
|
||||||
"};");
|
|
||||||
ASSERT_EQUALS("", errout.str());
|
|
||||||
}
|
|
||||||
|
|
||||||
void testgets() {
|
|
||||||
check("void f()\n"
|
|
||||||
"{\n"
|
|
||||||
" char *x = gets();\n"
|
|
||||||
"}");
|
|
||||||
ASSERT_EQUALS("[test.cpp:3]: (style) Obsolete function 'gets' called. It is recommended to use the function 'fgets' instead.\n", errout.str());
|
|
||||||
|
|
||||||
check("void f()\n"
|
|
||||||
"{\n"
|
|
||||||
" foo(x, gets());\n"
|
|
||||||
"}");
|
|
||||||
ASSERT_EQUALS("[test.cpp:3]: (style) Obsolete function 'gets' called. It is recommended to use the function 'fgets' instead.\n", errout.str());
|
|
||||||
}
|
|
||||||
|
|
||||||
void testalloca() {
|
|
||||||
check("void f()\n"
|
|
||||||
"{\n"
|
|
||||||
" char *x = alloca(10);\n"
|
|
||||||
"}\n", "test.cpp"); // #4382 - there are no VLAs in C++
|
|
||||||
ASSERT_EQUALS("", errout.str());
|
|
||||||
|
|
||||||
check("void f()\n"
|
|
||||||
"{\n"
|
|
||||||
" char *x = alloca(10);\n"
|
|
||||||
"}\n", "test.c");
|
|
||||||
ASSERT_EQUALS("[test.c:3]: (style) Obsolete function 'alloca' called. In C99 and later it is recommended to use a variable length array instead.\n", errout.str());
|
|
||||||
}
|
|
||||||
|
|
||||||
// ticket #3121
|
|
||||||
void test_declared_function() {
|
|
||||||
check("int ftime ( int a )\n"
|
|
||||||
"{\n"
|
|
||||||
" return a;\n"
|
|
||||||
"}\n"
|
|
||||||
"int main ()\n"
|
|
||||||
"{\n"
|
|
||||||
" int b ; b = ftime ( 1 ) ;\n"
|
|
||||||
" return 0 ;\n"
|
|
||||||
"}");
|
|
||||||
ASSERT_EQUALS("", errout.str());
|
|
||||||
}
|
|
||||||
|
|
||||||
// test std::gets
|
|
||||||
void test_std_gets() {
|
|
||||||
check("void f(char * str)\n"
|
|
||||||
"{\n"
|
|
||||||
" char *x = std::gets(str);\n"
|
|
||||||
"}");
|
|
||||||
ASSERT_EQUALS("[test.cpp:3]: (style) Obsolete function 'gets' called. It is recommended to use the function 'fgets' instead.\n", errout.str());
|
|
||||||
}
|
|
||||||
|
|
||||||
// multiple use
|
|
||||||
void test_multiple() {
|
|
||||||
check("void f(char * str)\n"
|
|
||||||
"{\n"
|
|
||||||
" char *x = std::gets(str);\n"
|
|
||||||
" usleep( 1000 );\n"
|
|
||||||
"}");
|
|
||||||
ASSERT_EQUALS("[test.cpp:3]: (style) Obsolete function 'gets' called. It is recommended to use the function 'fgets' instead.\n"
|
|
||||||
"[test.cpp:4]: (style) Obsolete function 'usleep' called. It is recommended to use the 'nanosleep' or 'setitimer' function instead.\n", errout.str());
|
|
||||||
}
|
|
||||||
|
|
||||||
void test_c_declaration() {
|
|
||||||
check("char * gets ( char * c ) ;\n"
|
|
||||||
"int main ()\n"
|
|
||||||
"{\n"
|
|
||||||
" char s [ 10 ] ;\n"
|
|
||||||
" gets ( s ) ;\n"
|
|
||||||
"}");
|
|
||||||
ASSERT_EQUALS("[test.cpp:5]: (style) Obsolete function 'gets' called. It is recommended to use the function 'fgets' instead.\n", errout.str());
|
|
||||||
|
|
||||||
check("int getcontext(ucontext_t *ucp);\n"
|
|
||||||
"int f (ucontext_t *ucp)\n"
|
|
||||||
"{\n"
|
|
||||||
" getcontext ( ucp ) ;\n"
|
|
||||||
"}");
|
|
||||||
ASSERT_EQUALS("[test.cpp:4]: (style) Obsolete function 'getcontext' called. Due to portability issues, applications are recommended to be rewritten to use POSIX threads.\n", errout.str());
|
|
||||||
}
|
|
||||||
|
|
||||||
void test_function_with_body() {
|
|
||||||
check("char * gets ( char * c ) { return c; }\n"
|
|
||||||
"int main ()\n"
|
|
||||||
"{\n"
|
|
||||||
" char s [ 10 ] ;\n"
|
|
||||||
" gets ( s ) ;\n"
|
|
||||||
"}");
|
|
||||||
ASSERT_EQUALS("", errout.str());
|
|
||||||
}
|
|
||||||
|
|
||||||
void ticket3238() {
|
|
||||||
check("__FBSDID(\"...\");\n");
|
|
||||||
ASSERT_EQUALS("", errout.str());
|
|
||||||
}
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
REGISTER_TEST(TestObsoleteFunctions)
|
|
|
@ -54,7 +54,7 @@
|
||||||
<ClCompile Include="testmemleak.cpp" />
|
<ClCompile Include="testmemleak.cpp" />
|
||||||
<ClCompile Include="testnonreentrantfunctions.cpp" />
|
<ClCompile Include="testnonreentrantfunctions.cpp" />
|
||||||
<ClCompile Include="testnullpointer.cpp" />
|
<ClCompile Include="testnullpointer.cpp" />
|
||||||
<ClCompile Include="testobsoletefunctions.cpp" />
|
<ClCompile Include="testobsolescentfunctions.cpp" />
|
||||||
<ClCompile Include="testoptions.cpp" />
|
<ClCompile Include="testoptions.cpp" />
|
||||||
<ClCompile Include="testother.cpp" />
|
<ClCompile Include="testother.cpp" />
|
||||||
<ClCompile Include="testpath.cpp" />
|
<ClCompile Include="testpath.cpp" />
|
||||||
|
|
|
@ -70,7 +70,7 @@
|
||||||
<ClCompile Include="testnullpointer.cpp">
|
<ClCompile Include="testnullpointer.cpp">
|
||||||
<Filter>Source Files</Filter>
|
<Filter>Source Files</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="testobsoletefunctions.cpp">
|
<ClCompile Include="testobsolescentfunctions.cpp">
|
||||||
<Filter>Source Files</Filter>
|
<Filter>Source Files</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="testoptions.cpp">
|
<ClCompile Include="testoptions.cpp">
|
||||||
|
|
|
@ -5682,7 +5682,7 @@ private:
|
||||||
ASSERT_EQUALS("int main ( int argc , char * argv [ ] ) { }", tokenizeAndStringify("int main(argc,argv) int argc; char *argv[]; { }"));
|
ASSERT_EQUALS("int main ( int argc , char * argv [ ] ) { }", tokenizeAndStringify("int main(argc,argv) int argc; char *argv[]; { }"));
|
||||||
ASSERT_EQUALS("int f ( int p , int w , float d ) { }", tokenizeAndStringify("int f(p,w,d) float d; { }"));
|
ASSERT_EQUALS("int f ( int p , int w , float d ) { }", tokenizeAndStringify("int f(p,w,d) float d; { }"));
|
||||||
|
|
||||||
// #1067 - Not simplified. Feel free to fix so it is simplified correctly but this syntax is obsolete.
|
// #1067 - Not simplified. Feel free to fix so it is simplified correctly but this syntax is obsolescent.
|
||||||
ASSERT_EQUALS("int ( * d ( a , b , c ) ) ( ) int a ; int b ; int c ; { }", tokenizeAndStringify("int (*d(a,b,c))()int a,b,c; { }"));
|
ASSERT_EQUALS("int ( * d ( a , b , c ) ) ( ) int a ; int b ; int c ; { }", tokenizeAndStringify("int (*d(a,b,c))()int a,b,c; { }"));
|
||||||
|
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue