#!/usr/bin/perl -w

# specify complete path+name for RAV program
#my $ravprogram = '/usr/local/rav8/bin/ravlin8';
my $ravprogram;
$ravprogram = shift;
$ravprogram .= '/bin/ravav';

my $tmpdir = '/tmp';

if ($ARGV[0] eq '-IsItInstalled') {
  exit 0 if -x $ravprogram;
  exit 1;
}

# Unfortunately Rav Antivirus truncates filenames when writing to STDOUT but
# preserves them when writing to his report file, so I run the antivirus
# with --report option and then print the report file to STDOUT and return
# the original ERRORLEVEL to sweep.pl

# build report filename using the last parameter (basedir)
my $reportfile = sprintf('%s/report.vir.%s', $tmpdir, $$);

# build command line for rav antivirus program
# Using /dev/console instead of /dev/tty1 as it exists on RaQs
# Replace the last lone "." with "./*" if it's there. Rav seems unable to
# recurse properly.
$ARGV[$#ARGV] =~ s/^\.\/?$/\.\/\*/;
my $command = sprintf('%s --report=%s %s/ </dev/console >/dev/null', $ravprogram, $reportfile, join(" ", @ARGV));

#print STDERR "Command is $command\n";
#system("echo $ravprogram --report=$reportfile " . join(" ", @ARGV) . "/ /dev/null >/tmp/report.vir.command");

# run program and store system error
my $error = system($command);

# if a report is produced...
if(-f $reportfile) {
  # open the report...
  open(RPT, "<".$reportfile);
  while(<RPT>) {
    # and print it to standard output...
    print $_;
  }
  close(RPT);
  # delete report file
  unlink($reportfile);
}

# exit using stored system error
exit($error);


syntax highlighted by Code2HTML, v. 0.9.1