aboutsummaryrefslogtreecommitdiffstats
path: root/scripts
diff options
context:
space:
mode:
Diffstat (limited to 'scripts')
-rwxr-xr-xscripts/Lindent18
-rwxr-xr-xscripts/checkpatch.pl150
2 files changed, 124 insertions, 44 deletions
diff --git a/scripts/Lindent b/scripts/Lindent
index 9468ec7971db..9c4b3e2b7098 100755
--- a/scripts/Lindent
+++ b/scripts/Lindent
@@ -1,2 +1,18 @@
1#!/bin/sh 1#!/bin/sh
2indent -npro -kr -i8 -ts8 -sob -l80 -ss -ncs -cp1 "$@" 2PARAM="-npro -kr -i8 -ts8 -sob -l80 -ss -ncs -cp1"
3RES=`indent --version`
4V1=`echo $RES | cut -d' ' -f3 | cut -d'.' -f1`
5V2=`echo $RES | cut -d' ' -f3 | cut -d'.' -f2`
6V3=`echo $RES | cut -d' ' -f3 | cut -d'.' -f3`
7if [ $V1 -gt 2 ]; then
8 PARAM="$PARAM -il0"
9elif [ $V1 -eq 2 ]; then
10 if [ $V2 -gt 2 ]; then
11 PARAM="$PARAM -il0";
12 elif [ $V2 -eq 2 ]; then
13 if [ $V3 -ge 10 ]; then
14 PARAM="$PARAM -il0"
15 fi
16 fi
17fi
18indent $PARAM "$@"
diff --git a/scripts/checkpatch.pl b/scripts/checkpatch.pl
index 64ec4b8a51b5..b6bbbcdc557e 100755
--- a/scripts/checkpatch.pl
+++ b/scripts/checkpatch.pl
@@ -9,7 +9,7 @@ use strict;
9my $P = $0; 9my $P = $0;
10$P =~ s@.*/@@g; 10$P =~ s@.*/@@g;
11 11
12my $V = '0.16'; 12my $V = '0.18';
13 13
14use Getopt::Long qw(:config no_auto_abbrev); 14use Getopt::Long qw(:config no_auto_abbrev);
15 15
@@ -131,6 +131,17 @@ our $NonptrType;
131our $Type; 131our $Type;
132our $Declare; 132our $Declare;
133 133
134our $UTF8 = qr {
135 [\x09\x0A\x0D\x20-\x7E] # ASCII
136 | [\xC2-\xDF][\x80-\xBF] # non-overlong 2-byte
137 | \xE0[\xA0-\xBF][\x80-\xBF] # excluding overlongs
138 | [\xE1-\xEC\xEE\xEF][\x80-\xBF]{2} # straight 3-byte
139 | \xED[\x80-\x9F][\x80-\xBF] # excluding surrogates
140 | \xF0[\x90-\xBF][\x80-\xBF]{2} # planes 1-3
141 | [\xF1-\xF3][\x80-\xBF]{3} # planes 4-15
142 | \xF4[\x80-\x8F][\x80-\xBF]{2} # plane 16
143}x;
144
134our @typeList = ( 145our @typeList = (
135 qr{void}, 146 qr{void},
136 qr{char}, 147 qr{char},
@@ -692,7 +703,7 @@ sub annotate_values {
692 while (length($cur)) { 703 while (length($cur)) {
693 @av_paren_type = ('E') if ($#av_paren_type < 0); 704 @av_paren_type = ('E') if ($#av_paren_type < 0);
694 print " <" . join('', @av_paren_type) . 705 print " <" . join('', @av_paren_type) .
695 "> <$type> " if ($dbg_values > 1); 706 "> <$type> <$av_pending>" if ($dbg_values > 1);
696 if ($cur =~ /^(\s+)/o) { 707 if ($cur =~ /^(\s+)/o) {
697 print "WS($1)\n" if ($dbg_values > 1); 708 print "WS($1)\n" if ($dbg_values > 1);
698 if ($1 =~ /\n/ && $av_preprocessor) { 709 if ($1 =~ /\n/ && $av_preprocessor) {
@@ -705,9 +716,18 @@ sub annotate_values {
705 $type = 'T'; 716 $type = 'T';
706 717
707 } elsif ($cur =~ /^(#\s*define\s*$Ident)(\(?)/o) { 718 } elsif ($cur =~ /^(#\s*define\s*$Ident)(\(?)/o) {
708 print "DEFINE($1)\n" if ($dbg_values > 1); 719 print "DEFINE($1,$2)\n" if ($dbg_values > 1);
709 $av_preprocessor = 1; 720 $av_preprocessor = 1;
710 $av_pending = 'N'; 721 push(@av_paren_type, $type);
722 if ($2 ne '') {
723 $av_pending = 'N';
724 }
725 $type = 'E';
726
727 } elsif ($cur =~ /^(#\s*undef\s*$Ident)/o) {
728 print "UNDEF($1)\n" if ($dbg_values > 1);
729 $av_preprocessor = 1;
730 push(@av_paren_type, $type);
711 731
712 } elsif ($cur =~ /^(#\s*(?:ifdef|ifndef|if))/o) { 732 } elsif ($cur =~ /^(#\s*(?:ifdef|ifndef|if))/o) {
713 print "PRE_START($1)\n" if ($dbg_values > 1); 733 print "PRE_START($1)\n" if ($dbg_values > 1);
@@ -715,7 +735,7 @@ sub annotate_values {
715 735
716 push(@av_paren_type, $type); 736 push(@av_paren_type, $type);
717 push(@av_paren_type, $type); 737 push(@av_paren_type, $type);
718 $type = 'N'; 738 $type = 'E';
719 739
720 } elsif ($cur =~ /^(#\s*(?:else|elif))/o) { 740 } elsif ($cur =~ /^(#\s*(?:else|elif))/o) {
721 print "PRE_RESTART($1)\n" if ($dbg_values > 1); 741 print "PRE_RESTART($1)\n" if ($dbg_values > 1);
@@ -723,7 +743,7 @@ sub annotate_values {
723 743
724 push(@av_paren_type, $av_paren_type[$#av_paren_type]); 744 push(@av_paren_type, $av_paren_type[$#av_paren_type]);
725 745
726 $type = 'N'; 746 $type = 'E';
727 747
728 } elsif ($cur =~ /^(#\s*(?:endif))/o) { 748 } elsif ($cur =~ /^(#\s*(?:endif))/o) {
729 print "PRE_END($1)\n" if ($dbg_values > 1); 749 print "PRE_END($1)\n" if ($dbg_values > 1);
@@ -734,11 +754,16 @@ sub annotate_values {
734 # one does, and continue as if the #endif was not here. 754 # one does, and continue as if the #endif was not here.
735 pop(@av_paren_type); 755 pop(@av_paren_type);
736 push(@av_paren_type, $type); 756 push(@av_paren_type, $type);
737 $type = 'N'; 757 $type = 'E';
738 758
739 } elsif ($cur =~ /^(\\\n)/o) { 759 } elsif ($cur =~ /^(\\\n)/o) {
740 print "PRECONT($1)\n" if ($dbg_values > 1); 760 print "PRECONT($1)\n" if ($dbg_values > 1);
741 761
762 } elsif ($cur =~ /^(__attribute__)\s*\(?/o) {
763 print "ATTR($1)\n" if ($dbg_values > 1);
764 $av_pending = $type;
765 $type = 'N';
766
742 } elsif ($cur =~ /^(sizeof)\s*(\()?/o) { 767 } elsif ($cur =~ /^(sizeof)\s*(\()?/o) {
743 print "SIZEOF($1)\n" if ($dbg_values > 1); 768 print "SIZEOF($1)\n" if ($dbg_values > 1);
744 if (defined $2) { 769 if (defined $2) {
@@ -930,7 +955,7 @@ sub process {
930 # edge is a close comment then we must be in a comment 955 # edge is a close comment then we must be in a comment
931 # at context start. 956 # at context start.
932 my $edge; 957 my $edge;
933 for (my $ln = $linenr; $ln < ($linenr + $realcnt); $ln++) { 958 for (my $ln = $linenr + 1; $ln < ($linenr + $realcnt); $ln++) {
934 next if ($line =~ /^-/); 959 next if ($line =~ /^-/);
935 ($edge) = ($rawlines[$ln - 1] =~ m@(/\*|\*/)@); 960 ($edge) = ($rawlines[$ln - 1] =~ m@(/\*|\*/)@);
936 last if (defined $edge); 961 last if (defined $edge);
@@ -951,9 +976,9 @@ sub process {
951 ##print "COMMENT:$in_comment edge<$edge> $rawline\n"; 976 ##print "COMMENT:$in_comment edge<$edge> $rawline\n";
952 sanitise_line_reset($in_comment); 977 sanitise_line_reset($in_comment);
953 978
954 } elsif ($realcnt) { 979 } elsif ($realcnt && $rawline =~ /^(?:\+| |$)/) {
955 # Standardise the strings and chars within the input to 980 # Standardise the strings and chars within the input to
956 # simplify matching. 981 # simplify matching -- only bother with positive lines.
957 $line = sanitise_line($rawline); 982 $line = sanitise_line($rawline);
958 } 983 }
959 push(@lines, $line); 984 push(@lines, $line);
@@ -1066,17 +1091,14 @@ sub process {
1066 1091
1067# UTF-8 regex found at http://www.w3.org/International/questions/qa-forms-utf-8.en.php 1092# UTF-8 regex found at http://www.w3.org/International/questions/qa-forms-utf-8.en.php
1068 if (($realfile =~ /^$/ || $line =~ /^\+/) && 1093 if (($realfile =~ /^$/ || $line =~ /^\+/) &&
1069 !($rawline =~ m/^( 1094 $rawline !~ m/^$UTF8*$/) {
1070 [\x09\x0A\x0D\x20-\x7E] # ASCII 1095 my ($utf8_prefix) = ($rawline =~ /^($UTF8*)/);
1071 | [\xC2-\xDF][\x80-\xBF] # non-overlong 2-byte 1096
1072 | \xE0[\xA0-\xBF][\x80-\xBF] # excluding overlongs 1097 my $blank = copy_spacing($rawline);
1073 | [\xE1-\xEC\xEE\xEF][\x80-\xBF]{2} # straight 3-byte 1098 my $ptr = substr($blank, 0, length($utf8_prefix)) . "^";
1074 | \xED[\x80-\x9F][\x80-\xBF] # excluding surrogates 1099 my $hereptr = "$hereline$ptr\n";
1075 | \xF0[\x90-\xBF][\x80-\xBF]{2} # planes 1-3 1100
1076 | [\xF1-\xF3][\x80-\xBF]{3} # planes 4-15 1101 ERROR("Invalid UTF-8, patch and commit message should be encoded in UTF-8\n" . $hereptr);
1077 | \xF4[\x80-\x8F][\x80-\xBF]{2} # plane 16
1078 )*$/x )) {
1079 ERROR("Invalid UTF-8, patch and commit message should be encoded in UTF-8\n" . $herecurr);
1080 } 1102 }
1081 1103
1082#ignore lines being removed 1104#ignore lines being removed
@@ -1112,7 +1134,7 @@ sub process {
1112 if ($rawline =~ /^\+\s* \t\s*\S/ || 1134 if ($rawline =~ /^\+\s* \t\s*\S/ ||
1113 $rawline =~ /^\+\s* \s*/) { 1135 $rawline =~ /^\+\s* \s*/) {
1114 my $herevet = "$here\n" . cat_vet($rawline) . "\n"; 1136 my $herevet = "$here\n" . cat_vet($rawline) . "\n";
1115 ERROR("use tabs not spaces\n" . $herevet); 1137 ERROR("code indent should use tabs where possible\n" . $herevet);
1116 } 1138 }
1117 1139
1118# check for RCS/CVS revision markers 1140# check for RCS/CVS revision markers
@@ -1121,35 +1143,40 @@ sub process {
1121 } 1143 }
1122 1144
1123# Check for potential 'bare' types 1145# Check for potential 'bare' types
1124 if ($realcnt) { 1146 my ($stat, $cond);
1125 my ($s, $c) = ctx_statement_block($linenr, $realcnt, 0); 1147 if ($realcnt && $line =~ /.\s*\S/) {
1126 $s =~ s/\n./ /g; 1148 ($stat, $cond) = ctx_statement_block($linenr,
1127 $s =~ s/{.*$//; 1149 $realcnt, 0);
1150 $stat =~ s/\n./\n /g;
1151 $cond =~ s/\n./\n /g;
1152
1153 my $s = $stat;
1154 $s =~ s/{.*$//s;
1128 1155
1129 # Ignore goto labels. 1156 # Ignore goto labels.
1130 if ($s =~ /$Ident:\*$/) { 1157 if ($s =~ /$Ident:\*$/s) {
1131 1158
1132 # Ignore functions being called 1159 # Ignore functions being called
1133 } elsif ($s =~ /^.\s*$Ident\s*\(/) { 1160 } elsif ($s =~ /^.\s*$Ident\s*\(/s) {
1134 1161
1135 # definitions in global scope can only start with types 1162 # definitions in global scope can only start with types
1136 } elsif ($s =~ /^.(?:$Storage\s+)?(?:$Inline\s+)?(?:const\s+)?($Ident)\b/) { 1163 } elsif ($s =~ /^.(?:$Storage\s+)?(?:$Inline\s+)?(?:const\s+)?($Ident)\b/s) {
1137 possible($1, $s); 1164 possible($1, $s);
1138 1165
1139 # declarations always start with types 1166 # declarations always start with types
1140 } elsif ($prev_values eq 'E' && $s =~ /^.\s*(?:$Storage\s+)?(?:const\s+)?($Ident)\b(:?\s+$Sparse)?\s*\**\s*$Ident\s*(?:;|=|,)/) { 1167 } elsif ($prev_values eq 'E' && $s =~ /^.\s*(?:$Storage\s+)?(?:const\s+)?($Ident)\b(:?\s+$Sparse)?\s*\**\s*$Ident\s*(?:;|=|,)/s) {
1141 possible($1, $s); 1168 possible($1, $s);
1142 } 1169 }
1143 1170
1144 # any (foo ... *) is a pointer cast, and foo is a type 1171 # any (foo ... *) is a pointer cast, and foo is a type
1145 while ($s =~ /\(($Ident)(?:\s+$Sparse)*\s*\*+\s*\)/g) { 1172 while ($s =~ /\(($Ident)(?:\s+$Sparse)*\s*\*+\s*\)/sg) {
1146 possible($1, $s); 1173 possible($1, $s);
1147 } 1174 }
1148 1175
1149 # Check for any sort of function declaration. 1176 # Check for any sort of function declaration.
1150 # int foo(something bar, other baz); 1177 # int foo(something bar, other baz);
1151 # void (*store_gdt)(x86_descr_ptr *); 1178 # void (*store_gdt)(x86_descr_ptr *);
1152 if ($prev_values eq 'E' && $s =~ /^(.(?:typedef\s*)?(?:(?:$Storage|$Inline)\s*)*\s*$Type\s*(?:\b$Ident|\(\*\s*$Ident\))\s*)\(/) { 1179 if ($prev_values eq 'E' && $s =~ /^(.(?:typedef\s*)?(?:(?:$Storage|$Inline)\s*)*\s*$Type\s*(?:\b$Ident|\(\*\s*$Ident\))\s*)\(/s) {
1153 my ($name_len) = length($1); 1180 my ($name_len) = length($1);
1154 1181
1155 my $ctx = $s; 1182 my $ctx = $s;
@@ -1282,18 +1309,19 @@ sub process {
1282 ($prevline !~ /^ }/) && 1309 ($prevline !~ /^ }/) &&
1283 ($prevline !~ /^.DECLARE_$Ident\(\Q$name\E\)/) && 1310 ($prevline !~ /^.DECLARE_$Ident\(\Q$name\E\)/) &&
1284 ($prevline !~ /^.LIST_HEAD\(\Q$name\E\)/) && 1311 ($prevline !~ /^.LIST_HEAD\(\Q$name\E\)/) &&
1312 ($prevline !~ /^.$Type\s*\(\s*\*\s*\Q$name\E\s*\)\s*\(/) &&
1285 ($prevline !~ /\b\Q$name\E(?:\s+$Attribute)?\s*(?:;|=|\[)/)) { 1313 ($prevline !~ /\b\Q$name\E(?:\s+$Attribute)?\s*(?:;|=|\[)/)) {
1286 WARN("EXPORT_SYMBOL(foo); should immediately follow its function/variable\n" . $herecurr); 1314 WARN("EXPORT_SYMBOL(foo); should immediately follow its function/variable\n" . $herecurr);
1287 } 1315 }
1288 } 1316 }
1289 1317
1290# check for external initialisers. 1318# check for external initialisers.
1291 if ($line =~ /^.$Type\s*$Ident\s*=\s*(0|NULL);/) { 1319 if ($line =~ /^.$Type\s*$Ident\s*=\s*(0|NULL|false)\s*;/) {
1292 ERROR("do not initialise externals to 0 or NULL\n" . 1320 ERROR("do not initialise externals to 0 or NULL\n" .
1293 $herecurr); 1321 $herecurr);
1294 } 1322 }
1295# check for static initialisers. 1323# check for static initialisers.
1296 if ($line =~ /\s*static\s.*=\s*(0|NULL);/) { 1324 if ($line =~ /\s*static\s.*=\s*(0|NULL|false)\s*;/) {
1297 ERROR("do not initialise statics to 0 or NULL\n" . 1325 ERROR("do not initialise statics to 0 or NULL\n" .
1298 $herecurr); 1326 $herecurr);
1299 } 1327 }
@@ -1512,7 +1540,10 @@ sub process {
1512 if ($ctx !~ /[WEBC]x./ && $ca !~ /(?:\)|!|~|\*|-|\&|\||\+\+|\-\-|\{)$/) { 1540 if ($ctx !~ /[WEBC]x./ && $ca !~ /(?:\)|!|~|\*|-|\&|\||\+\+|\-\-|\{)$/) {
1513 ERROR("space required before that '$op' $at\n" . $hereptr); 1541 ERROR("space required before that '$op' $at\n" . $hereptr);
1514 } 1542 }
1515 if ($ctx =~ /.xW/) { 1543 if ($op eq '*' && $cc =~/\s*const\b/) {
1544 # A unary '*' may be const
1545
1546 } elsif ($ctx =~ /.xW/) {
1516 ERROR("space prohibited after that '$op' $at\n" . $hereptr); 1547 ERROR("space prohibited after that '$op' $at\n" . $hereptr);
1517 } 1548 }
1518 1549
@@ -1617,7 +1648,7 @@ sub process {
1617 1648
1618# Check for illegal assignment in if conditional. 1649# Check for illegal assignment in if conditional.
1619 if ($line =~ /\bif\s*\(/) { 1650 if ($line =~ /\bif\s*\(/) {
1620 my ($s, $c) = ctx_statement_block($linenr, $realcnt, 0); 1651 my ($s, $c) = ($stat, $cond);
1621 1652
1622 if ($c =~ /\bif\s*\(.*[^<>!=]=[^=].*/) { 1653 if ($c =~ /\bif\s*\(.*[^<>!=]=[^=].*/) {
1623 ERROR("do not use assignment in if condition\n" . $herecurr); 1654 ERROR("do not use assignment in if condition\n" . $herecurr);
@@ -1695,7 +1726,7 @@ sub process {
1695#warn if <asm/foo.h> is #included and <linux/foo.h> is available (uses RAW line) 1726#warn if <asm/foo.h> is #included and <linux/foo.h> is available (uses RAW line)
1696 if ($tree && $rawline =~ m{^.\#\s*include\s*\<asm\/(.*)\.h\>}) { 1727 if ($tree && $rawline =~ m{^.\#\s*include\s*\<asm\/(.*)\.h\>}) {
1697 my $checkfile = "$root/include/linux/$1.h"; 1728 my $checkfile = "$root/include/linux/$1.h";
1698 if (-f $checkfile && $1 ne 'irq.h') { 1729 if (-f $checkfile && $1 ne 'irq') {
1699 WARN("Use #include <linux/$1.h> instead of <asm/$1.h>\n" . 1730 WARN("Use #include <linux/$1.h> instead of <asm/$1.h>\n" .
1700 $herecurr); 1731 $herecurr);
1701 } 1732 }
@@ -1910,7 +1941,8 @@ sub process {
1910 } 1941 }
1911 1942
1912# check for spinlock_t definitions without a comment. 1943# check for spinlock_t definitions without a comment.
1913 if ($line =~ /^.\s*(struct\s+mutex|spinlock_t)\s+\S+;/) { 1944 if ($line =~ /^.\s*(struct\s+mutex|spinlock_t)\s+\S+;/ ||
1945 $line =~ /^.\s*(DEFINE_MUTEX)\s*\(/) {
1914 my $which = $1; 1946 my $which = $1;
1915 if (!ctx_has_comment($first_line, $linenr)) { 1947 if (!ctx_has_comment($first_line, $linenr)) {
1916 CHK("$1 definition without comment\n" . $herecurr); 1948 CHK("$1 definition without comment\n" . $herecurr);
@@ -1940,7 +1972,26 @@ sub process {
1940 } 1972 }
1941 1973
1942# check for new externs in .c files. 1974# check for new externs in .c files.
1943 if ($line =~ /^.\s*extern\s/ && ($realfile =~ /\.c$/)) { 1975 if ($realfile =~ /\.c$/ && defined $stat &&
1976 $stat =~ /^.\s*(?:extern\s+)?$Type\s+$Ident(\s*)\(/s)
1977 {
1978 my $paren_space = $1;
1979
1980 my $s = $stat;
1981 if (defined $cond) {
1982 substr($s, 0, length($cond), '');
1983 }
1984 if ($s =~ /^\s*;/) {
1985 WARN("externs should be avoided in .c files\n" . $herecurr);
1986 }
1987
1988 if ($paren_space =~ /\n/) {
1989 WARN("arguments for function declarations should follow identifier\n" . $herecurr);
1990 }
1991
1992 } elsif ($realfile =~ /\.c$/ && defined $stat &&
1993 $stat =~ /^.\s*extern\s+/)
1994 {
1944 WARN("externs should be avoided in .c files\n" . $herecurr); 1995 WARN("externs should be avoided in .c files\n" . $herecurr);
1945 } 1996 }
1946 1997
@@ -1964,11 +2015,11 @@ sub process {
1964 } 2015 }
1965 2016
1966# check for semaphores used as mutexes 2017# check for semaphores used as mutexes
1967 if ($line =~ /\b(DECLARE_MUTEX|init_MUTEX)\s*\(/) { 2018 if ($line =~ /^.\s*(DECLARE_MUTEX|init_MUTEX)\s*\(/) {
1968 WARN("mutexes are preferred for single holder semaphores\n" . $herecurr); 2019 WARN("mutexes are preferred for single holder semaphores\n" . $herecurr);
1969 } 2020 }
1970# check for semaphores used as mutexes 2021# check for semaphores used as mutexes
1971 if ($line =~ /\binit_MUTEX_LOCKED\s*\(/) { 2022 if ($line =~ /^.\s*init_MUTEX_LOCKED\s*\(/) {
1972 WARN("consider using a completion\n" . $herecurr); 2023 WARN("consider using a completion\n" . $herecurr);
1973 } 2024 }
1974# recommend strict_strto* over simple_strto* 2025# recommend strict_strto* over simple_strto*
@@ -1979,11 +2030,24 @@ sub process {
1979# use of NR_CPUS is usually wrong 2030# use of NR_CPUS is usually wrong
1980# ignore definitions of NR_CPUS and usage to define arrays as likely right 2031# ignore definitions of NR_CPUS and usage to define arrays as likely right
1981 if ($line =~ /\bNR_CPUS\b/ && 2032 if ($line =~ /\bNR_CPUS\b/ &&
1982 $line !~ /^.#\s*define\s+NR_CPUS\s+/ && 2033 $line !~ /^.#\s*if\b.*\bNR_CPUS\b/ &&
1983 $line !~ /^.\s*$Declare\s.*\[[^\]]*NR_CPUS[^\]]*\]/) 2034 $line !~ /^.#\s*define\b.*\bNR_CPUS\b/ &&
2035 $line !~ /^.\s*$Declare\s.*\[[^\]]*NR_CPUS[^\]]*\]/ &&
2036 $line !~ /\[[^\]]*\.\.\.[^\]]*NR_CPUS[^\]]*\]/ &&
2037 $line !~ /\[[^\]]*NR_CPUS[^\]]*\.\.\.[^\]]*\]/)
1984 { 2038 {
1985 WARN("usage of NR_CPUS is often wrong - consider using cpu_possible(), num_possible_cpus(), for_each_possible_cpu(), etc\n" . $herecurr); 2039 WARN("usage of NR_CPUS is often wrong - consider using cpu_possible(), num_possible_cpus(), for_each_possible_cpu(), etc\n" . $herecurr);
1986 } 2040 }
2041
2042# check for %L{u,d,i} in strings
2043 my $string;
2044 while ($line =~ /(?:^|")([X\t]*)(?:"|$)/g) {
2045 $string = substr($rawline, $-[1], $+[1] - $-[1]);
2046 if ($string =~ /(?<!%)%L[udi]/) {
2047 WARN("\%Ld/%Lu are not-standard C, use %lld/%llu\n" . $herecurr);
2048 last;
2049 }
2050 }
1987 } 2051 }
1988 2052
1989 # If we have no input at all, then there is nothing to report on 2053 # If we have no input at all, then there is nothing to report on