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
This commit is contained in:
parent
40255aaf54
commit
a1fa0b27e7
3 changed files with 53 additions and 16 deletions
|
@ -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)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue