21 #ifndef checkobsoletefunctionsH
22 #define checkobsoletefunctionsH
42 initObsoleteFunctions();
47 :
Check(myName(), tokenizer, settings, errorLogger) {
56 void obsoleteFunctions();
71 {
"bsd_signal",
"sigaction"},
72 {
"gethostbyaddr",
"getnameinfo"},
73 {
"gethostbyname",
"getaddrinfo"},
81 {
"rindex",
"strrchr"},
82 {
"pthread_attr_getstackaddr",
"pthread_attr_getstack"},
83 {
"pthread_attr_setstackaddr",
"pthread_attr_setstack"},
87 {
"utime",
"utimensat"},
88 {
"asctime_r",
"strftime"},
89 {
"ctime_r",
"strftime"}
92 for (std::size_t i = 0; i < (
sizeof(posix_stdmsgs) /
sizeof(*posix_stdmsgs)); ++i) {
93 _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.";
96 _obsoletePosixFunctions[
"usleep"] =
"Obsolete function 'usleep' called. It is recommended to use the 'nanosleep' or 'setitimer' function instead.\n"
97 "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.";
99 _obsoletePosixFunctions[
"bcopy"] =
"Obsolete function 'bcopy' called. It is recommended to use the 'memmove' or 'memcpy' function instead.";
101 _obsoletePosixFunctions[
"ftime"] =
"Obsolete function 'ftime' called. It is recommended to use time(), gettimeofday() or clock_gettime() instead.";
103 _obsoletePosixFunctions[
"getcontext"] =
"Obsolete function 'getcontext' called. Due to portability issues, applications are recommended to be rewritten to use POSIX threads.";
104 _obsoletePosixFunctions[
"makecontext"] =
"Obsolete function 'makecontext' called. Due to portability issues, applications are recommended to be rewritten to use POSIX threads.";
105 _obsoletePosixFunctions[
"swapcontext"] =
"Obsolete function 'swapcontext' called. Due to portability issues, applications are recommended to be rewritten to use POSIX threads.";
107 _obsoletePosixFunctions[
"scalbln"] =
"Obsolete function 'scalb' called. It is recommended to use 'scalbln', 'scalblnf' or 'scalblnl' instead.";
109 _obsoletePosixFunctions[
"ualarm"] =
"Obsolete function 'ualarm' called. It is recommended to use 'timer_create', 'timer_delete', 'timer_getoverrun', 'timer_gettime' or 'timer_settime' instead.";
111 _obsoletePosixFunctions[
"tmpnam"] =
"Obsolete function 'tmpnam' called. It is recommended to use 'tmpfile', 'mkstemp' or 'mkdtemp' instead.";
113 _obsoletePosixFunctions[
"tmpnam_r"] =
"Obsolete function 'tmpnam_r' called. It is recommended to use 'tmpfile', 'mkstemp' or 'mkdtemp' instead.";
115 _obsoleteStandardFunctions[
"gets"] =
"Obsolete function 'gets' called. It is recommended to use the function 'fgets' instead.\n"
116 "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.";
117 _obsoleteC99Functions[
"alloca"] =
"Obsolete function 'alloca' called. In C99 and later it is recommended to use a variable length array instead.\n"
118 "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).";
119 _obsoleteC99Functions[
"asctime"] =
"Obsolete function 'asctime' called. It is recommended to use the function 'strftime' instead.";
127 for (std::map<std::string, std::string>::const_iterator it = _obsoleteStandardFunctions.begin(); it != _obsoleteStandardFunctions.end(); ++it)
129 for (std::map<std::string, std::string>::const_iterator it = _obsoleteC99Functions.begin(); it != _obsoleteC99Functions.end(); ++it)
131 for (std::map<std::string, std::string>::const_iterator it = _obsoletePosixFunctions.begin(); it != _obsoletePosixFunctions.end(); ++it)
136 return "Obsolete functions";
140 std::string info =
"Warn if any of these obsolete functions are used:\n";
141 for (std::map<std::string, std::string>::const_iterator it = _obsoleteStandardFunctions.begin(); it != _obsoleteStandardFunctions.end(); ++it)
142 info +=
"- " + it->first +
"\n";
143 for (std::map<std::string, std::string>::const_iterator it = _obsoleteC99Functions.begin(); it != _obsoleteC99Functions.end(); ++it)
144 info +=
"- " + it->first +
"\n";
145 for (std::map<std::string, std::string>::const_iterator it = _obsoletePosixFunctions.begin(); it != _obsoletePosixFunctions.end(); ++it)
146 info +=
"- " + it->first +
"\n";
152 #endif // checkobsoletefunctionsH