TclVFS

Check-in [e12c3ee732]
Login
Bounty program for improvements to Tcl and certain Tcl packages.
Tcl 2019 Conference, Houston/TX, US, Nov 4-8
Send your abstracts to [email protected]
or submit via the online form by Sep 9.

Many hyperlinks are disabled.
Use anonymous login to enable hyperlinks.

Overview
Comment:Fix for #92 vfs::zip unable to read zip archives with wrong modes
Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | descendants | both | trunk
Files: files | file ages | folders
SHA1: e12c3ee7322f9b3347c0ec9c261ac3084824dae1
User & Date: zoro2 2014-03-10 11:40:46
Context
2017-09-01
15:50
Merged changed to nmake files check-in: 263097fa61 user: ashok tags: trunk
2017-08-31
04:47
Updated nmake files to match current Tcl 8.6 check-in: 9c719715dd user: ashok tags: nmake-update
2017-08-30
08:37
Create new branch named "nmake-updates" Leaf check-in: aadd5e249f user: ashok tags: nmake-updates
2014-03-10
11:40
Fix for #92 vfs::zip unable to read zip archives with wrong modes check-in: e12c3ee732 user: zoro2 tags: trunk
11:39
Fix for zipvfs not preserving missing directories' upper case characters. check-in: b3589b4476 user: zoro2 tags: trunk
Changes
Hide Diffs Unified Diffs Ignore Whitespace Patch

Changes to library/zipvfs.tcl.

84
85
86
87
88
89
90





91
92
93
94
95
96
97
    # remove FIFO mode file type (0x1000)
    if {($sb(mode) & 0xf000) == 0x1000} {
        set sb(mode) [expr {$sb(mode) ^ 0x1000}]
    }
    # remove character device mode file type (0x2000)
    if {($sb(mode) & 0xf000) == 0x2000} {
        set sb(mode) [expr {$sb(mode) ^ 0x2000}]





    }
    array get sb
}

proc vfs::zip::access {zipfd name mode} {
    #::vfs::log "zip-access $name $mode"
    if {$mode & 2} {






>
>
>
>
>







84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
    # remove FIFO mode file type (0x1000)
    if {($sb(mode) & 0xf000) == 0x1000} {
        set sb(mode) [expr {$sb(mode) ^ 0x1000}]
    }
    # remove character device mode file type (0x2000)
    if {($sb(mode) & 0xf000) == 0x2000} {
        set sb(mode) [expr {$sb(mode) ^ 0x2000}]
    }
    # workaround for certain errorneus zip archives
    if {($sb(mode) & 0xffff) == 0xffff} {
	# change to directory type and set mode to 0777 + directory flag
	set sb(mode) 0x41ff
    }
    array get sb
}

proc vfs::zip::access {zipfd name mode} {
    #::vfs::log "zip-access $name $mode"
    if {$mode & 2} {