Print this page
11506 smatch resync

Split Close
Expand all
Collapse all
          --- old/usr/src/tools/smatch/src/check_kernel_printf.c
          +++ new/usr/src/tools/smatch/src/check_kernel_printf.c
↓ open down ↓ 513 lines elided ↑ open up ↑
 514  514                          sm_warning("'%%p%c' can only be followed by one of [234]", fmt[0]);
 515  515                  if (isalnum(fmt[2]))
 516  516                          sm_warning("'%%p%c%c' cannot be followed by '%c'", fmt[0], fmt[1], fmt[2]);
 517  517          }
 518  518  
 519  519          if (!is_struct_tag(basetype, tag))
 520  520                  sm_error("'%%p%c' expects argument of type struct '%s*', argument %d has type '%s'",
 521  521                          fmt[0], tag, vaidx, type_to_str(type));
 522  522  }
 523  523  
      524 +static void time_and_date(const char *fmt, struct symbol *type, struct symbol *basetype, int vaidx)
      525 +{
      526 +        assert(tolower(fmt[0]) == 't');
      527 +
      528 +        if (fmt[1] == 'R' && !is_struct_tag(basetype, "rtc_time"))
      529 +                sm_error("'%%ptR' expects argument of type struct 'rtc_time', argument %d has type '%s'",
      530 +                         vaidx, type_to_str(type));
      531 +}
      532 +
 524  533  static void check_clock(const char *fmt, struct symbol *type, struct symbol *basetype, int vaidx)
 525  534  {
 526  535          assert(fmt[0] == 'C');
 527  536          if (isalnum(fmt[1])) {
 528  537                  if (!strchr("nr", fmt[1]))
 529  538                          sm_warning("'%%pC' can only be followed by one of [nr]");
 530  539                  if (isalnum(fmt[2]))
 531  540                          sm_warning("'%%pC%c' cannot be followed by '%c'", fmt[1], fmt[2]);
 532  541          }
 533  542          if (!is_struct_tag(basetype, "clk"))
↓ open down ↓ 215 lines elided ↑ open up ↑
 749  758          case 'N':
 750  759                  netdev_feature(fmt, type, basetype, vaidx);
 751  760                  break;
 752  761          case 'a':
 753  762                  address_val(fmt, type, basetype, vaidx);
 754  763                  break;
 755  764          case 'D':
 756  765          case 'd':
 757  766                  dentry_file(fmt, type, basetype, vaidx);
 758  767                  break;
      768 +        case 't':
      769 +                time_and_date(fmt, type, basetype, vaidx);
      770 +                break;
 759  771          case 'C':
 760  772                  check_clock(fmt, type, basetype, vaidx);
 761  773                  break;
 762  774          case 'g':
 763  775                  block_device(fmt, type, basetype, vaidx);
 764  776                  break;
 765  777          case 'G':
 766  778                  flag_string(fmt, type, basetype, vaidx);
 767  779                  break;
 768  780          case 'O':
↓ open down ↓ 699 lines elided ↑ open up ↑
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX