ftpvfs multiple port support
authorVince Darley <vincentdarley@sourceforge.net>
Thu, 3 Jul 2003 15:56:23 +0000 (15:56 +0000)
committerVince Darley <vincentdarley@sourceforge.net>
Thu, 3 Jul 2003 15:56:23 +0000 (15:56 +0000)
ChangeLog
library/ftpvfs.tcl

index cccb5ce79377f9ff043d2eb675c4bf940ac635fe..c27cc94f9409af781e6c3c16c456711009f69b4e 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2003-06-16  Vince Darley <vincentdarley@sourceforge.net>
+
+       * library/ftpvfs.tcl: added support for ports other than 21,
+       patch from msofer -- thanks.
+       
 2003-06-16  Vince Darley <vincentdarley@sourceforge.net>
 
        * library/ftpvfs.tcl: added '-output ::vfs::log' to ftp
index 784d930b09524c5eaba2350e6ec3c2295ee1c5ef..779910b839cc5e136b471aa56229dbe9a32f649a 100644 (file)
@@ -7,32 +7,32 @@ package require ftp
 namespace eval vfs::ftp {}
 
 proc vfs::ftp::Mount {dirurl local} {
+    set dirurl [string trim $dirurl]
     ::vfs::log "ftp-vfs: attempt to mount $dirurl at $local"
     if {[string index $dirurl end] != "/"} {
        ::vfs::log "ftp-vfs: adding missing directory delimiter to mount point"
        append dirurl "/"
     }
     
-    if {![regexp {(ftp://)?(([^:]*)(:([^@]*))?@)?([^/]*)(/(.*/)?([^/]*))?$} \
-      $dirurl junk junk junk user junk pass host "" path file]} {
+    set urlRE {(?:ftp://)?(?:([^@:]*)(?::([^@]*))?@)?([^/:]+)(?::([0-9]*))?/(.*/)?$} 
+    if {![regexp $urlRE $dirurl - user pass host port path]} {
        return -code error "Sorry I didn't understand\
          the url address \"$dirurl\""
     }
     
-    if {[string length $file]} {
-       return -code error "Can only mount directories, not\
-         files (perhaps you need a trailing '/' - I understood\
-         a path '$path' and file '$file')"
-    }
-    
     if {![string length $user]} {
        set user anonymous
     }
     
-    set fd [::ftp::Open $host $user $pass -output ::vfs::log]
+    if {![string length $port]} {
+       set port 21
+    }
+    
+    set fd [::ftp::Open $host $user $pass -port $port -output ::vfs::log]
     if {$fd == -1} {
        error "Mount failed"
     }
+    
     if {$path != ""} {
        if {[catch {
            ::ftp::Cd $fd $path