~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/scripts/cleanfile

Version: ~ [ linux-6.12-rc7 ] ~ [ linux-6.11.7 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.60 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.116 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.171 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.229 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.285 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.323 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.12 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

Diff markup

Differences between /scripts/cleanfile (Version linux-6.12-rc7) and /scripts/cleanfile (Version linux-4.13.16)


  1 #!/usr/bin/env perl                                 1 #!/usr/bin/env perl
  2 # SPDX-License-Identifier: GPL-2.0             << 
  3 #                                                   2 #
  4 # Clean a text file -- or directory of text fi      3 # Clean a text file -- or directory of text files -- of stealth whitespace.
  5 # WARNING: this can be a highly destructive op      4 # WARNING: this can be a highly destructive operation.  Use with caution.
  6 #                                                   5 #
  7                                                     6 
  8 use warnings;                                       7 use warnings;
  9 use bytes;                                          8 use bytes;
 10 use File::Basename;                                 9 use File::Basename;
 11                                                    10 
 12 # Default options                                  11 # Default options
 13 $max_width = 79;                                   12 $max_width = 79;
 14                                                    13 
 15 # Clean up space-tab sequences, either by remo     14 # Clean up space-tab sequences, either by removing spaces or
 16 # replacing them with tabs.                        15 # replacing them with tabs.
 17 sub clean_space_tabs($)                            16 sub clean_space_tabs($)
 18 {                                                  17 {
 19     no bytes;                   # Tab alignmen     18     no bytes;                   # Tab alignment depends on characters
 20                                                    19 
 21     my($li) = @_;                                  20     my($li) = @_;
 22     my($lo) = '';                                  21     my($lo) = '';
 23     my $pos = 0;                                   22     my $pos = 0;
 24     my $nsp = 0;                                   23     my $nsp = 0;
 25     my($i, $c);                                    24     my($i, $c);
 26                                                    25 
 27     for ($i = 0; $i < length($li); $i++) {         26     for ($i = 0; $i < length($li); $i++) {
 28         $c = substr($li, $i, 1);                   27         $c = substr($li, $i, 1);
 29         if ($c eq "\t") {                          28         if ($c eq "\t") {
 30             my $npos = ($pos+$nsp+8) & ~7;         29             my $npos = ($pos+$nsp+8) & ~7;
 31             my $ntab = ($npos >> 3) - ($pos >>     30             my $ntab = ($npos >> 3) - ($pos >> 3);
 32             $lo .= "\t" x $ntab;                   31             $lo .= "\t" x $ntab;
 33             $pos = $npos;                          32             $pos = $npos;
 34             $nsp = 0;                              33             $nsp = 0;
 35         } elsif ($c eq "\n" || $c eq "\r") {       34         } elsif ($c eq "\n" || $c eq "\r") {
 36             $lo .= " " x $nsp;                     35             $lo .= " " x $nsp;
 37             $pos += $nsp;                          36             $pos += $nsp;
 38             $nsp = 0;                              37             $nsp = 0;
 39             $lo .= $c;                             38             $lo .= $c;
 40             $pos = 0;                              39             $pos = 0;
 41         } elsif ($c eq " ") {                      40         } elsif ($c eq " ") {
 42             $nsp++;                                41             $nsp++;
 43         } else {                                   42         } else {
 44             $lo .= " " x $nsp;                     43             $lo .= " " x $nsp;
 45             $pos += $nsp;                          44             $pos += $nsp;
 46             $nsp = 0;                              45             $nsp = 0;
 47             $lo .= $c;                             46             $lo .= $c;
 48             $pos++;                                47             $pos++;
 49         }                                          48         }
 50     }                                              49     }
 51     $lo .= " " x $nsp;                             50     $lo .= " " x $nsp;
 52     return $lo;                                    51     return $lo;
 53 }                                                  52 }
 54                                                    53 
 55 # Compute the visual width of a string             54 # Compute the visual width of a string
 56 sub strwidth($) {                                  55 sub strwidth($) {
 57     no bytes;                   # Tab alignmen     56     no bytes;                   # Tab alignment depends on characters
 58                                                    57 
 59     my($li) = @_;                                  58     my($li) = @_;
 60     my($c, $i);                                    59     my($c, $i);
 61     my $pos = 0;                                   60     my $pos = 0;
 62     my $mlen = 0;                                  61     my $mlen = 0;
 63                                                    62 
 64     for ($i = 0; $i < length($li); $i++) {         63     for ($i = 0; $i < length($li); $i++) {
 65         $c = substr($li,$i,1);                     64         $c = substr($li,$i,1);
 66         if ($c eq "\t") {                          65         if ($c eq "\t") {
 67             $pos = ($pos+8) & ~7;                  66             $pos = ($pos+8) & ~7;
 68         } elsif ($c eq "\n") {                     67         } elsif ($c eq "\n") {
 69             $mlen = $pos if ($pos > $mlen);        68             $mlen = $pos if ($pos > $mlen);
 70             $pos = 0;                              69             $pos = 0;
 71         } else {                                   70         } else {
 72             $pos++;                                71             $pos++;
 73         }                                          72         }
 74     }                                              73     }
 75                                                    74 
 76     $mlen = $pos if ($pos > $mlen);                75     $mlen = $pos if ($pos > $mlen);
 77     return $mlen;                                  76     return $mlen;
 78 }                                                  77 }
 79                                                    78 
 80 $name = basename($0);                              79 $name = basename($0);
 81                                                    80 
 82 @files = ();                                       81 @files = ();
 83                                                    82 
 84 while (defined($a = shift(@ARGV))) {               83 while (defined($a = shift(@ARGV))) {
 85     if ($a =~ /^-/) {                              84     if ($a =~ /^-/) {
 86         if ($a eq '-width' || $a eq '-w') {        85         if ($a eq '-width' || $a eq '-w') {
 87             $max_width = shift(@ARGV)+0;           86             $max_width = shift(@ARGV)+0;
 88         } else {                                   87         } else {
 89             print STDERR "Usage: $name [-width     88             print STDERR "Usage: $name [-width #] files...\n";
 90             exit 1;                                89             exit 1;
 91         }                                          90         }
 92     } else {                                       91     } else {
 93         push(@files, $a);                          92         push(@files, $a);
 94     }                                              93     }
 95 }                                                  94 }
 96                                                    95 
 97 foreach $f ( @files ) {                            96 foreach $f ( @files ) {
 98     print STDERR "$name: $f\n";                    97     print STDERR "$name: $f\n";
 99                                                    98 
100     if (! -f $f) {                                 99     if (! -f $f) {
101         print STDERR "$f: not a file\n";          100         print STDERR "$f: not a file\n";
102         next;                                     101         next;
103     }                                             102     }
104                                                   103 
105     if (!open(FILE, '+<', $f)) {                  104     if (!open(FILE, '+<', $f)) {
106         print STDERR "$name: Cannot open file:    105         print STDERR "$name: Cannot open file: $f: $!\n";
107         next;                                     106         next;
108     }                                             107     }
109                                                   108 
110     binmode FILE;                                 109     binmode FILE;
111                                                   110 
112     # First, verify that it is not a binary fi    111     # First, verify that it is not a binary file; consider any file
113     # with a zero byte to be a binary file.  I    112     # with a zero byte to be a binary file.  Is there any better, or
114     # additional, heuristic that should be app    113     # additional, heuristic that should be applied?
115     $is_binary = 0;                               114     $is_binary = 0;
116                                                   115 
117     while (read(FILE, $data, 65536) > 0) {        116     while (read(FILE, $data, 65536) > 0) {
118         if ($data =~ /\0/) {                      117         if ($data =~ /\0/) {
119             $is_binary = 1;                       118             $is_binary = 1;
120             last;                                 119             last;
121         }                                         120         }
122     }                                             121     }
123                                                   122 
124     if ($is_binary) {                             123     if ($is_binary) {
125         print STDERR "$name: $f: binary file\n    124         print STDERR "$name: $f: binary file\n";
126         next;                                     125         next;
127     }                                             126     }
128                                                   127 
129     seek(FILE, 0, 0);                             128     seek(FILE, 0, 0);
130                                                   129 
131     $in_bytes = 0;                                130     $in_bytes = 0;
132     $out_bytes = 0;                               131     $out_bytes = 0;
133     $blank_bytes = 0;                             132     $blank_bytes = 0;
134                                                   133 
135     @blanks = ();                                 134     @blanks = ();
136     @lines  = ();                                 135     @lines  = ();
137     $lineno = 0;                                  136     $lineno = 0;
138                                                   137 
139     while ( defined($line = <FILE>) ) {           138     while ( defined($line = <FILE>) ) {
140         $lineno++;                                139         $lineno++;
141         $in_bytes += length($line);               140         $in_bytes += length($line);
142         $line =~ s/[ \t\r]*$//;         # Remo    141         $line =~ s/[ \t\r]*$//;         # Remove trailing spaces
143         $line = clean_space_tabs($line);          142         $line = clean_space_tabs($line);
144                                                   143 
145         if ( $line eq "\n" ) {                    144         if ( $line eq "\n" ) {
146             push(@blanks, $line);                 145             push(@blanks, $line);
147             $blank_bytes += length($line);        146             $blank_bytes += length($line);
148         } else {                                  147         } else {
149             push(@lines, @blanks);                148             push(@lines, @blanks);
150             $out_bytes += $blank_bytes;           149             $out_bytes += $blank_bytes;
151             push(@lines, $line);                  150             push(@lines, $line);
152             $out_bytes += length($line);          151             $out_bytes += length($line);
153             @blanks = ();                         152             @blanks = ();
154             $blank_bytes = 0;                     153             $blank_bytes = 0;
155         }                                         154         }
156                                                   155 
157         $l_width = strwidth($line);               156         $l_width = strwidth($line);
158         if ($max_width && $l_width > $max_widt    157         if ($max_width && $l_width > $max_width) {
159             print STDERR                          158             print STDERR
160                 "$f:$lineno: line exceeds $max    159                 "$f:$lineno: line exceeds $max_width characters ($l_width)\n";
161         }                                         160         }
162     }                                             161     }
163                                                   162 
164     # Any blanks at the end of the file are di    163     # Any blanks at the end of the file are discarded
165                                                   164 
166     if ($in_bytes != $out_bytes) {                165     if ($in_bytes != $out_bytes) {
167         # Only write to the file if changed       166         # Only write to the file if changed
168         seek(FILE, 0, 0);                         167         seek(FILE, 0, 0);
169         print FILE @lines;                        168         print FILE @lines;
170                                                   169 
171         if ( !defined($where = tell(FILE)) ||     170         if ( !defined($where = tell(FILE)) ||
172              !truncate(FILE, $where) ) {          171              !truncate(FILE, $where) ) {
173             die "$name: Failed to truncate mod    172             die "$name: Failed to truncate modified file: $f: $!\n";
174         }                                         173         }
175     }                                             174     }
176                                                   175 
177     close(FILE);                                  176     close(FILE);
178 }                                                 177 }
                                                      

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php