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
|