Hex Artifact Content

Artifact 9b98f849532e121f3ee7c061a124a6303bf57111:


0000: 64 69 66 66 20 2d 75 4e 72 20 74 63 6c 76 66 73  diff -uNr tclvfs
0010: 2d 32 30 30 38 30 35 30 33 2e 6f 72 69 67 2f 6c  -20080503.orig/l
0020: 69 62 72 61 72 79 2f 7a 69 70 76 66 73 2e 74 63  ibrary/zipvfs.tc
0030: 6c 20 74 63 6c 76 66 73 2d 32 30 30 38 30 35 30  l tclvfs-2008050
0040: 33 2d 33 72 73 6b 2f 6c 69 62 72 61 72 79 2f 7a  3-3rsk/library/z
0050: 69 70 76 66 73 2e 74 63 6c 0a 2d 2d 2d 20 74 63  ipvfs.tcl.--- tc
0060: 6c 76 66 73 2d 32 30 30 38 30 35 30 33 2e 6f 72  lvfs-20080503.or
0070: 69 67 2f 6c 69 62 72 61 72 79 2f 7a 69 70 76 66  ig/library/zipvf
0080: 73 2e 74 63 6c 09 32 30 30 38 2d 30 34 2d 31 35  s.tcl.2008-04-15
0090: 20 31 36 3a 31 31 3a 35 33 2e 30 30 30 30 30 30   16:11:53.000000
00a0: 30 30 30 20 2d 30 35 30 30 0a 2b 2b 2b 20 74 63  000 -0500.+++ tc
00b0: 6c 76 66 73 2d 32 30 30 38 30 35 30 33 2d 33 72  lvfs-20080503-3r
00c0: 73 6b 2f 6c 69 62 72 61 72 79 2f 7a 69 70 76 66  sk/library/zipvf
00d0: 73 2e 74 63 6c 09 32 30 31 30 2d 30 39 2d 31 39  s.tcl.2010-09-19
00e0: 20 30 33 3a 33 37 3a 33 33 2e 30 30 30 30 30 30   03:37:33.000000
00f0: 30 30 30 20 2d 30 35 30 30 0a 40 40 20 2d 31 30  000 -0500.@@ -10
0100: 37 2c 36 20 2b 31 30 37 2c 31 30 20 40 40 0a 20  7,6 +107,10 @@. 
0110: 09 20 20 20 20 0a 20 09 20 20 20 20 3a 3a 7a 69  .    . .    ::zi
0120: 70 3a 3a 73 74 61 74 20 24 7a 69 70 66 64 20 24  p::stat $zipfd $
0130: 6e 61 6d 65 20 73 62 0a 20 0a 2b 20 20 20 20 20  name sb. .+     
0140: 20 20 20 20 20 20 20 69 66 20 7b 24 73 62 28 69         if {$sb(i
0150: 6e 6f 29 20 3d 3d 20 2d 31 7d 20 7b 0a 2b 20 20  no) == -1} {.+  
0160: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76 66                vf
0170: 73 3a 3a 66 69 6c 65 73 79 73 74 65 6d 20 70 6f  s::filesystem po
0180: 73 69 78 65 72 72 6f 72 20 24 3a 3a 76 66 73 3a  sixerror $::vfs:
0190: 3a 70 6f 73 69 78 28 45 49 53 44 49 52 29 0a 2b  :posix(EISDIR).+
01a0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 2b 0a              }.+.
01b0: 20 09 20 20 20 20 73 65 74 20 6e 66 64 20 5b 76   .    set nfd [v
01c0: 66 73 3a 3a 6d 65 6d 63 68 61 6e 5d 0a 20 09 20  fs::memchan]. . 
01d0: 20 20 20 66 63 6f 6e 66 69 67 75 72 65 20 24 6e     fconfigure $n
01e0: 66 64 20 2d 74 72 61 6e 73 6c 61 74 69 6f 6e 20  fd -translation 
01f0: 62 69 6e 61 72 79 0a 20 0a 40 40 20 2d 32 35 35  binary. .@@ -255
0200: 2c 32 31 20 2b 32 35 39 2c 32 31 20 40 40 0a 20  ,21 +259,21 @@. 
0210: 20 20 20 20 73 65 74 20 79 65 61 72 20 5b 65 78      set year [ex
0220: 70 72 20 7b 20 28 28 24 64 61 74 65 20 3e 3e 20  pr { (($date >> 
0230: 39 29 20 26 20 30 78 46 46 29 20 2b 20 31 39 38  9) & 0xFF) + 198
0240: 30 20 7d 5d 0a 20 0a 20 20 20 20 20 23 20 46 69  0 }]. .     # Fi
0250: 78 20 75 70 20 62 61 64 20 64 61 74 65 2f 74 69  x up bad date/ti
0260: 6d 65 20 64 61 74 61 2c 20 6e 6f 20 6e 65 65 64  me data, no need
0270: 20 74 6f 20 66 61 69 6c 0a 2d 20 20 20 20 77 68   to fail.-    wh
0280: 69 6c 65 20 7b 24 73 65 63 20 20 3e 20 35 39 7d  ile {$sec  > 59}
0290: 20 7b 69 6e 63 72 20 73 65 63 20 20 2d 36 30 7d   {incr sec  -60}
02a0: 0a 2d 20 20 20 20 77 68 69 6c 65 20 7b 24 6d 69  .-    while {$mi
02b0: 6e 20 20 3e 20 35 39 7d 20 7b 69 6e 63 72 20 73  n  > 59} {incr s
02c0: 65 63 20 20 2d 36 30 7d 0a 2d 20 20 20 20 77 68  ec  -60}.-    wh
02d0: 69 6c 65 20 7b 24 68 6f 75 72 20 3e 20 32 33 7d  ile {$hour > 23}
02e0: 20 7b 69 6e 63 72 20 68 6f 75 72 20 2d 32 34 7d   {incr hour -24}
02f0: 0a 2d 20 20 20 20 69 66 20 7b 24 6d 64 61 79 20  .-    if {$mday 
0300: 3c 20 31 7d 20 20 7b 69 6e 63 72 20 6d 64 61 79  < 1}  {incr mday
0310: 7d 0a 2d 20 20 20 20 69 66 20 7b 24 6d 6f 6e 20  }.-    if {$mon 
0320: 20 3c 20 31 7d 20 20 7b 69 6e 63 72 20 6d 6f 6e   < 1}  {incr mon
0330: 7d 0a 2d 20 20 20 20 77 68 69 6c 65 20 7b 24 6d  }.-    while {$m
0340: 6f 6e 20 3e 20 31 32 7d 20 7b 69 6e 63 72 20 68  on > 12} {incr h
0350: 6f 75 72 20 2d 31 32 7d 0a 2b 20 20 20 20 69 66  our -12}.+    if
0360: 20 7b 24 73 65 63 20 20 3e 20 35 39 7d 20 7b 73   {$sec  > 59} {s
0370: 65 74 20 73 65 63 20 20 35 39 7d 0a 2b 20 20 20  et sec  59}.+   
0380: 20 69 66 20 7b 24 6d 69 6e 20 20 3e 20 35 39 7d   if {$min  > 59}
0390: 20 7b 73 65 74 20 6d 69 6e 20 20 35 39 7d 0a 2b   {set min  59}.+
03a0: 20 20 20 20 69 66 20 7b 24 68 6f 75 72 20 3e 20      if {$hour > 
03b0: 32 33 7d 20 7b 73 65 74 20 68 6f 75 72 20 32 33  23} {set hour 23
03c0: 7d 0a 2b 20 20 20 20 69 66 20 7b 24 6d 64 61 79  }.+    if {$mday
03d0: 20 3c 20 31 7d 20 20 7b 73 65 74 20 6d 64 61 79   < 1}  {set mday
03e0: 20 31 7d 0a 2b 20 20 20 20 69 66 20 7b 24 6d 64   1}.+    if {$md
03f0: 61 79 20 3e 20 33 31 7d 20 7b 73 65 74 20 6d 64  ay > 31} {set md
0400: 61 79 20 33 31 7d 0a 2b 20 20 20 20 69 66 20 7b  ay 31}.+    if {
0410: 24 6d 6f 6e 20 20 3c 20 31 7d 20 20 7b 73 65 74  $mon  < 1}  {set
0420: 20 6d 6f 6e 20 20 31 7d 0a 2b 20 20 20 20 69 66   mon  1}.+    if
0430: 20 7b 24 6d 6f 6e 20 3e 20 31 32 7d 20 20 7b 73   {$mon > 12}  {s
0440: 65 74 20 6d 6f 6e 20 20 31 32 7d 0a 20 0a 2d 20  et mon  12}. .- 
0450: 20 20 20 77 68 69 6c 65 20 7b 5b 63 61 74 63 68     while {[catch
0460: 20 7b 0a 2b 20 20 20 20 73 65 74 20 72 65 73 20   {.+    set res 
0470: 30 0a 2b 20 20 20 20 63 61 74 63 68 20 7b 0a 20  0.+    catch {. 
0480: 09 73 65 74 20 64 74 20 5b 66 6f 72 6d 61 74 20  .set dt [format 
0490: 7b 25 34 2e 34 64 2d 25 32 2e 32 64 2d 25 32 2e  {%4.4d-%2.2d-%2.
04a0: 32 64 20 25 32 2e 32 64 3a 25 32 2e 32 64 3a 25  2d %2.2d:%2.2d:%
04b0: 32 2e 32 64 7d 20 5c 0a 20 09 09 20 20 20 20 24  2.2d} \. ..    $
04c0: 79 65 61 72 20 24 6d 6f 6e 20 24 6d 64 61 79 20  year $mon $mday 
04d0: 24 68 6f 75 72 20 24 6d 69 6e 20 24 73 65 63 5d  $hour $min $sec]
04e0: 0a 20 09 73 65 74 20 72 65 73 20 5b 63 6c 6f 63  . .set res [cloc
04f0: 6b 20 73 63 61 6e 20 24 64 74 20 2d 67 6d 74 20  k scan $dt -gmt 
0500: 31 5d 0a 2d 20 20 20 20 7d 5d 7d 20 7b 0a 2d 09  1].-    }]} {.-.
0510: 23 20 4f 6e 6c 79 20 6d 64 61 79 20 63 61 6e 20  # Only mday can 
0520: 62 65 20 77 72 6f 6e 67 2c 20 61 74 20 65 6e 64  be wrong, at end
0530: 20 6f 66 20 6d 6f 6e 74 68 0a 2d 09 69 6e 63 72   of month.-.incr
0540: 20 6d 64 61 79 20 2d 31 0a 20 20 20 20 20 7d 0a   mday -1.     }.
0550: 2b 0a 20 20 20 20 20 72 65 74 75 72 6e 20 24 72  +.     return $r
0560: 65 73 0a 20 7d 0a 20 0a 40 40 20 2d 34 30 30 2c  es. }. .@@ -400,
0570: 36 20 2b 34 30 34 2c 37 20 40 40 0a 20 7d 0a 20  6 +404,7 @@. }. 
0580: 0a 20 70 72 6f 63 20 7a 69 70 3a 3a 54 4f 43 20  . proc zip::TOC 
0590: 7b 66 64 20 61 72 72 7d 20 7b 0a 2b 20 20 20 20  {fd arr} {.+    
05a0: 75 70 76 61 72 20 23 30 20 7a 69 70 3a 3a 24 66  upvar #0 zip::$f
05b0: 64 20 63 62 0a 20 20 20 20 20 75 70 76 61 72 20  d cb.     upvar 
05c0: 31 20 24 61 72 72 20 73 62 0a 20 0a 20 20 20 20  1 $arr sb. .    
05d0: 20 73 65 74 20 62 75 66 20 5b 72 65 61 64 20 24   set buf [read $
05e0: 66 64 20 34 36 5d 0a 40 40 20 2d 34 31 30 2c 36  fd 46].@@ -410,6
05f0: 20 2b 34 31 35 2c 38 20 40 40 0a 20 20 20 20 20   +415,8 @@.     
0600: 20 20 66 6c 65 6e 20 65 6c 65 6e 20 63 6c 65 6e    flen elen clen
0610: 20 73 62 28 64 69 73 6b 29 20 73 62 28 61 74 74   sb(disk) sb(att
0620: 72 29 20 5c 0a 20 20 20 20 20 20 20 73 62 28 61  r) \.       sb(a
0630: 74 78 29 20 73 62 28 69 6e 6f 29 0a 20 0a 2b 20  tx) sb(ino). .+ 
0640: 20 20 20 73 65 74 20 73 62 28 69 6e 6f 29 20 5b     set sb(ino) [
0650: 65 78 70 72 20 7b 24 63 62 28 62 61 73 65 29 20  expr {$cb(base) 
0660: 2b 20 24 73 62 28 69 6e 6f 29 7d 5d 0a 2b 0a 20  + $sb(ino)}].+. 
0670: 20 20 20 20 69 66 20 7b 20 21 5b 73 74 72 69 6e      if { ![strin
0680: 67 20 65 71 75 61 6c 20 22 50 4b 5c 30 31 5c 30  g equal "PK\01\0
0690: 32 22 20 24 68 64 72 5d 20 7d 20 7b 0a 20 09 62  2" $hdr] } {. .b
06a0: 69 6e 61 72 79 20 73 63 61 6e 20 24 68 64 72 20  inary scan $hdr 
06b0: 48 2a 20 78 0a 20 09 65 72 72 6f 72 20 22 62 61  H* x. .error "ba
06c0: 64 20 63 65 6e 74 72 61 6c 20 68 65 61 64 65 72  d central header
06d0: 3a 20 24 78 22 0a 40 40 20 2d 34 34 32 2c 37 20  : $x".@@ -442,7 
06e0: 2b 34 34 39 2c 37 20 40 40 0a 20 09 0a 20 09 7a  +449,7 @@. .. .z
06f0: 69 70 3a 3a 45 6e 64 4f 66 41 72 63 68 69 76 65  ip::EndOfArchive
0700: 20 24 66 64 20 63 62 0a 20 0a 2d 09 73 65 65 6b   $fd cb. .-.seek
0710: 20 24 66 64 20 24 63 62 28 63 6f 66 66 29 20 73   $fd $cb(coff) s
0720: 74 61 72 74 0a 2b 09 73 65 65 6b 20 24 66 64 20  tart.+.seek $fd 
0730: 5b 65 78 70 72 20 7b 24 63 62 28 62 61 73 65 29  [expr {$cb(base)
0740: 20 2b 20 24 63 62 28 63 6f 66 66 29 7d 5d 20 73   + $cb(coff)}] s
0750: 74 61 72 74 0a 20 0a 20 09 73 65 74 20 74 6f 63  tart. . .set toc
0760: 28 5f 29 20 30 3b 20 75 6e 73 65 74 20 74 6f 63  (_) 0; unset toc
0770: 28 5f 29 3b 20 23 4d 61 6b 65 41 72 72 61 79 0a  (_); #MakeArray.
0780: 20 09 0a                                          ..