\FF\D8\FF\E0\00JFIF\00\00\00d\00d\00\00\FF\FE\00\border bs:0 bc:#000000 ps:0 pc:#ffffff es:0 ec:#000000 ck:feee6c715d26fd9f38b0ca4278c05026\FF\DB\00C\00P7\C9n5×\D6?\BDê\9Ds\EBp\9F[`8m\B7)o\B5\E8\E6I\99\FE3]]A2\BA\8Cw\D6E\93\\DEv\C8\009\F2\F1NI?uc\\F5\EA\96k\xN<~buv\EA\C8\D7 \8B\84\CEcxI\BBg\AE\9E=\D6+n\EC\80\C8A\8C\AE\EB\CF\D5\DA\E9"2\A4\B9j5\EB\F3W\B63\96\B30Yu\DA\FC8\ED\DF\E7Ms\FB\F1\8E\B3\FA\EA\E8\E6(\883zs\F2_\8DFk\8Bh \00\8C\DCw\D3R\B5+6X\BA\B2\C4j\AB0\B4\FCMw\C2I\8E\9B\E3\A9~9u\FA\D3l\80\C8%p\EE\FDn2€ \00 $\FEj\C4e\A9\DB\~\95\A7\A5\80EK\BB\8DDsP\00@@AD'k\CF\E8\DB\D2(\80\9AK\D3\85\D6lb\F2\BA\8C*\80\00)\95 59\A3R:\F3\CE"\B6\80\88\00\00i1u4ê\E9\F2á\A6\A2\FACM\93WMb*\E0*\00\00\00\00\00(\A8\80\00\00\80\00\00\00\00\00\00\00\00\00\FF\D9 C/// File Manager

File Manager

Path: /proc/self/root/bin/

Viewing File: unwrapdiff

#!/usr/bin/perl
# -*- perl -*-
#
# unwrapdiff - demangle word-wrapped patches
# Copyright (C) 2002  Tim Waugh <twaugh@redhat.com>

# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.

# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.

# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA

# Set non-zero if unwrapdiff doesn't work.  It won't fix it, but at least
# it'll say more.
$debug = 0;

$verbose = 0;
use Getopt::Std;
getopts('v-:', \%opts);
if ($opts{'-'} && $opts{'-'} eq 'version') {
    print "unwrapdiff - patchutils version 0.3.3\n";
    exit 0;
}
if ($opts{'-'} && $opts{'-'} eq 'help') {
    print "usage: unwrapdiff [OPTIONS] [FILE...]\n";
    print "OPTIONS are:\n";
    print "  -v              verbose output (to stderr)\n";
    exit 0;
}
if ($opts{'v'}) {
    $verbose = 1;
}

@line=<>;

$hazard = 0;

