]> gitweb.factorcode.org Git - factor.git/commitdiff
io.streams.peek: Peek streams can break on file input. Fixes #1317.
authorDoug Coleman <doug.coleman@gmail.com>
Wed, 13 May 2015 04:50:01 +0000 (21:50 -0700)
committerDoug Coleman <doug.coleman@gmail.com>
Wed, 13 May 2015 04:50:01 +0000 (21:50 -0700)
extra/io/streams/peek/peek-tests.factor
extra/io/streams/peek/peek.factor

index f35714d75a9cb79253e0ac9395f7bee562a0d067..d860086f271add1d046e086d2ce77f83ee468e47 100644 (file)
@@ -129,3 +129,22 @@ IN: io.streams.peek.tests
         ] { } make
     ] with-destructors
 ] unit-test
+
+! Issue #1317
+{ "Red" } [
+    "resource:license.txt" binary [
+        input-stream [ <peek-stream> ] change
+        peek1 drop
+        3 read >string
+    ] with-file-reader
+] unit-test
+
+{ "ist" } [
+    "resource:license.txt" binary [
+        input-stream [ <peek-stream> ] change
+        peek1 drop
+        3 read drop
+        2 peek drop
+        3 read >string
+    ] with-file-reader
+] unit-test
index 06897f33336d650e428e47ca766800ac6d29dd7e..bb24c7f472ab28f861227cea3221154c5619ea0a 100644 (file)
@@ -1,7 +1,7 @@
 ! Copyright (C) 2011 Doug Coleman.
 ! See http://factorcode.org/license.txt for BSD license.
-USING: accessors combinators combinators.short-circuit
-destructors io io.private kernel locals math namespaces
+USING: accessors alien combinators combinators.short-circuit
+destructors io io.ports io.private kernel locals math namespaces
 sequences vectors ;
 IN: io.streams.peek
 
@@ -49,7 +49,11 @@ M:: peek-stream stream-read-unsafe ( n buf stream -- count )
             peeked <reversed> 0 buf copy
             0 peeked shorten
             n #peeked - :> n'
-            buf #peeked tail-slice :> buf'
+            stream stream>> input-port? [
+                #peeked buf <displaced-alien>
+            ] [
+                buf #peeked tail-slice
+            ] if :> buf'
             n' buf' stream stream-read-unsafe #peeked +
         ] if
     ] if ;