aboutsummaryrefslogtreecommitdiff
path: root/libjava/java/io/File.java
diff options
context:
space:
mode:
authorAnthony Green <green@redhat.com>2000-09-04 20:57:18 +0000
committerAnthony Green <green@gcc.gnu.org>2000-09-04 20:57:18 +0000
commita1fa0b27e7d6ce96e3c903527787ddbeeeaebaf6 (patch)
tree3bd8341880b59044142121b372b25da9d563a293 /libjava/java/io/File.java
parent40255aaf54176fdcecc8199876b94cfe38f7cc44 (diff)
downloadgcc-a1fa0b27e7d6ce96e3c903527787ddbeeeaebaf6.zip
gcc-a1fa0b27e7d6ce96e3c903527787ddbeeeaebaf6.tar.gz
gcc-a1fa0b27e7d6ce96e3c903527787ddbeeeaebaf6.tar.bz2
re GNATS java.io/203 (File.createTempFile doesn't close descriptor)
Fix for PR java.io/203: * java/io/File.java (createTempFile): Obey directory argument. Use java.io.tmpdir if needed. Don't leave FileDescripators open. * java/lang/natSystem.cc (init_properties): Use TMPDIR environment variable to set java.io.tmpdir on non-WIN32 systems. From-SVN: r36143
Diffstat (limited to 'libjava/java/io/File.java')
-rw-r--r--libjava/java/io/File.java55
1 files changed, 41 insertions, 14 deletions
diff --git a/libjava/java/io/File.java b/libjava/java/io/File.java
index 9043660..01d8d53 100644
--- a/libjava/java/io/File.java
+++ b/libjava/java/io/File.java
@@ -233,14 +233,26 @@ public class File implements Serializable
File directory)
throws IOException
{
- FileDescriptor desc = new FileDescriptor ();
-
- SecurityManager s = System.getSecurityManager();
- if (s != null)
- s.checkWrite (desc);
+ // Grab the system temp directory if necessary
+ if (directory == null)
+ {
+ String dirname = tmpdir;
+ if (dirname == null)
+ throw
+ new IOException("Cannot determine system temporary directory");
+
+ directory = new File(dirname);
+ if (!directory.exists())
+ throw new IOException("System temporary directory "
+ + directory.getName() + " does not exist.");
+ if (!directory.isDirectory())
+ throw new IOException("System temporary directory "
+ + directory.getName()
+ + " is not really a directory.");
+ }
if (prefix.length () < 3)
- throw new IllegalArgumentException ();
+ throw new IllegalArgumentException ("Prefix too short: " + prefix);
if (suffix == null)
suffix = ".tmp";
@@ -259,8 +271,8 @@ public class File implements Serializable
prefix = prefix.substring(0, max_length - 6 - suf_len);
}
- // We don't care about the name because we set it later.
- File ret = new File ("");
+ File f;
+
// How many times should we try? We choose 100.
for (int i = 0; i < 100; ++i)
{
@@ -269,18 +281,33 @@ public class File implements Serializable
String l = prefix + t.substring(t.length() - 6) + suffix;
try
{
- desc = new FileDescriptor
- (l, FileDescriptor.WRITE | FileDescriptor.EXCL);
- desc.close ();
- ret.setPath(l);
- return ret;
+ f = new File(directory, l);
+ if (f.exists())
+ continue;
+ else
+ {
+ String af = f.getAbsolutePath ();
+
+ // Check to see if we're allowed to write to it.
+ SecurityManager s = System.getSecurityManager();
+ if (s != null)
+ s.checkWrite (af);
+
+ // Now create the file.
+ FileDescriptor fd =
+ new FileDescriptor (af,
+ FileDescriptor.WRITE
+ | FileDescriptor.EXCL);
+ fd.close ();
+ return f;
+ }
}
catch (IOException _)
{
}
}
- throw new IOException ("couldn't make temp file");
+ throw new IOException ("cannot create temporary file");
}
public static File createTempFile (String prefix, String suffix)