@@ -1,9 +1,9 @@ -Binary files tclvfs-20080503.orig/library/.vfslib.tcl.swp and tclvfs-20080503-1rsk/library/.vfslib.tcl.swp differ -diff -uNr tclvfs-20080503.orig/library/vfslib.tcl tclvfs-20080503-1rsk/library/vfslib.tcl +Binary files tclvfs-20080503.orig/library/.vfslib.tcl.swp and tclvfs-20080503-2rsk/library/.vfslib.tcl.swp differ +diff -uNr tclvfs-20080503.orig/library/vfslib.tcl tclvfs-20080503-2rsk/library/vfslib.tcl --- tclvfs-20080503.orig/library/vfslib.tcl 2006-09-14 16:39:57.000000000 -0500 -+++ tclvfs-20080503-1rsk/library/vfslib.tcl 2010-09-17 11:13:15.000000000 -0500 ++++ tclvfs-20080503-2rsk/library/vfslib.tcl 2010-09-17 16:03:49.000000000 -0500 @@ -5,6 +5,14 @@ namespace eval ::vfs { variable zseq 0 ;# used to generate temp zstream cmd names + variable zlibPkg 0 ;# Use Tcl 8.6+ zlib command, or zlib package @@ -15,79 +15,51 @@ + package present zlib + set ::vfs::zlibPkg 1 } # for backwards compatibility -@@ -140,10 +148,70 @@ - } - } - -+ proc vfs::zstream_handler_native {zcmd ifd clen ilen imode cmd fd {a1 ""} {a2 ""}} { -+ upvar ::vfs::_zstream_pos($fd) pos -+ -+ switch -- $cmd { -+ seek { -+ switch $a2 { -+ 1 - current { incr a1 $pos } -+ 2 - end { incr a1 $ilen } -+ } -+ # to seek back, rewind, i.e. start from scratch -+ if {$a1 < $pos} { -+ rename $zcmd "" -+ zlib $imode $zcmd -+ seek $ifd 0 -+ set pos 0 -+ } -+ # consume data while not yet at seek position -+ while {$pos < $a1} { -+ set n [expr {$a1 - $pos}] -+ if {$n > 4096} { set n 4096 } -+ # 2003-02-09: read did not work (?), spell it out instead -+ #read $fd $n -+ zstream_handler $zcmd $ifd $clen $ilen $imode read $fd $n -+ } -+ return $pos -+ } -+ read { -+ set r "" -+ set n $a1 -+ #puts stderr " want $n z $zcmd pos $pos ilen $ilen" -+ if {$n + $pos > $ilen} { set n [expr {$ilen - $pos}] } -+ while {$n > 0} { -+ set c [expr {$clen - [tell $ifd]}] -+ if {$c > 4096} { set c 4096 } -+ set data [read $ifd $c] -+ #puts "filled $c [string length $data]" -+ $zcmd put $data -+ set data [$zcmd get $n] -+ #puts stderr " read [string length $data]" -+ if {$data eq ""} break -+ append r $data -+ incr pos [string length $data] -+ incr n -[string length $data] -+ } -+ return $r -+ } -+ close { -+ rename $zcmd "" -+ close $ifd -+ unset pos -+ } -+ default { error "bad cmd in zstream_handler: $cmd" } -+ } -+ } -+ +@@ -110,19 +118,26 @@ + return $pos + } + read { ++ if {$::vfs::zlibPkg} { ++ set zputcmd fill ++ set zgetcmd drain ++ } else { ++ set zputcmd put ++ set zgetcmd get ++ } + set r "" + set n $a1 + #puts stderr " want $n z $zcmd pos $pos ilen $ilen" + if {$n + $pos > $ilen} { set n [expr {$ilen - $pos}] } + while {$n > 0} { +- if {[$zcmd fill] == 0} { ++ if {![eof $ifd]} { + set c [expr {$clen - [tell $ifd]}] + if {$c > 4096} { set c 4096 } + set data [read $ifd $c] + #puts "filled $c [string length $data]" +- $zcmd fill $data +- } +- set data [$zcmd drain $n] ++ $zcmd $zputcmd $data ++ } ++ set data [$zcmd $zgetcmd $n] + #puts stderr " read [string length $data]" + if {$data eq ""} break + append r $data +@@ -141,8 +156,12 @@ + } + proc vfs::zstream {mode ifd clen ilen} { - set cname _zstream_[incr ::vfs::zseq] - zlib s$mode $cname -- set cmd [list ::vfs::zstream_handler $cname $ifd $clen $ilen s$mode] + if {$::vfs::zlibPkg} { + set cname _zstream_[incr ::vfs::zseq] + zlib s$mode $cname -+ set cmd [list ::vfs::zstream_handler $cname $ifd $clen $ilen s$mode] + } else { + set cname [zlib stream $mode] -+ set cmd [list ::vfs::zstream_handler_native $cname $ifd $clen $ilen s$mode] + } + set cmd [list ::vfs::zstream_handler $cname $ifd $clen $ilen s$mode] set fd [rechan $cmd 2] set ::vfs::_zstream_pos($fd) 0 - return $fd