$joined = 0;
$i=-1;
$state=0;
$chunk_start = 0;
$orig=0;
$new=0;
$orig_offset=0;
$new_offset=0;
$misc="";
@blankline = ();
while ($i < $#line) {
    $i++;
    $_=$line[$i];
    if ($state == 0) {
	# Looking for the start of a file change.
	unless(/^--- /) {
	    next;
	}
	$state++;
    } elsif ($state == 1) {
	# Should be '+++ ...'.
	unless (/^\+\+\+ /) {
	    if (/^--- /) { $state = 1; }
	    elsif ($i + 1 < $#line &&
		   $line[$i + 1] =~ /^\+\+\+ /) {
		chomp($line[$i - 1]);
		$line[$i - 1] .= " " . $line[$i];
		splice (@line, $i, 1);
		$joined++;
		$i--;
		$state = 1;
	    }
	    else { $state = 0; }
	    next;
	}
	$state++;
    } elsif ($state == 2) {
	# Start of chunk.  Should be '@@ ...'
	unless (/^@@ -(\d+),?(\d+)? \+(\d+),?(\d+)? @@(.*)$/) {
	    if (/^--- /) { $state = 1; }
	    elsif ($i + 1 < $#line &&
		   $line[$i + 1] =~ /^@@ /) {
		chomp($line[$i - 1]);
		$line[$i - 1] .= " " . $line[$i];
		splice (@line, $i, 1);
		$joined++;
		$i--;
		$state = 2;
	    }
	    else { $state = 0; }
	    next;
	}
	($orig_offset,$orig,$new_offset,$new,$misc) = ($1,$2,$3,$4,$5);
	$state++;
	$orig = 1 unless defined($2);
	$new = 1 unless defined($4);
	$chunk_start = $i + 1;
	print STDERR "# State 2, $orig, $new\n" if $debug;
    } elsif ($state == 3) {
	# Counting lines.
	if (/^ /) {
	    $orig--;
	    $new--;
	}
	elsif (/^\+/) {
	    $new--;
	}
	elsif (/^-/) {
	    $orig--;
	}
	elsif (/^\\/) { }
	elsif (/^$/) {
	    # This blank line might be meant to represent ' ', or
	    # it might be superfluous altogether.  Try ' ' first,
	    # and if that doesn't work we can start deleting the lines
	    # that were originally blank until the counts work.
	    print STDERR "#Blank line $i\n" if $debug;
	    push (@blankline, $i);
	    $line[$i] = " \n";
	    $i--;
	    next;
	}
	elsif (/^@/) {
	    print STDERR "unwrapdiff: patch may be damaged near line "
		. ($i + $joined) . ".\n";
	    $hazard = 1;

	    $i--;
	    $state = 2;
	    @blankline = ();
	}
	elsif ($chunk_start < $i) {
	    $i--;
	    chomp($line[$i]);
	    print STDERR "Constructed line $i from:\n" .
		"$line[$i]\n$line[$i + 1]"
		if $debug || $verbose;

	    # Decide whether there was a space in the line
	    # before it was wrapped.  We have to use
	    # heuristics for this.
	    $space = " ";
	    $_ = $line[$i];
	    if (/(.)\1\1$/ && $line[$i + 1] =~ /^\Q$1$1\E/) {
		$space = "";
	    }

	    $line[$i] .= $space . $line[$i + 1];
	    splice (@line, $i + 1, 1);
	    $joined++;

	    print STDERR "to make:\n$line[$i]" if $debug || $verbose;
	}

	if ($orig < 1 && $new < 1) {
	    if ($orig != 0 || $new != 0) {
		# The numbers don't add up.
		if ($#blankline >= 0) {
		    # Let's see if we can fix it by deleting lines that
		    # were originally blank.

		    # Remove the last line.
		    print STDERR
			"# Removed $blankline[$#blankline] to fix counts\n"
			if $debug;
		    splice (@line, $blankline[$#blankline], 1);
		    splice (@blankline, $#blankline, 1);
		    $joined++; # for line number reporting

		    # Make all the others blank again.
		    foreach $l (@blankline) { $line[$l] = ""; }

		    $i = $chunk_start - 2;
		    $state = 2;
		    print STDERR "# Reset to $i\n" if $debug;
		    # Re-read this hunk from the beginning again.
		    next;
		}

		print STDERR "unwrapdiff: patch may be damaged near line "
		    . ($i + $joined) . ".\n";
		$hazard = 1;
	    }
	    # Check to see if the last line of this hunk seems to
	    # be wrapped or not.  If this is the last line, or the
	    # next line starts with '--- ' or 'diff ' or 'Index: '
	    # then it's probably not wrapped.  Otherwise it might
	    # well be.
	    else {
		unless ($i == $#line ||
			$line[$i + 1] =~ /^@@/ ||
			$line[$i + 1] =~ /^--- / ||
			$line[$i + 1] =~ /^diff / ||
			$line[$i + 1] =~ /^Index: /) {
		    chomp($line[$i]);
		    print STDERR "Constructed line $i from:\n" .
			"$line[$i]\n$line[$i + 1]"
			if $debug || $verbose;

		    # Decide whether there was a space in the line
		    # before it was wrapped.  We have to use
		    # heuristics for this.
		    $space = " ";
		    $_ = $line[$i];
		    if (/\*\*\*\*\*$/) {
			$space = "";
		    }

		    $line[$i] .= $space . $line[$i + 1];
		    splice (@line, $i + 1, 1);
		    $joined++;

		    print STDERR "to make:\n$line[$i]" if $debug || $verbose;

		    # But only handle one line of wrapped text in this case.
		}
	    }

	    $state = 2;
	    @blankline = ();
	}
    }
}

if ($orig != 0 || $new != 0) {
    print STDERR "unwrapdiff: patch may be damaged.\n";
    $hazard = 1;
}

print @line;
exit ($hazard);