21 #ifndef checkobsoletefunctionsH
22 #define checkobsoletefunctionsH
42 initObsoleteFunctions();
47 :
Check(myName(), tokenizer, settings, errorLogger) {
48 initObsoleteFunctions();
57 void obsoleteFunctions();
72 {
"bsd_signal",
"sigaction"},
73 {
"gethostbyaddr",
"getnameinfo"},
74 {
"gethostbyname",
"getaddrinfo"},
82 {
"rindex",
"strrchr"},
83 {
"pthread_attr_getstackaddr",
"pthread_attr_getstack"},
84 {
"pthread_attr_setstackaddr",
"pthread_attr_setstack"},
88 {
"utime",
"utimensat"},
89 {
"asctime_r",
"strftime"},
90 {
"ctime_r",
"strftime"}
93 for (std::size_t i = 0; i < (
sizeof(posix_stdmsgs) /
sizeof(*posix_stdmsgs)); ++i) {
94 _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.";
97 _obsoletePosixFunctions[
"usleep"] =
"Obsolete function 'usleep' called. It is recommended to use the 'nanosleep' or 'setitimer' function instead.\n"
98 "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.";
100 _obsoletePosixFunctions[
"bcopy"] =
"Obsolete function 'bcopy' called. It is recommended to use the 'memmove' or 'memcpy' function instead.";
102 _obsoletePosixFunctions[
"ftime"] =
"Obsolete function 'ftime' called. It is recommended to use time(), gettimeofday() or clock_gettime() instead.";
104 _obsoletePosixFunctions[
"getcontext"] =
"Obsolete function 'getcontext' called. Due to portability issues, applications are recommended to be rewritten to use POSIX threads.";
105 _obsoletePosixFunctions[
"makecontext"] =
"Obsolete function 'makecontext' called. Due to portability issues, applications are recommended to be rewritten to use POSIX threads.";
106 _obsoletePosixFunctions[
"swapcontext"] =
"Obsolete function 'swapcontext' called. Due to portability issues, applications are recommended to be rewritten to use POSIX threads.";
108 _obsoletePosixFunctions[
"scalbln"] =
"Obsolete function 'scalb' called. It is recommended to use 'scalbln', 'scalblnf' or 'scalblnl' instead.";
110 _obsoletePosixFunctions[
"ualarm"] =
"Obsolete function 'ualarm' called. It is recommended to use 'timer_create', 'timer_delete', 'timer_getoverrun', 'timer_gettime' or 'timer_settime' instead.";
112 _obsoletePosixFunctions[
"tmpnam"] =
"Obsolete function 'tmpnam' called. It is recommended to use 'tmpfile', 'mkstemp' or 'mkdtemp' instead.";
114 _obsoletePosixFunctions[
"tmpnam_r"] =
"Obsolete function 'tmpnam_r' called. It is recommended to use 'tmpfile', 'mkstemp' or 'mkdtemp' instead.";
116 _obsoleteStandardFunctions[
"gets"] =
"Obsolete function 'gets' called. It is recommended to use the function 'fgets' instead.\n"
117 "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.";
118 _obsoleteC99Functions[
"alloca"] =
"Obsolete function 'alloca' called. In C99 and later it is recommended to use a variable length array instead.\n"
119 "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).";
120 _obsoleteC99Functions[
"asctime"] =
"Obsolete function 'asctime' called. It is recommended to use the function 'strftime' instead.";
128 std::map<std::string,std::string>::const_iterator it(_obsoletePosixFunctions.begin()), itend(_obsoletePosixFunctions.end());
129 for (; it!=itend; ++it) {
135 return "Obsolete functions";
139 std::string info =
"Warn if any of these obsolete functions are used:\n";
140 std::map<std::string,std::string>::const_iterator it(_obsoletePosixFunctions.begin()), itend(_obsoletePosixFunctions.end());
141 for (; it!=itend; ++it) {
142 info +=
"* " + it->first +
"\n";
149 #endif // checkobsoletefunctionsH