diff options
Diffstat (limited to 'Master/tlpkg/tlperl/lib/cacheout.pl')
-rwxr-xr-x | Master/tlpkg/tlperl/lib/cacheout.pl | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/Master/tlpkg/tlperl/lib/cacheout.pl b/Master/tlpkg/tlperl/lib/cacheout.pl new file mode 100755 index 00000000000..d2669a1cfa8 --- /dev/null +++ b/Master/tlpkg/tlperl/lib/cacheout.pl @@ -0,0 +1,55 @@ +# +# This library is no longer being maintained, and is included for backward +# compatibility with Perl 4 programs which may require it. +# +# In particular, this should not be used as an example of modern Perl +# programming techniques. +# +# Suggested alternative: FileCache + +# Open in their package. + +sub cacheout'open { + open($_[0], $_[1]); +} + +# Close as well + +sub cacheout'close { + close($_[0]); +} + +# But only this sub name is visible to them. + +sub cacheout { + package cacheout; + + ($file) = @_; + if (!$isopen{$file}) { + if (++$numopen > $maxopen) { + local(@lru) = sort {$isopen{$a} <=> $isopen{$b};} keys(%isopen); + splice(@lru, $maxopen / 3); + $numopen -= @lru; + for (@lru) { &close($_); delete $isopen{$_}; } + } + &open($file, ($saw{$file}++ ? '>>' : '>') . $file) + || die "Can't create $file: $!\n"; + } + $isopen{$file} = ++$seq; +} + +package cacheout; + +$seq = 0; +$numopen = 0; + +if (open(PARAM,'/usr/include/sys/param.h')) { + local($_, $.); + while (<PARAM>) { + $maxopen = $1 - 4 if /^\s*#\s*define\s+NOFILE\s+(\d+)/; + } + close PARAM; +} +$maxopen = 16 unless $maxopen; + +1; |