OSDN Git Service

* java/io/natFileDescriptorPosix.cc (open): Allocate buffer to
authortromey <tromey@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 31 May 2001 17:33:05 +0000 (17:33 +0000)
committertromey <tromey@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 31 May 2001 17:33:05 +0000 (17:33 +0000)
correct size.
(write): Loop until write completes.  From Corey Minyard.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@42749 138bc75d-0d04-0410-961f-82ee72b054a4

libjava/ChangeLog
libjava/java/io/natFileDescriptorPosix.cc

index 4009be6..3339988 100644 (file)
@@ -1,3 +1,9 @@
+2001-05-31  Tom Tromey  <tromey@redhat.com>
+
+       * java/io/natFileDescriptorPosix.cc (open): Allocate buffer to
+       correct size.
+       (write): Loop until write completes.  From Corey Minyard.
+
 2001-05-29  Laurent Guerby  <guerby@acm.org>
 
        * java/awt/geom/Rectangle2D.java: fix doc typo.
index 8e4be85..cb7a164 100644 (file)
@@ -68,10 +68,8 @@ java::io::FileDescriptor::sync (void)
 jint
 java::io::FileDescriptor::open (jstring path, jint jflags)
 {
-  // FIXME: eww.
-  char buf[MAXPATHLEN];
+  char *buf = (char *) _Jv_AllocBytes (_Jv_GetStringUTFLength (path) + 1);
   jsize total = JvGetStringUTFRegion (path, 0, path->length(), buf);
-  // FIXME?
   buf[total] = '\0';
   int flags = 0;
 #ifdef O_BINARY
@@ -121,17 +119,20 @@ void
 java::io::FileDescriptor::write (jint b)
 {
   jbyte d = (jbyte) b;
-  int r = ::write (fd, &d, 1);
-  if (java::lang::Thread::interrupted())
+  int r = 0;
+  while (r != 1)
     {
-      InterruptedIOException *iioe
-       = new InterruptedIOException (JvNewStringLatin1 ("write interrupted"));
-      iioe->bytesTransferred = r == -1 ? 0 : r;
-      throw iioe;
+      r = ::write (fd, &d, 1);
+      if (java::lang::Thread::interrupted())
+       {
+         InterruptedIOException *iioe
+           = new InterruptedIOException (JvNewStringLatin1 ("write interrupted"));
+         iioe->bytesTransferred = r == -1 ? 0 : r;
+         throw iioe;
+       }
+      else if (r == -1)
+       throw new IOException (JvNewStringLatin1 (strerror (errno)));
     }
-  else if (r == -1)
-    throw new IOException (JvNewStringLatin1 (strerror (errno)));
-  // FIXME: loop if r != 1.
 }
 
 void
@@ -142,17 +143,26 @@ java::io::FileDescriptor::write (jbyteArray b, jint offset, jint len)
   if (offset < 0 || len < 0 || offset + len > JvGetArrayLength (b))
     throw new java::lang::ArrayIndexOutOfBoundsException;
   jbyte *bytes = elements (b) + offset;
-  int r = ::write (fd, bytes, len);
-  if (java::lang::Thread::interrupted())
+
+  int written = 0;
+  while (len > 0)
     {
-      InterruptedIOException *iioe
-       = new InterruptedIOException (JvNewStringLatin1 ("write interrupted"));
-      iioe->bytesTransferred = r == -1 ? 0 : r;
-      throw iioe;
+      int r = ::write (fd, bytes, len);
+      if (r != -1)
+       written += r;
+      if (java::lang::Thread::interrupted())
+       {
+         InterruptedIOException *iioe
+           = new InterruptedIOException (JvNewStringLatin1 ("write interrupted"));
+         iioe->bytesTransferred = written;
+         throw iioe;
+       }
+      else if (r == -1)
+       throw new IOException (JvNewStringLatin1 (strerror (errno)));
+
+      len -= r;
+      bytes += r;
     }
-  else if (r == -1)
-    throw new IOException (JvNewStringLatin1 (strerror (errno)));
-  // FIXME: loop if r != len.
 }
 
 void