summaryrefslogtreecommitdiffstats
path: root/contrib/perl5/lib/FileCache.pm
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/perl5/lib/FileCache.pm')
-rw-r--r--contrib/perl5/lib/FileCache.pm78
1 files changed, 0 insertions, 78 deletions
diff --git a/contrib/perl5/lib/FileCache.pm b/contrib/perl5/lib/FileCache.pm
deleted file mode 100644
index e1c5ec4..0000000
--- a/contrib/perl5/lib/FileCache.pm
+++ /dev/null
@@ -1,78 +0,0 @@
-package FileCache;
-
-=head1 NAME
-
-FileCache - keep more files open than the system permits
-
-=head1 SYNOPSIS
-
- cacheout $path;
- print $path @data;
-
-=head1 DESCRIPTION
-
-The C<cacheout> function will make sure that there's a filehandle open
-for writing available as the pathname you give it. It automatically
-closes and re-opens files if you exceed your system file descriptor
-maximum.
-
-=head1 BUGS
-
-F<sys/param.h> lies with its C<NOFILE> define on some systems,
-so you may have to set $FileCache::cacheout_maxopen yourself.
-
-=cut
-
-require 5.000;
-use Carp;
-use Exporter;
-
-@ISA = qw(Exporter);
-@EXPORT = qw(
- cacheout
-);
-
-# Open in their package.
-
-sub cacheout_open {
- my $pack = caller(1);
- open(*{$pack . '::' . $_[0]}, $_[1]);
-}
-
-sub cacheout_close {
- my $pack = caller(1);
- close(*{$pack . '::' . $_[0]});
-}
-
-# But only this sub name is visible to them.
-
-$cacheout_seq = 0;
-$cacheout_numopen = 0;
-
-sub cacheout {
- ($file) = @_;
- unless (defined $cacheout_maxopen) {
- if (open(PARAM,'/usr/include/sys/param.h')) {
- local ($_, $.);
- while (<PARAM>) {
- $cacheout_maxopen = $1 - 4
- if /^\s*#\s*define\s+NOFILE\s+(\d+)/;
- }
- close PARAM;
- }
- $cacheout_maxopen = 16 unless $cacheout_maxopen;
- }
- if (!$isopen{$file}) {
- if (++$cacheout_numopen > $cacheout_maxopen) {
- my @lru = sort {$isopen{$a} <=> $isopen{$b};} keys(%isopen);
- splice(@lru, $cacheout_maxopen / 3);
- $cacheout_numopen -= @lru;
- for (@lru) { &cacheout_close($_); delete $isopen{$_}; }
- }
- cacheout_open($file, ($saw{$file}++ ? '>>' : '>') . $file)
- or croak("Can't create $file: $!");
- }
- $isopen{$file} = ++$cacheout_seq;
-}
-
-1;
OpenPOWER on IntegriCloud