Patch by Victor Wagner (modified by Sergei Golovan for archives less than 512 bytes long) fixes zip vfs to work with prepended executable. --- tclvfs-1.3-20080503.orig/library/zipvfs.tcl +++ tclvfs-1.3-20080503/library/zipvfs.tcl @@ -113,7 +113,8 @@ set translation [fconfigure $nfd -translation] fconfigure $nfd -translation binary - seek $zipfd $sb(ino) start + upvar #0 zip::$zipfd cb + seek $zipfd [expr {$sb(ino)+$cb(base)}] start zip::Data $zipfd sb data puts -nonewline $nfd $data @@ -370,6 +371,7 @@ seek $fd $n end set hdr [read $fd $len] + set read [string length $hdr] set pos [string first "PK\05\06" $hdr] if {$pos == -1} { if {$at >= $sz} { @@ -384,7 +386,7 @@ } set hdr [string range $hdr [expr $pos + 4] [expr $pos + 21]] - set pos [expr [tell $fd] + $pos - 512] + set pos [expr [tell $fd] + $pos - $read] binary scan $hdr ssssiis \ cb(ndisk) cb(cdisk) \ @@ -445,7 +447,7 @@ zip::EndOfArchive $fd cb - seek $fd $cb(coff) start + seek $fd [expr {$cb(coff)+$cb(base)}] start set toc(_) 0; unset toc(_); #MakeArray