Orange Pi5 kernel

Deprecated Linux kernel 5.10.110 for OrangePi 5/5B/5+ boards

3 Commits   0 Branches   0 Tags
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   1) #!/usr/bin/env perl
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   2) # SPDX-License-Identifier: GPL-2.0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   3) #
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   4) # Clean a patch file -- or directory of patch files -- of stealth whitespace.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   5) # WARNING: this can be a highly destructive operation.  Use with caution.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   6) #
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   7) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   8) use warnings;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   9) use bytes;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  10) use File::Basename;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  11) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  12) # Default options
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  13) $max_width = 79;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  14) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  15) # Clean up space-tab sequences, either by removing spaces or
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  16) # replacing them with tabs.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  17) sub clean_space_tabs($)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  18) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  19)     no bytes;			# Tab alignment depends on characters
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  20) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  21)     my($li) = @_;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  22)     my($lo) = '';
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  23)     my $pos = 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  24)     my $nsp = 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  25)     my($i, $c);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  26) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  27)     for ($i = 0; $i < length($li); $i++) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  28) 	$c = substr($li, $i, 1);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  29) 	if ($c eq "\t") {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  30) 	    my $npos = ($pos+$nsp+8) & ~7;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  31) 	    my $ntab = ($npos >> 3) - ($pos >> 3);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  32) 	    $lo .= "\t" x $ntab;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  33) 	    $pos = $npos;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  34) 	    $nsp = 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  35) 	} elsif ($c eq "\n" || $c eq "\r") {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  36) 	    $lo .= " " x $nsp;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  37) 	    $pos += $nsp;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  38) 	    $nsp = 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  39) 	    $lo .= $c;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  40) 	    $pos = 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  41) 	} elsif ($c eq " ") {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  42) 	    $nsp++;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  43) 	} else {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  44) 	    $lo .= " " x $nsp;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  45) 	    $pos += $nsp;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  46) 	    $nsp = 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  47) 	    $lo .= $c;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  48) 	    $pos++;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  49) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  50)     }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  51)     $lo .= " " x $nsp;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  52)     return $lo;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  53) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  54) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  55) # Compute the visual width of a string
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  56) sub strwidth($) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  57)     no bytes;			# Tab alignment depends on characters
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  58) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  59)     my($li) = @_;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  60)     my($c, $i);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  61)     my $pos = 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  62)     my $mlen = 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  63) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  64)     for ($i = 0; $i < length($li); $i++) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  65) 	$c = substr($li,$i,1);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  66) 	if ($c eq "\t") {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  67) 	    $pos = ($pos+8) & ~7;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  68) 	} elsif ($c eq "\n") {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  69) 	    $mlen = $pos if ($pos > $mlen);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  70) 	    $pos = 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  71) 	} else {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  72) 	    $pos++;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  73) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  74)     }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  75) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  76)     $mlen = $pos if ($pos > $mlen);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  77)     return $mlen;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  78) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  79) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  80) $name = basename($0);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  81) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  82) @files = ();
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  83) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  84) while (defined($a = shift(@ARGV))) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  85)     if ($a =~ /^-/) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  86) 	if ($a eq '-width' || $a eq '-w') {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  87) 	    $max_width = shift(@ARGV)+0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  88) 	} else {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  89) 	    print STDERR "Usage: $name [-width #] files...\n";
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  90) 	    exit 1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  91) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  92)     } else {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  93) 	push(@files, $a);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  94)     }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  95) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  96) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  97) foreach $f ( @files ) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  98)     print STDERR "$name: $f\n";
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  99) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100)     if (! -f $f) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101) 	print STDERR "$f: not a file\n";
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102) 	next;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103)     }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 104) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 105)     if (!open(FILE, '+<', $f)) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 106) 	print STDERR "$name: Cannot open file: $f: $!\n";
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 107) 	next;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 108)     }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 109) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 110)     binmode FILE;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 111) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 112)     # First, verify that it is not a binary file; consider any file
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 113)     # with a zero byte to be a binary file.  Is there any better, or
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 114)     # additional, heuristic that should be applied?
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 115)     $is_binary = 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 116) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 117)     while (read(FILE, $data, 65536) > 0) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 118) 	if ($data =~ /\0/) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 119) 	    $is_binary = 1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 120) 	    last;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 121) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 122)     }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 123) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 124)     if ($is_binary) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 125) 	print STDERR "$name: $f: binary file\n";
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 126) 	next;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 127)     }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 128) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 129)     seek(FILE, 0, 0);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 130) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 131)     $in_bytes = 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 132)     $out_bytes = 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 133)     $lineno = 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 134) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 135)     @lines  = ();
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 136) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 137)     $in_hunk = 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 138)     $err = 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 139) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 140)     while ( defined($line = <FILE>) ) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 141) 	$lineno++;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 142) 	$in_bytes += length($line);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 143) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 144) 	if (!$in_hunk) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 145) 	    if ($line =~
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 146) 		/^\@\@\s+\-([0-9]+),([0-9]+)\s+\+([0-9]+),([0-9]+)\s\@\@/) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 147) 		$minus_lines = $2;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 148) 		$plus_lines = $4;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 149) 		if ($minus_lines || $plus_lines) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 150) 		    $in_hunk = 1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 151) 		    @hunk_lines = ($line);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 152) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 153) 	    } else {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 154) 		push(@lines, $line);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 155) 		$out_bytes += length($line);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 156) 	    }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 157) 	} else {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 158) 	    # We're in a hunk
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 159) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 160) 	    if ($line =~ /^\+/) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 161) 		$plus_lines--;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 162) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 163) 		$text = substr($line, 1);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 164) 		$text =~ s/[ \t\r]*$//;		# Remove trailing spaces
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 165) 		$text = clean_space_tabs($text);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 166) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 167) 		$l_width = strwidth($text);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 168) 		if ($max_width && $l_width > $max_width) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 169) 		    print STDERR
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 170) 			"$f:$lineno: adds line exceeds $max_width ",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 171) 			"characters ($l_width)\n";
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 172) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 173) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 174) 		push(@hunk_lines, '+'.$text);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 175) 	    } elsif ($line =~ /^\-/) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 176) 		$minus_lines--;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 177) 		push(@hunk_lines, $line);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 178) 	    } elsif ($line =~ /^ /) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 179) 		$plus_lines--;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 180) 		$minus_lines--;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 181) 		push(@hunk_lines, $line);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 182) 	    } else {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 183) 		print STDERR "$name: $f: malformed patch\n";
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 184) 		$err = 1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 185) 		last;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 186) 	    }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 187) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 188) 	    if ($plus_lines < 0 || $minus_lines < 0) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 189) 		print STDERR "$name: $f: malformed patch\n";
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 190) 		$err = 1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 191) 		last;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 192) 	    } elsif ($plus_lines == 0 && $minus_lines == 0) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 193) 		# End of a hunk.  Process this hunk.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 194) 		my $i;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 195) 		my $l;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 196) 		my @h = ();
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 197) 		my $adj = 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 198) 		my $done = 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 199) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 200) 		for ($i = scalar(@hunk_lines)-1; $i > 0; $i--) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 201) 		    $l = $hunk_lines[$i];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 202) 		    if (!$done && $l eq "+\n") {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 203) 			$adj++; # Skip this line
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 204) 		    } elsif ($l =~ /^[ +]/) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 205) 			$done = 1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 206) 			unshift(@h, $l);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 207) 		    } else {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 208) 			unshift(@h, $l);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 209) 		    }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 210) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 211) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 212) 		$l = $hunk_lines[0];  # Hunk header
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 213) 		undef @hunk_lines;    # Free memory
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 214) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 215) 		if ($adj) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 216) 		    die unless
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 217) 			($l =~ /^\@\@\s+\-([0-9]+),([0-9]+)\s+\+([0-9]+),([0-9]+)\s\@\@(.*)$/);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 218) 		    my $mstart = $1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 219) 		    my $mlin = $2;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 220) 		    my $pstart = $3;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 221) 		    my $plin = $4;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 222) 		    my $tail = $5; # doesn't include the final newline
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 223) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 224) 		    $l = sprintf("@@ -%d,%d +%d,%d @@%s\n",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 225) 				 $mstart, $mlin, $pstart, $plin-$adj,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 226) 				 $tail);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 227) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 228) 		unshift(@h, $l);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 229) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 230) 		# Transfer to the output array
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 231) 		foreach $l (@h) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 232) 		    $out_bytes += length($l);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 233) 		    push(@lines, $l);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 234) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 235) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 236) 		$in_hunk = 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 237) 	    }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 238) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 239)     }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 240) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 241)     if ($in_hunk) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 242) 	print STDERR "$name: $f: malformed patch\n";
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 243) 	$err = 1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 244)     }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 245) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 246)     if (!$err) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 247) 	if ($in_bytes != $out_bytes) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 248) 	    # Only write to the file if changed
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 249) 	    seek(FILE, 0, 0);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 250) 	    print FILE @lines;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 251) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 252) 	    if ( !defined($where = tell(FILE)) ||
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 253) 		 !truncate(FILE, $where) ) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 254) 		die "$name: Failed to truncate modified file: $f: $!\n";
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 255) 	    }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 256) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 257)     }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 258) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 259)     close(FILE);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 260) }