Print this page
11506 smatch resync

Split Close
Expand all
Collapse all
          --- old/usr/src/tools/smatch/src/smatch.c
          +++ new/usr/src/tools/smatch/src/smatch.c
↓ open down ↓ 13 lines elided ↑ open up ↑
  14   14   * You should have received a copy of the GNU General Public License
  15   15   * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
  16   16   *
  17   17   * Copyright 2019 Joyent, Inc.
  18   18   */
  19   19  
  20   20  #include <stdio.h>
  21   21  #include <unistd.h>
  22   22  #include <libgen.h>
  23   23  #include "smatch.h"
       24 +#include "smatch_slist.h"
  24   25  #include "check_list.h"
  25   26  
  26   27  char *option_debug_check = (char *)"";
  27   28  char *option_project_str = (char *)"smatch_generic";
  28   29  static char *option_db_file = (char *)"smatch_db.sqlite";
  29   30  enum project_type option_project = PROJ_NONE;
  30   31  char *bin_dir;
  31   32  char *data_dir;
  32   33  int option_no_data = 0;
  33   34  int option_spammy = 0;
  34   35  int option_info = 0;
  35   36  int option_full_path = 0;
  36   37  int option_param_mapper = 0;
  37   38  int option_call_tree = 0;
  38   39  int option_no_db = 0;
  39   40  int option_enable = 0;
  40   41  int option_disable = 0;
  41      -int option_debug_related;
  42   42  int option_file_output;
  43   43  int option_time;
  44   44  int option_mem;
  45   45  char *option_datadir_str;
  46   46  int option_fatal_checks;
  47   47  int option_succeed;
  48   48  int option_timeout = 60;
  49   49  
  50   50  FILE *sm_outfd;
  51   51  FILE *sql_outfd;
↓ open down ↓ 117 lines elided ↑ open up ↑
 169  169                          *tmp = '-';
 170  170                  tmp++;
 171  171          }
 172  172          if (!strcmp(arg, str))
 173  173                  ret = 1;
 174  174          free(str);
 175  175          return ret;
 176  176  }
 177  177  
 178  178  #define OPTION(_x) do {                                 \
 179      -        if (match_option((*argvp)[i], #_x)) {           \
      179 +        if (match_option((*argvp)[1], #_x)) {           \
 180  180                  option_##_x = 1;                        \
 181  181          }                                               \
 182  182  } while (0)
 183  183  
 184  184  void parse_args(int *argcp, char ***argvp)
 185  185  {
 186  186          int i;
 187  187  
 188  188          for (i = 1 ; i < *argcp; i++) {
 189  189                  if (!strcmp((*argvp)[i], "--help"))
↓ open down ↓ 34 lines elided ↑ open up ↑
 224  224                  if (!strncmp((*argvp)[i], "--timeout=", 10)) {
 225  225                          if (sscanf((*argvp)[i] + 10, "%d",
 226  226                              &option_timeout) != 1)
 227  227                                  sm_fatal("invalid option %s", (*argvp)[i]);
 228  228                  }
 229  229  
 230  230                  OPTION(fatal_checks);
 231  231                  OPTION(spammy);
 232  232                  OPTION(info);
 233  233                  OPTION(debug);
 234      -                OPTION(debug_implied);
 235      -                OPTION(debug_related);
 236  234                  OPTION(assume_loops);
 237  235                  OPTION(no_data);
 238  236                  OPTION(two_passes);
 239  237                  OPTION(full_path);
 240  238                  OPTION(param_mapper);
 241  239                  OPTION(call_tree);
 242  240                  OPTION(file_output);
 243  241                  OPTION(time);
 244  242                  OPTION(mem);
 245  243                  OPTION(no_db);
↓ open down ↓ 69 lines elided ↑ open up ↑
 315  313          if (!access(dir, R_OK))
 316  314                  return dir;
 317  315  
 318  316          sm_warning("%s is not accessible.", dir);
 319  317          sm_warning("Use --no-data or --data to suppress this message.");
 320  318          return NULL;
 321  319  }
 322  320  
 323  321  int main(int argc, char **argv)
 324  322  {
      323 +        struct string_list *filelist = NULL;
 325  324          int i;
 326  325          reg_func func;
 327  326  
 328  327          sm_outfd = stdout;
 329  328          sql_outfd = stdout;
 330  329          caller_info_fd = stdout;
 331  330  
 332  331          progname = argv[0];
 333  332  
 334  333          parse_args(&argc, &argv);
↓ open down ↓ 1 lines elided ↑ open up ↑
 336  335          if (argc < 2)
 337  336                  help();
 338  337  
 339  338          /* this gets set back to zero when we parse the first function */
 340  339          final_pass = 1;
 341  340  
 342  341          bin_dir = get_bin_dir(argv[0]);
 343  342          data_dir = get_data_dir(argv[0]);
 344  343  
 345  344          allocate_hook_memory();
      345 +        allocate_dynamic_states_array(num_checks);
 346  346          create_function_hook_hash();
 347  347          open_smatch_db(option_db_file);
      348 +        sparse_initialize(argc, argv, &filelist);
      349 +        alloc_valid_ptr_rl();
      350 +
 348  351          for (i = 1; i < ARRAY_SIZE(reg_funcs); i++) {
 349  352                  func = reg_funcs[i].func;
 350  353                  /* The script IDs start at 1.
 351  354                     0 is used for internal stuff. */
 352  355                  if (!option_enable || reg_funcs[i].enabled == 1 ||
 353  356                      (option_disable && reg_funcs[i].enabled != -1) ||
 354  357                      strncmp(reg_funcs[i].name, "register_", 9) == 0)
 355  358                          func(i);
 356  359          }
 357  360  
 358      -        smatch(argc, argv);
      361 +        smatch(filelist);
 359  362          free_string(data_dir);
 360  363  
 361  364          if (option_succeed)
 362  365                  return 0;
 363  366          if (sm_nr_errors > 0)
 364  367                  return 1;
 365  368          if (sm_nr_checks > 0 && option_fatal_checks)
 366  369                  return 1;
 367  370          return 0;
 368  371  }
    
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX