]> gitweb.factorcode.org Git - factor.git/commitdiff
fix <process-stream> memory corruption error
authorchris.double <chris.double@double.co.nz>
Fri, 8 Sep 2006 02:26:43 +0000 (02:26 +0000)
committerchris.double <chris.double@double.co.nz>
Fri, 8 Sep 2006 02:26:43 +0000 (02:26 +0000)
contrib/process.factor

index fce213b3bfe00119fd70fb6aaab93337d07c20c2..1d63bbe82c459c0ddc0a51d4658f8565fe1fa991 100644 (file)
@@ -1,12 +1,21 @@
 IN: process
-USING: compiler io io-internals kernel parser ;
+USING: compiler io io-internals kernel parser generic ;
 
 FUNCTION: int system ( char* command ) ;
 
 FUNCTION: void* popen ( char* command, char* type ) ;
+FUNCTION: int pclose ( void* file ) ;
 
-: <process-stream> ( command mode -- stream )
-    popen dup <c-stream> ;
+TUPLE: process-stream pipe ;
+
+C: process-stream ( command mode -- stream )
+  >r popen dup r>
+  [ set-process-stream-pipe ] keep
+  >r dup <duplex-c-stream> r> 
+  [ set-delegate ] keep ;
+
+M: process-stream stream-close 
+  process-stream-pipe [ pclose drop ] when* ;
 
 : !" parse-string system drop ; parsing