[vmkit-commits] [vmkit] r144707 - /vmkit/trunk/lib/J3/ClassLib/OpenJDK/OpenJDK.inc

Will Dietz wdietz2 at illinois.edu
Tue Nov 15 14:10:34 PST 2011


Author: wdietz2
Date: Tue Nov 15 16:10:34 2011
New Revision: 144707

URL: http://llvm.org/viewvc/llvm-project?rev=144707&view=rev
Log:
JVM_Open: correctly handle cases involving O_DELETE or EEXIST.

Modified:
    vmkit/trunk/lib/J3/ClassLib/OpenJDK/OpenJDK.inc

Modified: vmkit/trunk/lib/J3/ClassLib/OpenJDK/OpenJDK.inc
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/ClassLib/OpenJDK/OpenJDK.inc?rev=144707&r1=144706&r2=144707&view=diff
==============================================================================
--- vmkit/trunk/lib/J3/ClassLib/OpenJDK/OpenJDK.inc (original)
+++ vmkit/trunk/lib/J3/ClassLib/OpenJDK/OpenJDK.inc Tue Nov 15 16:10:34 2011
@@ -2269,10 +2269,27 @@
  */
 JNIEXPORT jint JNICALL
 JVM_Open(const char *fname, jint flags, jint mode) {
+  // Special flag the JVM uses
+  // means to delete the file after opening.
+  static const int O_DELETE = 0x10000;
+
   BEGIN_JNI_EXCEPTION
-  int result = open(fname, flags, mode);
 
-  result = (result == 0) ? -1 : result;
+  int result = open(fname, flags & ~O_DELETE, mode);
+
+  // Map EEXIST to special JVM_EEXIST, otherwise all errors are -1
+  if (result < 0) {
+    if (errno == EEXIST) {
+      RETURN_FROM_JNI(JVM_EEXIST);
+    } else {
+      RETURN_FROM_JNI(-1);
+    }
+  }
+
+  // Handle O_DELETE flag, if specified
+  if (flags & O_DELETE)
+    unlink(fname);
+
   RETURN_FROM_JNI(result);
   END_JNI_EXCEPTION
 





More information about the vmkit-commits mailing list