Overview
Comment: | Reduced change in Native ZLIB support patch |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: | f043a10e6071150d16125660e98a38bae80bf8c3 |
User & Date: | rkeene on 2010-09-26 04:48:00 |
Other Links: | manifest | tags |
Context
2010-09-26
| ||
04:48 | Added scripts to do nightly tests on Subversion and publish results check-in: 3df6039232 user: rkeene tags: trunk | |
04:48 | Reduced change in Native ZLIB support patch check-in: f043a10e60 user: rkeene tags: trunk | |
04:47 | Updated to mark kits which have been cross-compiled in yellow check-in: 2fb02e4e85 user: rkeene tags: trunk | |
Changes
Modified tclvfs/patches/8.6/tclvfs-20080503-supportnativezlib.diff from [60b79c951c] to [991c9c6c1f].
1
2
3
4
5
6
7
8
9
10
11
..
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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
|
Binary files tclvfs-20080503.orig/library/.vfslib.tcl.swp and tclvfs-20080503-1rsk/library/.vfslib.tcl.swp differ diff -uNr tclvfs-20080503.orig/library/vfslib.tcl tclvfs-20080503-1rsk/library/vfslib.tcl --- tclvfs-20080503.orig/library/vfslib.tcl 2006-09-14 16:39:57.000000000 -0500 +++ tclvfs-20080503-1rsk/library/vfslib.tcl 2010-09-17 11:13:15.000000000 -0500 @@ -5,6 +5,14 @@ namespace eval ::vfs { variable zseq 0 ;# used to generate temp zstream cmd names + variable zlibPkg 0 ;# Use Tcl 8.6+ zlib command, or zlib package +} + ................................................................................ +# Work with the Tcl 8.6+ built-in zlib command or the zlib package, if available +catch { + package present zlib + set ::vfs::zlibPkg 1 } # for backwards compatibility @@ -140,10 +148,70 @@ } } + proc vfs::zstream_handler_native {zcmd ifd clen ilen imode cmd fd {a1 ""} {a2 ""}} { + upvar ::vfs::_zstream_pos($fd) pos + + switch -- $cmd { + seek { + switch $a2 { + 1 - current { incr a1 $pos } + 2 - end { incr a1 $ilen } + } + # to seek back, rewind, i.e. start from scratch + if {$a1 < $pos} { + rename $zcmd "" + zlib $imode $zcmd + seek $ifd 0 + set pos 0 + } + # consume data while not yet at seek position + while {$pos < $a1} { + set n [expr {$a1 - $pos}] + if {$n > 4096} { set n 4096 } + # 2003-02-09: read did not work (?), spell it out instead + #read $fd $n + zstream_handler $zcmd $ifd $clen $ilen $imode read $fd $n + } + return $pos + } + read { + set r "" + set n $a1 + #puts stderr " want $n z $zcmd pos $pos ilen $ilen" + if {$n + $pos > $ilen} { set n [expr {$ilen - $pos}] } + while {$n > 0} { + set c [expr {$clen - [tell $ifd]}] + if {$c > 4096} { set c 4096 } + set data [read $ifd $c] + #puts "filled $c [string length $data]" + $zcmd put $data + set data [$zcmd get $n] + #puts stderr " read [string length $data]" + if {$data eq ""} break + append r $data + incr pos [string length $data] + incr n -[string length $data] + } + return $r + } + close { + rename $zcmd "" + close $ifd + unset pos + } + default { error "bad cmd in zstream_handler: $cmd" } + } + } + proc vfs::zstream {mode ifd clen ilen} { - set cname _zstream_[incr ::vfs::zseq] - zlib s$mode $cname - set cmd [list ::vfs::zstream_handler $cname $ifd $clen $ilen s$mode] + if {$::vfs::zlibPkg} { + set cname _zstream_[incr ::vfs::zseq] + zlib s$mode $cname + set cmd [list ::vfs::zstream_handler $cname $ifd $clen $ilen s$mode] + } else { + set cname [zlib stream $mode] + set cmd [list ::vfs::zstream_handler_native $cname $ifd $clen $ilen s$mode] + } set fd [rechan $cmd 2] set ::vfs::_zstream_pos($fd) 0 return $fd |
|
|
|
|
>
|
<
<
<
<
<
<
<
<
<
<
<
<
>
|
<
<
|
|
|
<
<
|
<
<
|
<
<
<
<
|
|
|
|
|
>
>
|
|
|
|
>
>
>
>
|
|
|
|
|
<
<
<
<
<
<
<
<
<
<
<
<
<
>
>
|
<
<
<
>
<
|
1
2
3
4
5
6
7
8
9
10
11
..
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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
|
Binary files tclvfs-20080503.orig/library/.vfslib.tcl.swp and tclvfs-20080503-2rsk/library/.vfslib.tcl.swp differ diff -uNr tclvfs-20080503.orig/library/vfslib.tcl tclvfs-20080503-2rsk/library/vfslib.tcl --- tclvfs-20080503.orig/library/vfslib.tcl 2006-09-14 16:39:57.000000000 -0500 +++ tclvfs-20080503-2rsk/library/vfslib.tcl 2010-09-17 16:03:49.000000000 -0500 @@ -5,6 +5,14 @@ namespace eval ::vfs { variable zseq 0 ;# used to generate temp zstream cmd names + variable zlibPkg 0 ;# Use Tcl 8.6+ zlib command, or zlib package +} + ................................................................................ +# Work with the Tcl 8.6+ built-in zlib command or the zlib package, if available +catch { + package present zlib + set ::vfs::zlibPkg 1 } # for backwards compatibility @@ -110,19 +118,26 @@ return $pos } read { + if {$::vfs::zlibPkg} { + set zputcmd fill + set zgetcmd drain + } else { + set zputcmd put + set zgetcmd get + } set r "" set n $a1 #puts stderr " want $n z $zcmd pos $pos ilen $ilen" if {$n + $pos > $ilen} { set n [expr {$ilen - $pos}] } while {$n > 0} { - if {[$zcmd fill] == 0} { + if {![eof $ifd]} { set c [expr {$clen - [tell $ifd]}] if {$c > 4096} { set c 4096 } set data [read $ifd $c] #puts "filled $c [string length $data]" - $zcmd fill $data - } - set data [$zcmd drain $n] + $zcmd $zputcmd $data + } + set data [$zcmd $zgetcmd $n] #puts stderr " read [string length $data]" if {$data eq ""} break append r $data @@ -141,8 +156,12 @@ } proc vfs::zstream {mode ifd clen ilen} { - set cname _zstream_[incr ::vfs::zseq] - zlib s$mode $cname + if {$::vfs::zlibPkg} { + set cname _zstream_[incr ::vfs::zseq] + zlib s$mode $cname + } else { + set cname [zlib stream $mode] + } set cmd [list ::vfs::zstream_handler $cname $ifd $clen $ilen s$mode] set fd [rechan $cmd 2] set ::vfs::_zstream_pos($fd) 0 |