X-Git-Url: https://git.deb.at/?a=blobdiff_plain;ds=sidebyside;f=cgi-bin%2Fsearch_contents.pl;h=5272a058292e1ed3502c208eb032673dc4dece8f;hb=888a7de02572eb30f2b35aa6ea469ad7eb9f05b4;hp=839ffc00f0ad830ab43125f6ff738cefaa942c0c;hpb=fbb483f75d3a0cd3ffc214eea6fa724d20952b3a;p=deb%2Fpackages.git
diff --git a/cgi-bin/search_contents.pl b/cgi-bin/search_contents.pl
index 839ffc0..5272a05 100755
--- a/cgi-bin/search_contents.pl
+++ b/cgi-bin/search_contents.pl
@@ -12,27 +12,57 @@
# see http://www.fsf.org/copyleft/gpl.html for a copy of the license
sub contents() {
+ my $nres = 0;
my ($cgi) = @_;
print "Extremely blunt ends-with search results:
"; # only thing implemented yet: ends-with search my $kw = lc $cgi->param("keywords"); - $kw = reverse $kw; - - # exact filename searching follows trivially: - my $exact = $cgi->param("exact"); - $kw = "/$kw" if $exact; + # full filename search is tricky + my $ffn = $cgi->param("fullfilename"); + $ffn = $ffn ? 1 : 0; + -# FIXME: ensure $suite is sanitized - my $suite = 'stable'; +my $suite = 'stable'; #fixme + # fixme: I should open $reverses only once per search my $reverses = tie my %reverses, 'DB_File', "$DBDIR/contents/reverse_$suite.db", O_RDONLY, 0666, $DB_BTREE or die "Failed opening reverse DB: $!"; - + + if ($ffn) { + open FILENAMES, "$DBDIR/contents/filenames_$suite.txt" + or die "Failed opening filename table"; + while ($nres results displayed"; + $reverses = undef; + untie %reverses; + +} + +sub dosearch +{ + my ($kw, $nres, $reverses) = @_; + my ($key, $rest) = ($kw, ""); - my $nres = 0; for (my $status = $reverses->seq($key, $value, R_CURSOR); $status == 0; $status = $reverses->seq( $key, $value, R_NEXT)) { @@ -43,12 +73,10 @@ sub contents() { @hits = split /\0/o, $value; print reverse($key)." is found in @hits\n"; - last if $nres++ > 100; + last if ($$nres)++ > 100; } - $reverses = undef; - untie %reverses; - print "$nres results displayed"; + return $$nres<100; } 1;) { + next if index($_, $kw)<0; + chomp; + last unless &dosearch(reverse($_)."/", \$nres, $reverses); + } + close FILENAMES; + } else { + + $kw = reverse $kw; + + # exact filename searching follows trivially: + my $exact = $cgi->param("exact"); + $kw = "$kw/" if $exact; + + print "ERROR: Exact and fullfilenamesearch don't go along" if $ffn and $exact; + + &dosearch($kw, \$nres, $reverses); + } + print "