Revision: 75965
          http://sourceforge.net/p/brlcad/code/75965
Author:   starseeker
Date:     2020-05-28 18:13:11 +0000 (Thu, 28 May 2020)
Log Message:
-----------
Add a check to make sure we don't introduce std::system into repocheck.  (Can't 
do plain 'system' yet as it's currently used by tienet_master.c in adrt.)

Modified Paths:
--------------
    brlcad/trunk/regress/repository/repocheck.cpp

Modified: brlcad/trunk/regress/repository/repocheck.cpp
===================================================================
--- brlcad/trunk/regress/repository/repocheck.cpp       2020-05-28 17:43:02 UTC 
(rev 75964)
+++ brlcad/trunk/regress/repository/repocheck.cpp       2020-05-28 18:13:11 UTC 
(rev 75965)
@@ -91,6 +91,9 @@
        std::map<std::string, std::vector<std::regex>> api_exemptions;
        std::map<std::string, std::regex> api_func_filters;
 
+       /* do-not-use functions */
+       std::map<std::string, std::regex> dnu_filters;
+
        /* platform symbols */
        std::map<std::pair<std::string, std::string>, std::regex> 
platform_checks;
        std::vector<std::regex> platform_file_filters;
@@ -103,6 +106,7 @@
        std::vector<std::string> bio_log;
        std::vector<std::string> bnet_log;
        std::vector<std::string> common_log;
+       std::vector<std::string> dnu_log;
        std::vector<std::string> setprogname_log;
        std::vector<std::string> symbol_inc_log;
        std::vector<std::string> symbol_src_log;
@@ -292,6 +296,22 @@
        
r.api_exemptions[std::string("strncpy")].push_back(std::regex(".*/wfobj/obj_util[.]cpp$"));
     }
 
+    /* Do-not-use function check regex */
+    {
+       const char *dnu_func_strs[] {
+           "std::system",
+           NULL
+       };
+       cnt = 0;
+       rf = dnu_func_strs[cnt];
+       while (rf) {
+           std::string rrf = std::string(".*") + std::string(rf) + 
std::string("[(].*");
+           r.dnu_filters[std::string(rf)] = std::regex(rrf);
+           cnt++;
+           rf = dnu_func_strs[cnt];
+       }
+    }
+
     /* Platform symbol usage check regex */
     {
        const char *platform_strs[] {
@@ -584,6 +604,7 @@
 
 
        std::map<std::string, std::set<int>> instances;
+       std::map<std::string, std::set<int>> dnu_instances;
 
        int lcnt = 0;
        std::string sline;
@@ -613,6 +634,16 @@
                    }
                }
            }
+           for (ff_it = r.dnu_filters.begin(); ff_it != r.dnu_filters.end(); 
ff_it++) {
+               if (!std::strstr(sline.c_str(), ff_it->first.c_str())) {
+                   // Only try the full regex if strstr says there is a chance
+                   continue;
+               }
+               if (std::regex_match(sline, ff_it->second)) {
+                   dnu_instances[ff_it->first].insert(lcnt);
+                   ret = 1;
+               }
+           }
        }
 
        bu_close_mapped_file(ifile);
@@ -626,6 +657,15 @@
            r.api_log.push_back(lstr);
            }
        }
+
+       for (i_it = dnu_instances.begin(); i_it != dnu_instances.end(); i_it++) 
{
+           std::set<int>::iterator num_it;
+           for (num_it = i_it->second.begin(); num_it != i_it->second.end(); 
num_it++) {
+               std::string lstr = srcs[i].substr(r.path_root.length()+1) + 
std::string(" uses ") + i_it->first + std::string(" on line ") + 
std::to_string(*num_it) + std::string("\n");
+               r.dnu_log.push_back(lstr);
+           }
+       }
+
     }
 
     return ret;
@@ -897,6 +937,7 @@
        std::sort(repo_info.bio_log.begin(), repo_info.bio_log.end());
        std::sort(repo_info.bnet_log.begin(), repo_info.bnet_log.end());
        std::sort(repo_info.common_log.begin(), repo_info.common_log.end());
+       std::sort(repo_info.dnu_log.begin(), repo_info.dnu_log.end());
        std::sort(repo_info.symbol_inc_log.begin(), 
repo_info.symbol_inc_log.end());
        std::sort(repo_info.symbol_src_log.begin(), 
repo_info.symbol_src_log.end());
        std::sort(repo_info.symbol_bld_log.begin(), 
repo_info.symbol_bld_log.end());
@@ -926,6 +967,13 @@
            }
        }
 
+       if (repo_info.dnu_log.size()) {
+           std::cout << "\nFAILURE: found " << repo_info.dnu_log.size() << " 
instances of proscribed function usage:\n";
+           for (size_t i = 0; i < repo_info.dnu_log.size(); i++) {
+               std::cout << repo_info.dnu_log[i];
+           }
+       }
+
        if (repo_info.setprogname_log.size()) {
            std::cout << "\nFAILURE: found " << 
repo_info.setprogname_log.size() << " missing bu_setprogname calls:\n";
            for (size_t i = 0; i < repo_info.setprogname_log.size(); i++) {

This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.



_______________________________________________
BRL-CAD Source Commits mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/brlcad-commits

Reply via email to