summaryrefslogtreecommitdiffstats
path: root/development/tclvfs/patches/06-zipfix.patch
diff options
context:
space:
mode:
Diffstat (limited to 'development/tclvfs/patches/06-zipfix.patch')
-rw-r--r--development/tclvfs/patches/06-zipfix.patch41
1 files changed, 41 insertions, 0 deletions
diff --git a/development/tclvfs/patches/06-zipfix.patch b/development/tclvfs/patches/06-zipfix.patch
new file mode 100644
index 0000000000..8ca6e1c1ae
--- /dev/null
+++ b/development/tclvfs/patches/06-zipfix.patch
@@ -0,0 +1,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
+