re PR libgcj/11575 ([win32] Problem with RandomAccessFile)
authorDanny Smith <dannysmith@users.sourceforge.net>
Tue, 19 Aug 2003 11:59:56 +0000 (11:59 +0000)
committerMohan Embar <membar@gcc.gnu.org>
Tue, 19 Aug 2003 11:59:56 +0000 (11:59 +0000)
PR libgcj/11575
* java/io/natFileDescriptorWin32.cc (open): Set create
flag to OPEN_AWAYS when READ & WRITE regardless of APPEND flag.
Honor EXCL when openning with WRITE flag.

From-SVN: r70565

libjava/ChangeLog
libjava/java/io/natFileDescriptorWin32.cc

index 95ccb648c9be47c372d9b6b02744fddfd6c4984c..7fc2069a6ff6fb8c2748cb2ef8b95fe454a16e76 100644 (file)
@@ -1,3 +1,10 @@
+2003-08-19  Danny Smith  <dannysmith@users.sourceforge.net>
+
+       PR libgcj/11575
+       * java/io/natFileDescriptorWin32.cc (open): Set create
+       flag to OPEN_AWAYS when READ & WRITE regardless of APPEND flag.
+       Honor EXCL when openning with WRITE flag. 
+
 2003-08-19  Mohan Embar  <gnustuff@thisiscool.com>
 
        * include/jvm.h: New class _Jv_TempUTFString (helper class for
index 210eb73cbbbcc92523cd21a3d099cfbbc949ef30..50669875ea1b4c0a60813fe1b873af515d01a7b9 100644 (file)
@@ -97,20 +97,25 @@ java::io::FileDescriptor::open (jstring path, jint jflags) {
   if ((jflags & READ) && (jflags & WRITE))
     {
       access = GENERIC_READ | GENERIC_WRITE;
-      if (jflags & APPEND)
-       create = OPEN_ALWAYS;
+      if (jflags & EXCL)
+       create = CREATE_NEW; // this will raise error if file exists.
       else
-       create = CREATE_ALWAYS;
+       create = OPEN_ALWAYS; // equivalent to O_CREAT
     }
-  else if(jflags & READ)
-    access = GENERIC_READ;
-  else
+  else if (jflags & READ)
     {
+      access = GENERIC_READ;
+      create = OPEN_EXISTING; // ignore EXCL
+    }
+  else
+    { 
       access = GENERIC_WRITE;
-      if (jflags & APPEND)
+      if (jflags & EXCL)
+       create = CREATE_NEW;
+      else if (jflags & APPEND)
        create = OPEN_ALWAYS;
       else
-        create = CREATE_ALWAYS;
+       create = CREATE_ALWAYS;
     }
 
   handle = CreateFile(buf, access, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, create, 0, NULL);