OSDN Git Service

Update to mksh R48
[android-x86/external-mksh.git] / src / check.pl
index 5e55cd4..ecd8f8d 100644 (file)
@@ -1,7 +1,8 @@
-# $MirOS: src/bin/mksh/check.pl,v 1.31 2012/04/06 12:22:14 tg Exp $
-# $OpenBSD: th,v 1.13 2006/05/18 21:27:23 miod Exp $
+# $MirOS: src/bin/mksh/check.pl,v 1.32 2013/07/21 18:35:56 tg Exp $
+# $OpenBSD: th,v 1.16 2013/06/14 20:52:08 millert Exp $
 #-
-# Copyright (c) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2011, 2012
+# Copyright (c) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2011,
+#              2012, 2013
 #      Thorsten Glaser <tg@mirbsd.org>
 #
 # Provided that these terms and disclaimer and all copyright notices
@@ -171,13 +172,15 @@ BEGIN {
 
 use Getopt::Std;
 use Config;
+use File::Temp qw/ :mktemp /;
 
 $os = defined $^O ? $^O : 'unknown';
 
 ($prog = $0) =~ s#.*/##;
 
 $Usage = <<EOF ;
-Usage: $prog [-Pv] [-C cat] [-e e=v] [-p prog] [-s fn] [-t tmo] name ...
+Usage: $prog [-Pv] [-C cat] [-e e=v] [-p prog] [-s fn] [-T dir] \
+       [-t tmo] name ...
        -C c    Specify the comma separated list of categories the program
                belongs to (see category field).
        -e e=v  Set the environment variable e to v for all tests
@@ -188,6 +191,7 @@ Usage: $prog [-Pv] [-C cat] [-e e=v] [-p prog] [-s fn] [-t tmo] name ...
        -p p    Use p as the program to test
        -s s    Read tests from file s; if s is a directory, it is recursively
                scaned for test files (which end in .t).
+       -T dir  Use dir instead of /tmp to hold temporary files
        -t t    Use t as default time limit for tests (default is unlimited)
        -v      Verbose mode: print reason test failed.
        name    specifies the name of the test(s) to run; if none are
@@ -229,12 +233,6 @@ EOF
        "os:$os", '1'
        );
 
-$temps = "/tmp/rts$$";
-$tempi = "/tmp/rti$$";
-$tempo = "/tmp/rto$$";
-$tempe = "/tmp/rte$$";
-$tempdir = "/tmp/rtd$$";
-
 $nfailed = 0;
 $nifailed = 0;
 $nxfailed = 0;
@@ -243,7 +241,7 @@ $nxpassed = 0;
 
 %known_tests = ();
 
-if (!getopts('C:e:Pp:s:t:v')) {
+if (!getopts('C:e:Pp:s:T:t:v')) {
     print STDERR $Usage;
     exit 1;
 }
@@ -253,6 +251,7 @@ die "$prog: no test set specified (use -s)\n" if !defined $opt_s;
 $test_prog = $opt_p;
 $verbose = defined $opt_v && $opt_v;
 $test_set = $opt_s;
+$temp_dir = $opt_T || "/tmp";
 if (defined $opt_t) {
     die "$prog: bad -t argument (should be number > 0): $opt_t\n"
        if $opt_t !~ /^\d+$/ || $opt_t <= 0;
@@ -297,8 +296,6 @@ if (defined $opt_e) {
 }
 %old_env = %ENV;
 
-die "$prog: couldn't make directory $tempdir - $!\n" if !mkdir($tempdir, 0777);
-
 chop($pwd = `pwd 2>/dev/null`);
 die "$prog: couldn't get current working directory\n" if $pwd eq '';
 die "$prog: couldn't cd to $pwd - $!\n" if !chdir($pwd);
@@ -316,6 +313,17 @@ $SIG{'ALRM'} = 'catch_sigalrm';
 
 $| = 1;
 
+# Create temp files
+($fh, $temps) = mkstemp("${temp_dir}/rts.XXXXXXXX");
+close($fh);
+($fh, $tempi) = mkstemp("${temp_dir}/rti.XXXXXXXX");
+close($fh);
+($fh, $tempo) = mkstemp("${temp_dir}/rto.XXXXXXXX");
+close($fh);
+($fh, $tempe) = mkstemp("${temp_dir}/rte.XXXXXXXX");
+close($fh);
+$tempdir = mkdtemp("${temp_dir}/rtd.XXXXXXXX");
+
 if (-d $test_set) {
     $file_prefix_skip = length($test_set) + 1;
     $ret = &process_test_dir($test_set);
@@ -433,6 +441,8 @@ run_test
     local(*test) = @_;
     local($name) = $test{':full-name'};
 
+    return undef if !&scrub_dir($tempdir);
+
     if (defined $test{'stdin'}) {
        return undef if !&write_file($tempi, $test{'stdin'});
        $ifile = $tempi;
@@ -444,8 +454,6 @@ run_test
        return undef if !&write_file($temps, $test{'script'});
     }
 
-    return undef if !&scrub_dir($tempdir);
-
     if (!chdir($tempdir)) {
        print STDERR "$prog: couldn't cd to $tempdir - $!\n";
        return undef;