for latest cvs head
authorVince Darley <vincentdarley@sourceforge.net>
Wed, 20 Feb 2002 16:06:53 +0000 (16:06 +0000)
committerVince Darley <vincentdarley@sourceforge.net>
Wed, 20 Feb 2002 16:06:53 +0000 (16:06 +0000)
ChangeLog
library/httpvfs.tcl
library/tclprocvfs.tcl
library/vfsUrl.tcl
library/zipvfs.tcl

index 61b81819d77b13dd6d473a77ed6e4e470a256321..5a1c2f80b1430757b467376c59c89a115985b7e6 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,15 @@
+2002-02-19  Vince Darley <vincentdarley@sourceforge.net>
+       * library/*.tcl: updated the vfs implementations to deal
+       with the 2002-02-01 change below.  More work needed.
+
+2002-02-17  Vince Darley <vincentdarley@sourceforge.net>
+       * generic/vfs.c: updated for TIP#72 application to cvs head.
+       The 'file stat' implementation now deals with files of size
+       greater than a 32 bit representation.  This requires the
+       very latest cvs head of Tcl 8.4a4, and is not compatible
+       with previous releases (but that is fine, since we're still
+       tracking alpha releases anyway).
+
 2002-02-01 Vince Darley <vincentdarley@sourceforge.net>
        * generic/vfs.c: allow 'pattern' to be NULL in calls to 
        Tcl_FSMatchInDirectory in preparation for fix of Tcl bug
        * examples/simpleExamples.tcl: a demo
        * doc/vfslib.n: some documentation on the 'library' code.
        
-2002-02-17  Vince Darley <vincentdarley@sourceforge.net>
-       * generic/vfs.c: updated for TIP#72 application to cvs head.
-       The 'file stat' implementation now deals with files of size
-       greater than a 32 bit representation.
-
 2001-10-29  Vince Darley <vincentdarley@sourceforge.net>
         * win/makefile.vc: installation is better.
        * library/vfsUrl.tcl: improved urltype mounting.  The following
index de2afbc7e931e446ffe9efb757b6c51a94c35b0a..dae654a3d93367b8e67e10d0397ed09f2412cc07 100644 (file)
@@ -125,6 +125,16 @@ proc vfs::http::matchindirectory {dirurl path actualpath pattern type} {
     ::vfs::log "matchindirectory $path $pattern $type"
     set res [list]
 
+    if {[string length $pattern]} {
+       # need to match all files in a given remote http site.
+       
+    } else {
+       # single file
+       if {![catch {access $dirurl $path}]} {
+           lappend res $path
+       }
+    }
+    
     return $res
 }
 
index 84677b6a2f4ac5633ab4b323c29b76ca190edc0d..43f69b09d25c4113895e426256127b64dd938f21 100644 (file)
@@ -114,12 +114,22 @@ proc vfs::ns::matchindirectory {ns path actualpath pattern type} {
 
     if {[::vfs::matchDirectories $type]} {
        # add matching directories to $res
-       eval lappend res [namespace children ::${ns}::${path} $pattern]
+       if {[string length $pattern]} {
+           eval lappend res [namespace children ::${ns}::${path} $pattern]
+       } else {
+           if {[namespace exists ::${ns}::${path}]} {
+               eval lappend res ::${ns}::${path}
+           }
+       }
     }
     
     if {[::vfs::matchFiles $type]} {
        # add matching files to $res
-       eval lappend res [info procs ::${ns}::${path}::$pattern]
+       if {[string length $pattern]} {
+           eval lappend res [info procs ::${ns}::${path}::$pattern]
+       } else {
+           eval lappend res [info procs ::${ns}]
+       }
     }
     set realres [list]
     foreach r $res {
index b5a65178a14a3781cb811f87b3e0c079ea0318a6..68f9c336a566f5d08b414beeee3c664589a7cf45 100644 (file)
@@ -97,6 +97,10 @@ proc vfs::urltype::matchindirectory {type root path actualpath pattern types} {
 
     if {![vfs::matchDirectories $types]} { return [list] }
 
+    if {![string length $pattern]} {
+       return foo
+    }
+    
     set res [list]
     set len [string length $root]
     
index 121301fc5525b4ef9c3336d289d667972a8123a1..98d0689be691e56e5db1f5d7bec8391856fb5ab9 100644 (file)
@@ -43,6 +43,9 @@ proc vfs::zip::handler {zipfd cmd root relative actualpath args} {
 
 proc vfs::zip::matchindirectory {zipfd path actualpath pattern type} {
     #::vfs::log [list matchindirectory $path $actualpath $pattern $type]
+
+    # This call to zip::getdir handles empty patterns properly as asking
+    # for the existence of a single file $path only
     set res [::zip::getdir $zipfd $path $pattern]
     #::vfs::log "got $res"
     set newres [list]
@@ -436,6 +439,7 @@ proc zip::stat {fd path arr} {
     return ""
 }
 
+# Treats empty pattern as asking for a particular file only
 proc zip::getdir {fd path {pat *}} {
 #    ::vfs::log [list getdir $fd $path $pat]
     upvar #0 zip::$fd.toc toc
@@ -444,7 +448,9 @@ proc zip::getdir {fd path {pat *}} {
        set path $pat
     } else {
        set path [string tolower $path]
-       append path /$pat
+       if {$pat != ""} {
+           append path /$pat
+       }
     }
     set depth [llength [file split $path]]