commons-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From mt...@apache.org
Subject svn commit: r817291 - /commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/util/Utils.java
Date Mon, 21 Sep 2009 15:34:22 GMT
Author: mturk
Date: Mon Sep 21 15:34:20 2009
New Revision: 817291

URL: http://svn.apache.org/viewvc?rev=817291&view=rev
Log:
Use more powerfull temp dir creation. No need to use haks via temp file

Modified:
    commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/util/Utils.java

Modified: commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/util/Utils.java
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/util/Utils.java?rev=817291&r1=817290&r2=817291&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/util/Utils.java
(original)
+++ commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/util/Utils.java
Mon Sep 21 15:34:20 2009
@@ -20,6 +20,7 @@
 import java.io.File;
 import java.io.PrintStream;
 import java.util.Random;
+import org.apache.commons.runtime.SystemId;
 
 /**
  * General purpose utilities.
@@ -152,6 +153,65 @@
         out.println(dumpBuffer(data));
     }
 
+    private static final String [] try_envs = {
+        "TMP",
+        "TEMP",
+        "TMPDIR",
+        "TEMPDIR"
+    };
+    private static final String [] win_trys = {
+        "C:\\TMP",
+        "C:\\TEMP",
+        "C:\\WINDOWS\\TEMP"
+    };
+    private static final String [] psx_trys = {
+        "/tmp",
+        "/usr/tmp",
+        "/var/tmp"
+    };
+
+
+    private static File checkTempDir(String path)
+    {
+        if (path == null)
+            return null;
+        try {
+            File d = new File(path);
+            File f = File.createTempFile("test", ".acr", new File(path));
+            f.delete();
+            return d;
+        } catch (Exception ex) {
+            // Ignore
+        }
+        return null;
+    }
+
+    private static File findTempDir()
+    {
+        File dir;
+        String [] try_path;
+
+        dir = checkTempDir(System.getProperty("java.io.tmpdir"));
+        if (dir != null)
+            return dir;
+        for (int i = 0; i < try_envs.length; i++) {
+            dir = checkTempDir(System.getenv(try_envs[i]));
+            if (dir != null)
+                return dir;
+        }
+        if (SystemId.getSysname().equals("windows"))
+            try_path = win_trys;
+        else
+            try_path = psx_trys;
+
+        for (int i = 0; i < try_path.length; i++) {
+            dir = checkTempDir(System.getenv(try_path[i]));
+            if (dir != null)
+                return dir;
+        }
+        return null;
+    }
+
     /**
      * Create temporary directory.
      * <p>
@@ -166,19 +226,23 @@
     public static File createTempDirectory(String prefix)
         throws IllegalArgumentException, IOException
     {
-        int tries = 0;
+        int tries  = 0;
+        byte [] rb = new byte[12];
+        char [] ec = new char[48];
+        File td    = findTempDir();
+
+        if (td == null) {
+            throw new IOException("Cannot find writable temporary directory");
+        }
         while(true) {
-            File tmpf = File.createTempFile(prefix, ".acr");
             try {
-                if (tmpf.delete()) {
-                    /* Create the directory with the same name
-                     * as the temp file was.
+                generateRandom(rb);
+                Base64.encode(rb, 0, ec, 0, 0, 0);
+                File tmpd = new File(td, prefix + new String(ec, 0, 8));
+                if (tmpd.mkdir()) {
+                    /* Directory is ceated
                      */
-                    if (tmpf.mkdir()) {
-                        /* Directory is ceated
-                         */
-                        return tmpf;
-                    }
+                    return tmpd;
                 }
             } catch (Exception ex) {
                 // Ignore



Mime
View raw message