3 # search_packages.pl -- CGI interface to the Packages files on packages.debian.org
5 # Copyright (C) 1998 James Treacy
6 # Copyright (C) 2000, 2001 Josip Rodin
7 # Copyright (C) 2001 Adam Heath
8 # Copyright (C) 2004 Martin Schulze
9 # Copyright (C) 2004-2006 Frank Lichtenheld
11 # use is allowed under the terms of the GNU Public License (GPL)
12 # see http://www.fsf.org/copyleft/gpl.html for a copy of the license
18 print "Extremely blunt ends-with search results:<br><pre>";
19 # only thing implemented yet: ends-with search
20 my $kw = lc $cgi->param("keywords");
23 # exact filename searching follows trivially:
24 my $exact = $cgi->param("exact");
25 $kw = "/$kw" if $exact;
27 # FIXME: ensure $suite is sanitized
30 my $reverses = tie my %reverses, 'DB_File', "$DBDIR/contents/reverse_$suite.db",
31 O_RDONLY, 0666, $DB_BTREE
32 or die "Failed opening reverse DB: $!";
34 my ($key, $rest) = ($kw, "");
36 for (my $status = $reverses->seq($key, $value, R_CURSOR);
38 $status = $reverses->seq( $key, $value, R_NEXT)) {
40 # FIXME: what's the most efficient "is prefix of" thingy? We only want to know
41 # whether $kw is or is not a prefix of $key
42 last unless index($key, $kw) == 0;
44 @hits = split /\0/o, $value;
45 print reverse($key)." is found in @hits\n";
46 last if $nres++ > 100;
51 print "</pre>$nres results displayed";