#! /usr/bin/perl
use IPC::Open3;
use strict;
use warnings;
my $patchdir = "patch2.diff";
my $found = 0;
sub runstr {
my @cmd=@_;
print "cmd=@cmd\n";
local $/;
local (*PIPE);
open3(fileno STDIN, \*PIPE, ">/dev/null", @cmd);
my $output = <PIPE>;
close PIPE or $!==0 or die "can't run @cmd:$!\n";
print "output: $output\n";
return $output;
}
sub findpatch{
my ($cmd1, $cmd2, $cmd3) = @_;
print "cmd1=$cmd1, cmd2=$cmd2,cmd3=$cmd3\n";
my $current = runstr("pwd");
$current =~ s/\n//g;
print "current:$current\n";
chdir($cmd1);
my $out = runstr("cat", $cmd2);
my $obj = $out =~ s/\n/\0/g;
print "obj:$obj, out:$out\n";
my $outfiles = runstr("cat", $cmd3);
$outfiles =~ s/\n/\0/g;
print "outfiles:$outfiles\n";
foreach my $in (split/\0/, $outfiles) {
print "in:$in\n";
for (split/\0/, $out) {
print "_sdddd:$_\n";
if ($_ eq $patchdir) {
last;
}
-e "$_/$in" or next;
$found = 1;
print "$_:found=$found\n";
}
if ($found) {
last;
}
}
chdir($current);
return $found;
}
if (findpatch("/home/xuan/linux/.pc", "/home/xuan/linux/patches/series", "/home/xuan/linux/patchfiles/files")) {
print "have found patch\n";
}