onsearch
view release on metacpan or search on metacpan
lib/OnSearch/Utils.pm view on Meta::CPAN
}
sub str_in_list {
my $s = shift;
my $listref = shift;
my $match_case = shift;
$s = lc $s unless $match_case;
foreach my $l (@{$listref}) {
$l = lc $l unless $match_case;
return 1 if $l eq $s;
}
return undef;
}
sub valid_lock {
my $lockfn = shift;
my ($l, $r, $lockfh);
return undef unless (-f $lockfn);
local $!;
###
### Suppress warnings about opening standard I/O channels
###
no warnings;
open $lockfh, "$lockfn" or warn "valid_lock $lockfn: $!";
use warnings;
while (defined ($l = <$lockfh>)) {
chomp $l;
$r = kill 0, $l;
if (!$r) {
OnSearch::WebLog::clf ('notice',
"Removing stale lock $lockfn ID $l");
unlink $l;
}
}
close ($lockfh);
return $r;
}
sub basename {
my $pathname = shift;
my $basename;
if ($pathname =~ /\\/) {
$basename = substr ($pathname, rindex ($pathname, '\\') + 1);
} elsif ($pathname =~ /\//) {
$basename = substr ($pathname, rindex ($pathname, '/') + 1);
} else {
$basename = $pathname;
}
return $basename
}
sub sigwrapper {
my ($signame, $sigsub, $wrapsub, @args) = @_;
my $oldsig = $SIG{$signame} if $SIG{$signame};
$SIG{$signame} = ($sigsub ? $sigsub : 'IGNORE');
&$wrapsub (@args);
$SIG{$signame} = $oldsig if $oldsig;
}
###
### TO DO - this so far is the most reliable way to index
### immediately. Try to clean up this implementation.
###
sub run_onindex {
my $txt = `/usr/local/etc/init.d/onindex index`;
OnSearch::WebLog::clf ('notice', "Onindex: $txt");
}
sub signumber {
my $signame = $_[0];
my (%sigs, $number, $name);
$number = 0;
foreach $name (split (' ', $Config{sig_name})) {
$sigs{$name} = $number++;
}
return $sigs{$signame};
}
sub client_write {
my $session_id = shift;
my $buf = shift;
my ($name, $clientfh, $serverfh);
$name = '/tmp/.onsearch.sock.' . $session_id;
socket ($serverfh, PF_UNIX, SOCK_STREAM, 0) ||
die "OnSearch: client_write socket: $!";
if (-S $name && ! unlink ($name)) {
&$logfunc ('error', "client_write unlink: $!\n");
}
bind ($serverfh, sockaddr_un($name)) ||
warn ("client_write bind: $!.");
listen ($serverfh, SOMAXCONN) ||
warn ("client_write listen: $!.");
accept ($clientfh, $serverfh) ||
warn ("client_write $$ accept: $!.");
if (fileno ($clientfh)) {
syswrite ($clientfh, $buf);
close $clientfh;
close $serverfh;
}
return;
}
1;
( run in 0.682 second using v1.01-cache-2.11-cpan-71847e10f99 )