java.io.PipedReader

YAMAGUCHI Yuji kaffe@rufus.w3.org
Tue, 29 Jun 1999 03:37:56 +0900


--VHVlLCAyOSBKdW4gMTk5OSAwMzozNzo1NiArMDkwMA==
Content-Transfer-Encoding: 7bit
Content-Type: text/plain

Hi, all.

Here is a patch for PipedReader.
Attached is the test program.

Index: PipedReader.java
===================================================================
RCS file: /home/cvspublic/kaffe/libraries/javalib/java/io/PipedReader.java,v
retrieving revision 1.1
diff -c -r1.1 PipedReader.java
*** PipedReader.java	1998/07/14 17:02:05	1.1
--- PipedReader.java	1999/06/28 19:07:57
***************
*** 45,68 ****
  
      synchronized(lock) {
  
!       while (size == 0) {
!         if (wr == null) {
!           return (-1);
          }
! 	try {
!           lock.wait();
! 	}
! 	catch (InterruptedException _) {
! 	}
        }
  
-       for (i = 0; i < len && size > 0; i++) {
- 	cbuf[off++] = buf[outpos++];
- 	size--;
- 	if (outpos == buf.length) {
- 	  outpos = 0;
- 	}
-       }
      }
      return (i);
    }
--- 45,71 ----
  
      synchronized(lock) {
  
!       for (i = 0; i < len;) {
!         while (size == 0) {
!           if (wr == null) {
! 	    return i > 0 ? i : -1;
!           }
! 	  try {
!             lock.wait();
! 	  }
! 	  catch (InterruptedException _) {
! 	  }
          }
!         for (; i < len && size > 0; i++) {
! 	  cbuf[off++] = buf[outpos++];
! 	  size--;
! 	  if (outpos == buf.length) {
! 	    outpos = 0;
! 	  }
!         }
! 	lock.notifyAll();
        }
  
      }
      return (i);
    }
***************
*** 71,77 ****
    {
      synchronized(lock) {
  
!       for (int i = 0; i < len; i++) {
          for (;;) {
            if (size < buf.length) {
              break;
--- 74,80 ----
    {
      synchronized(lock) {
  
!       for (int i = 0; i < len;) {
          for (;;) {
            if (size < buf.length) {
              break;
***************
*** 81,92 ****
            }
            catch (InterruptedException _) {
            }
-         }
-         buf[inpos++] = cbuf[off++];
-         size++;
-         if (inpos == buf.length) {
-           inpos = 0;
          }
        }
  
      }
--- 84,98 ----
            }
            catch (InterruptedException _) {
            }
          }
+         for (; i < len && size < buf.length; i++) {
+           buf[inpos++] = cbuf[off++];
+           size++;
+           if (inpos == buf.length) {
+             inpos = 0;
+           }
+ 	}
+ 	lock.notifyAll();
        }
  
      }
***************
*** 99,104 ****
--- 105,111 ----
  	wr.rd = null;
          wr = null;
        }
+       lock.notifyAll();
      }
    }
  

--
// YAMAGUCHI Yuji - yamag@distribution.co.jp -
// Freeware Distribution Services Co.,Ltd.


--VHVlLCAyOSBKdW4gMTk5OSAwMzozNzo1NiArMDkwMA==
Content-Type: application/octet-stream; name="PipeTest.java"
Content-Disposition: attachment;
 filename="PipeTest.java"
Content-Transfer-Encoding: base64

aW1wb3J0IGphdmEuaW8uKjsNCg0KcHVibGljIGNsYXNzIFBpcGVUZXN0IGV4dGVuZHMgVGhyZWFk
DQp7DQogICAgcHJpdmF0ZSBJbnB1dFN0cmVhbVJlYWRlciByZWFkZXI7DQogICAgcHJpdmF0ZSBQ
aXBlZFdyaXRlciB3cml0ZXI7DQoNCiAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdb
XSBhcmdzKSB0aHJvd3MgRXhjZXB0aW9uDQogICAgew0KCVBpcGVkV3JpdGVyIHdyaXRlciA9IG5l
dyBQaXBlZFdyaXRlcigpOw0KCVBpcGVkUmVhZGVyIHJlYWRlciA9IG5ldyBQaXBlZFJlYWRlcih3
cml0ZXIpOw0KCUZpbGVSZWFkZXIgZmlsZVJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKGFyZ3NbMF0p
Ow0KCW5ldyBQaXBlVGVzdChmaWxlUmVhZGVyLCB3cml0ZXIpLnN0YXJ0KCk7DQoNCglCdWZmZXJl
ZFJlYWRlciBidWZmZXJlZFJlYWRlciA9IG5ldyBCdWZmZXJlZFJlYWRlcihyZWFkZXIpOw0KCVN0
cmluZyBsaW5lOw0KCXdoaWxlICgobGluZSA9IGJ1ZmZlcmVkUmVhZGVyLnJlYWRMaW5lKCkpICE9
IG51bGwpIHsNCgkgICAgU3lzdGVtLm91dC5wcmludGxuKGxpbmUpOw0KCX0NCiAgICB9DQoNCiAg
ICBwdWJsaWMgUGlwZVRlc3QoSW5wdXRTdHJlYW1SZWFkZXIgcmVhZGVyLCBQaXBlZFdyaXRlciB3
cml0ZXIpDQogICAgew0KCXRoaXMud3JpdGVyID0gd3JpdGVyOw0KCXRoaXMucmVhZGVyID0gcmVh
ZGVyOw0KICAgIH0NCg0KICAgIHB1YmxpYyB2b2lkIHJ1bigpDQogICAgew0KCXRyeSB7DQoJICAg
IEJ1ZmZlcmVkUmVhZGVyIGJ1ZmZlcmVkUmVhZGVyID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKHJlYWRl
cik7DQoJICAgIFByaW50V3JpdGVyIHByaW50V3JpdGVyID0gbmV3IFByaW50V3JpdGVyKHdyaXRl
cik7DQoJICAgIFN0cmluZyBsaW5lOw0KCSAgICB3aGlsZSAoKGxpbmUgPSBidWZmZXJlZFJlYWRl
ci5yZWFkTGluZSgpKSAhPSBudWxsKSB7DQoJCS8vcHJpbnRXcml0ZXIucHJpbnRsbihsaW5lKTsN
CgkJcHJpbnRXcml0ZXIucHJpbnRsbihsaW5lLnRvVXBwZXJDYXNlKCkpOw0KCSAgICB9DQoJICAg
IGJ1ZmZlcmVkUmVhZGVyLmNsb3NlKCk7DQoJICAgIHdyaXRlci5jbG9zZSgpOw0KCX0gY2F0Y2gg
KElPRXhjZXB0aW9uIGUpIHsNCgkgICAgZS5wcmludFN0YWNrVHJhY2UoKTsNCgl9DQogICAgfQ0K
fQ0K

--VHVlLCAyOSBKdW4gMTk5OSAwMzozNzo1NiArMDkwMA==--