Index: appfsd.tcl ================================================================== --- appfsd.tcl +++ appfsd.tcl @@ -14,15 +14,16 @@ return $retval } proc _cachefile {url key {keyIsHash 1}} { + set filekey $key if {$keyIsHash} { - set key [_hash_sep $key] + set filekey [_hash_sep $filekey] } - set file [file join $::appfs::cachedir $key] + set file [file join $::appfs::cachedir $filekey] file mkdir [file dirname $file] if {![file exists $file]} { set tmpfile "${file}.new" @@ -33,11 +34,20 @@ set token [::http::geturl $url -channel $fd -binary true] set ncode [::http::ncode $token] ::http::reset $token close $fd - if {$ncode == "200"} { + if {$keyIsHash} { + catch { + set hash [string tolower [exec openssl sha1 $tmpfile]] + regsub {.*= *} $hash {} hash + } + } else { + set hash $key + } + + if {$ncode == "200" && $hash == $key} { file rename -force -- $tmpfile $file } else { file delete -force -- $tmpfile } }