VisionFive2 Linux kernel

StarFive Tech Linux Kernel for VisionFive (JH7110) boards (mirror)

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