- my ($key, $prefixes) = ($keyword, '');
- my %pkgs;
- my $p_obj = tie my %pref, 'DB_File', "$DBDIR/$postfix_file", O_RDONLY, 0666, $DB_BTREE
- or die "couldn't tie postfix db $DBDIR/$postfix_file: $!";
- $p_obj->seq( $key, $prefixes, R_CURSOR );
- do {
- if ($prefixes =~ /^\001(\d+)/o) {
- $too_much_hits += $1;
- } else {
- print "DEBUG: add word $key<br>" if $debug > 2;
- $pkgs{$key}++;
- foreach (split /\000/o, $prefixes) {
- print "DEBUG: add word $_$key<br>" if $debug > 2;
- $pkgs{$_.$key}++;
- }
- }
- } while (($p_obj->seq( $key, $prefixes, R_NEXT ) == 0)
- && (index($key, $keyword) >= 0)
- && !$too_much_hits
- && (keys %pkgs < 100));
-
- my $no_results = keys %pkgs;
- if ($too_much_hits || ($no_results >= 100)) {
- $too_much_hits += $no_results;
- %pkgs = ( $keyword => 1 );
- }
- foreach my $pkg (sort keys %pkgs) {
- &$read_entry( \%packages, $pkg, \@results );
- }
- }
-}
-
-if ($searchon eq 'names') {
- do_names_search( $keyword, 'packages_small.db',
- 'package_postfixes.db', \&read_entry );
-} elsif ($searchon eq 'sourcenames') {
- do_names_search( $keyword, 'sources_small.db',
- 'source_postfixes.db', \&read_src_entry );
-} else {
-
- my @lines;
- my $regex;
- if ($case_bool) {
- if ($exact) {
- $regex = qr/\b\Q$keyword\E\b/o;
- } else {
- $regex = qr/\Q$keyword\E/o;
- }
- } else {
- if ($exact) {
- $regex = qr/\b\Q$keyword\E\b/io;
- } else {
- $regex = qr/\Q$keyword\E/io;
- }
- }
-
- open DESC, '<', "$DBDIR/descriptions.txt" or die "couldn't open $DBDIR/descriptions.txt: $!";
- while (<DESC>) {
- $_ =~ $regex or next;
- print "DEBUG: Matched line $.<br>" if $debug > 2;
- push @lines, $.;
- }
- close DESC;
-
- my $obj = tie my %packages, 'DB_File', "$DBDIR/packages_small.db", O_RDONLY, 0666, $DB_BTREE
- or die "couldn't tie DB $DBDIR/packages_small.db: $!";
- my $obj = tie my %did2pkg, 'DB_File', "$DBDIR/descriptions_packages.db", O_RDONLY, 0666, $DB_BTREE
- or die "couldn't tie DB $DBDIR/descriptions_packages.db: $!";
-
- my %tmp_results;
- foreach my $l (@lines) {
- my $result = $did2pkg{$l};
- foreach (split /\000/o, $result) {
- my @data = split /\s/, $_, 3;
- next unless $archs{$data[2]};
- $tmp_results{$data[0]}++;
- }
- }
- foreach my $pkg (keys %tmp_results) {
- read_entry( \%packages, $pkg, \@results );