#!/usr/bin/perl -w
use SOAP::Transport::HTTP;
use XML::Parser;
SOAP::Transport::HTTP::CGI
->dispatch_to('Metaspace')
->handle;
package Metaspace;
$count = 0;
# snipped some irrelevant code
sub ls {
my ($class, $metas) = @_;
my $datadir = "data";
$return = 'listing files matching '.$metas.'
';
opendir(DIR, $datadir) or return "can't open $datadir: $!";
while (defined($file = readdir(DIR))){
if (check_metas("$datadir/$file", $metas)){
$return .= ''.$file.'
';
}
}
closedir(DIR);
return $return.$count;
}
sub check_metas {
my ($file, $metas) = @_;
return 0 unless -f $file;
my $parser = new XML::Parser(ErrorContext =>2);
$parser->setHandlers(Start => \&XML_start_handler,
Char => \&XML_char_handler);
$parser->parsefile($file);
return 1;
}
sub XML_start_handler {
$count++;
}
sub XML_char_handler {
$count++;
}