From 875019debfbdfeff4c8f0705b7615e874ebf4576 Mon Sep 17 00:00:00 2001
From: Herwig Hochleitner <hhochleitner@gmail.com>
Date: Mon, 22 Oct 2012 22:39:35 +0200
Subject: [PATCH] CLJ-1089 clojure.java.io/do-copy methods determine
 end-of-stream by testing for -1, instead of (not (pos? ..))
 in accordance with specifications of interfaces
 java.io.InputStream and java.io.Reader

---
 src/clj/clojure/java/io.clj |   11 +++++++----
 1 files changed, 7 insertions(+), 4 deletions(-)

diff --git a/src/clj/clojure/java/io.clj b/src/clj/clojure/java/io.clj
index 20553df..08f0f69 100644
--- a/src/clj/clojure/java/io.clj
+++ b/src/clj/clojure/java/io.clj
@@ -293,11 +293,14 @@
   do-copy
   (fn [input output opts] [(type input) (type output)]))
 
+(defn ^:private eos? [^long read-size]
+  (== -1 read-size))
+
 (defmethod do-copy [InputStream OutputStream] [#^InputStream input #^OutputStream output opts]
   (let [buffer (make-array Byte/TYPE (buffer-size opts))]
     (loop []
       (let [size (.read input buffer)]
-        (when (pos? size)
+        (when-not (eos? size)
           (do (.write output buffer 0 size)
               (recur)))))))
 
@@ -306,7 +309,7 @@
         in (InputStreamReader. input (encoding opts))]
     (loop []
       (let [size (.read in buffer 0 (alength buffer))]
-        (if (pos? size)
+        (when-not (eos? size)
           (do (.write output buffer 0 size)
               (recur)))))))
 
@@ -319,7 +322,7 @@
         out (OutputStreamWriter. output (encoding opts))]
     (loop []
       (let [size (.read input buffer)]
-        (if (pos? size)
+        (if-not (eos? size)
           (do
             (.write out buffer 0 size)
             (recur))
@@ -329,7 +332,7 @@
   (let [#^"[C" buffer (make-array Character/TYPE (buffer-size opts))]
     (loop []
       (let [size (.read input buffer)]
-        (when (pos? size)
+        (when-not (eos? size)
           (do (.write output buffer 0 size)
               (recur)))))))
 
-- 
1.7.8.6

