]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
File.java (deleteOnExit): New method.
authorAnthony Green <green@gcc.gnu.org>
Mon, 4 Sep 2000 16:55:48 +0000 (16:55 +0000)
committerAnthony Green <green@gcc.gnu.org>
Mon, 4 Sep 2000 16:55:48 +0000 (16:55 +0000)
        * java/io/File.java (deleteOnExit): New method.
        * gnu/gcj/runtime/FileDeleter.java: New class.
        * java/lang/natRuntime.cc (exit): Call
        FileDeleter.deleteOnExitNow()
        * Makefile.am: Add FileDeleter.java.
        * Makefile.in: Rebuilt.

From-SVN: r36141

libjava/Makefile.am
libjava/Makefile.in
libjava/gnu/gcj/runtime/FileDeleter.java [new file with mode: 0644]
libjava/java/io/File.java
libjava/java/lang/natRuntime.cc

index b29636842e9987fb172b8d604b96c4072c0b7cdd..db05b63aea227f8810bae9e2403b6e148ed127b3 100644 (file)
@@ -733,6 +733,7 @@ gnu/gcj/protocol/http/Connection.java \
 gnu/gcj/protocol/http/Handler.java \
 gnu/gcj/protocol/jar/Connection.java \
 gnu/gcj/protocol/jar/Handler.java \
+gnu/gcj/runtime/FileDeleter.java \
 gnu/gcj/runtime/FirstThread.java \
 gnu/gcj/runtime/VMClassLoader.java \
 gnu/gcj/text/BaseBreakIterator.java \
index 5da8d91c5e7d8f50a58b1902dae9bbcdbe2b883c..84385b83a8a8c8d53981d3020c7a0d5e4a5dbc89 100644 (file)
@@ -521,6 +521,7 @@ gnu/gcj/protocol/http/Connection.java \
 gnu/gcj/protocol/http/Handler.java \
 gnu/gcj/protocol/jar/Connection.java \
 gnu/gcj/protocol/jar/Handler.java \
+gnu/gcj/runtime/FileDeleter.java \
 gnu/gcj/runtime/FirstThread.java \
 gnu/gcj/runtime/VMClassLoader.java \
 gnu/gcj/text/BaseBreakIterator.java \
@@ -1084,7 +1085,7 @@ DEP_FILES =  .deps/$(srcdir)/$(CONVERT_DIR)/gen-from-JIS.P \
 .deps/gnu/gcj/protocol/http/Handler.P \
 .deps/gnu/gcj/protocol/jar/Connection.P \
 .deps/gnu/gcj/protocol/jar/Handler.P \
-.deps/gnu/gcj/runtime/FirstThread.P \
+.deps/gnu/gcj/runtime/FileDeleter.P .deps/gnu/gcj/runtime/FirstThread.P \
 .deps/gnu/gcj/runtime/VMClassLoader.P \
 .deps/gnu/gcj/text/BaseBreakIterator.P \
 .deps/gnu/gcj/text/CharacterBreakIterator.P \
diff --git a/libjava/gnu/gcj/runtime/FileDeleter.java b/libjava/gnu/gcj/runtime/FileDeleter.java
new file mode 100644 (file)
index 0000000..cc7aa9d
--- /dev/null
@@ -0,0 +1,38 @@
+/* Copyright (C) 2000  Free Software Foundation
+
+   This file is part of libgcj.
+
+This software is copyrighted work licensed under the terms of the
+Libgcj License.  Please consult the file "LIBGCJ_LICENSE" for
+details.  */
+
+package gnu.gcj.runtime;
+
+import java.io.*;
+import java.util.*;
+
+public final class FileDeleter
+{
+  public synchronized static void add (File f)
+  {
+    if (deleteOnExitStack == null)
+      deleteOnExitStack = new Stack ();
+
+    deleteOnExitStack.push (f);
+  }
+
+  // Helper method called by java.lang.Runtime.exit() to perform
+  // pending deletions.
+  public static void deleteOnExitNow ()
+  {
+    while (!deleteOnExitStack.empty ())
+      ((File)(deleteOnExitStack.pop ())).delete ();
+  }
+
+  // A stack of files to delete upon normal termination.
+  private static Stack deleteOnExitStack;
+}
+
+
+
+
index b9ff9ff23f21329d550684016208a4eea8b883ac..9043660be382bcb359185c39818a4eb2a4343cfc 100644 (file)
@@ -10,6 +10,9 @@ details.  */
 
 package java.io;
 
+import java.util.*;
+import gnu.gcj.runtime.FileDeleter;
+
 /**
  * @author Tom Tromey <tromey@cygnus.com>
  * @date September 24, 1998 
@@ -42,7 +45,7 @@ public class File implements Serializable
     return access (p, WRITE);
   }
 
-  private final native boolean performDelete (String canon);
+  private final native static boolean performDelete (String canon);
   public boolean delete ()
   {
     SecurityManager s = System.getSecurityManager();
@@ -347,6 +350,17 @@ public class File implements Serializable
     return p;
   }
 
+  // Add this File to the set of files to be deleted upon normal
+  // termination.
+  public void deleteOnExit ()
+  {
+    SecurityManager sm = System.getSecurityManager ();
+    if (sm != null)
+      sm.checkDelete (getName ());
+
+    FileDeleter.add (this);
+  }
+
   // QUERY arguments to access function.
   private final static int READ = 0;
   private final static int WRITE = 1;
index ad45066c2619c3087e9f7e307689ac3b40678e25..93771651afeda2a7dcba24cd6ab94e81b4a20726 100644 (file)
@@ -17,6 +17,7 @@ details.  */
 #include <java/lang/Runtime.h>
 #include <java/lang/UnknownError.h>
 #include <java/lang/UnsatisfiedLinkError.h>
+#include <gnu/gcj/runtime/FileDeleter.h>
 
 #include <jni.h>
 
@@ -85,6 +86,9 @@ java::lang::Runtime::exit (jint status)
   if (finalize_on_exit)
     _Jv_RunAllFinalizers ();
 
+  // Delete all files registered with File.deleteOnExit()
+  gnu::gcj::runtime::FileDeleter::deleteOnExitNow ();
+
   ::exit (status);
 }