From a365212c7af6559c29cfa3240890f8bcf510d13c Mon Sep 17 00:00:00 2001 From: giraffedata Date: Fri, 8 May 2009 18:23:22 +0000 Subject: use TEMP for TMPDIR if TMPDIR is not set; try only 50 temp file names before aborting git-svn-id: http://svn.code.sf.net/p/netpbm/code/trunk@918 9d0c8265-081b-0410-96cb-a4ca84ce46f8 --- buildtools/configure.pl | 53 +++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 43 insertions(+), 10 deletions(-) (limited to 'buildtools/configure.pl') diff --git a/buildtools/configure.pl b/buildtools/configure.pl index efb44ef7..f25c1ada 100755 --- a/buildtools/configure.pl +++ b/buildtools/configure.pl @@ -99,13 +99,17 @@ sub tmpdir() { my $retval; - if ($ENV{"TMPDIR"}) { - $retval = $ENV{"TMPDIR"}; + if ($ENV{'TMPDIR'}) { + $retval = $ENV{'TMPDIR'}; + } elsif ($ENV{'TEMP'}) { + $retval = $ENV{'TEMP'}; } else { - if ($Config{'osvers'} eq "djgpp") { - $retval = "/dev/env/DJDIR/tmp"; + if ($Config{'osvers'} eq 'djgpp') { + $retval = '/dev/env/DJDIR/tmp'; } else { - $retval = "/tmp"; + if (-d('/tmp')) { + $retval = '/tmp'; + } } } return $retval; @@ -122,14 +126,43 @@ sub tempFile($) { # DIR=>File::Spec->tmpdir(), # UNLINK=>0); my ($suffix) = @_; + my $fileName; local *file; # For some inexplicable reason, must be local, not my - my $i; - $i = 0; - do { - $fileName = tmpdir() . "/netpbm" . $i++ . $suffix; - } until sysopen(*file, $fileName, O_RDWR|O_CREAT|O_EXCL); + my $tmpdir = tmpdir(); + + if (!defined($tmpdir)) { + print STDERR ("Cannot determine what directory to use for " . + "temporary files. " . + "Set TMPDIR environment variable to fix this.\n"); + exit(1); + } else { + if (!-d($tmpdir)) { + print STDERR ("Temporary file directory '$tmpdir' does not " . + "exist. Create it or set TMPDIR environment " . + "variable appropriately\n"); + exit(1); + } else { + for (my $i = 0; $i < 50 && !defined($fileName); ++$i) { + my $trialFileName = tmpdir() . "/netpbm" . $i . $suffix; + + my $success = sysopen(*file, + $trialFileName, + O_RDWR|O_CREAT|O_EXCL); + + if ($success) { + $fileName = $trialFileName; + } + } + + if (!defined($fileName)) { + print STDERR ("Unable to create a temporary file in " . + "directory '$tmpdir'\n"); + exit(1); + } + } + } return(*file, $fileName); } -- cgit 1.4.1