# Apache::TempFile.pm
#
# Copyright (c) 1998-2002 Tom Hughes <tom@compton.nu>.
# All rights reserved. This program is free software; you can redistribute
# it and/or modify it under the same terms as Perl itself.
#
# $Id: TempFile.pm,v 1.4 2002/08/17 22:33:39 tom Exp $

package Apache::TempFile;

use strict;

use Apache;
use Carp;
use Exporter;

$Apache::TempFile::VERSION = '0.05';
@Apache::TempFile::ISA = qw(Exporter);
@Apache::TempFile::EXPORT_OK = qw(tempfile tempname);
%Apache::TempFile::EXPORT_TAGS = ( all => \@Apache::TempFile::EXPORT_OK );

@Apache::TempFile::names = ();

sub cleanup
{
  foreach my $name (@Apache::TempFile::names)
  {
    unlink($name);
  }

  @Apache::TempFile::names = ();

  return;
}

sub tempname
{
  croak 'usage: Apache::TempFile::tempname([EXTENSION])' unless @_ <= 1;

  my($directory) = $ENV{TMPDIR} || '/tmp';
  my($extension) = shift;
  my($sequence) = scalar(@Apache::TempFile::names);
  my($name) = "$directory/httpd.$$.$sequence";

  $name = "$name.$extension" if defined($extension);

  if ($ENV{MOD_PERL} && @Apache::TempFile::names == 0)
  {
      Apache->request->register_cleanup(\&cleanup);
  }

  push(@Apache::TempFile::names, $name);

  return $name;
}

END { cleanup(); }

1;

__END__

=head1 NAME

Apache::TempFile - Allocate temporary filenames for the duration of a request

=head1 SYNOPSIS

  use Apache::TempFile qw(tempname)
  my($name) = tempname();
  open(FILE,">$name");
  print FILE "Testing\n";
  close(FILE);

=head1 DESCRIPTION

This module provides names for temporary files and ensures that they are
removed when the current request is completed.

=head1 FUNCTIONS

=over 4

=item tempname

This routine returns a unique temporary filename and arranges for that
file to be removed when the current request is completed. If an extension
is supplied as an argument that it will be appended to the filename which
is generated.

  my($name) = Apache::TempFile::tempname();
  my($name) = Apache::TempFile::tempname("html");

=back

=head1 AUTHOR

Tom Hughes, tom@compton.nu

=head1 SEE ALSO

Apache(3), mod_perl(3)

=cut