summaryrefslogtreecommitdiffstats
path: root/development/tclvfs/patches/06-zipfix.patch
blob: 8ca6e1c1ae9ce95dec6266c1e63236a880219bfc (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
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