[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