more documentation and better posix error handling
authorVince Darley <vincentdarley@sourceforge.net>
Fri, 21 Feb 2003 16:05:41 +0000 (16:05 +0000)
committerVince Darley <vincentdarley@sourceforge.net>
Fri, 21 Feb 2003 16:05:41 +0000 (16:05 +0000)
doc/vfs.n
library/mk4vfs.tcl
library/vfsUtils.tcl

index 81f0322f3c504b1638a44a88f1cf57c778821a5d..810bdeb420cbc2e7b55901e2236afc3b0c772c9a 100644 (file)
--- a/doc/vfs.n
+++ b/doc/vfs.n
@@ -168,7 +168,10 @@ Return TCL_OK or throw a posix error depending on whether the given
 access mode (which is an integer) is compatible with the file.
 .TP
 \fIcommand\fR \fIcreatedirectory\fR \fIr-r-a\fR
-Create a directory with the given name.
+Create a directory with the given name.  The command can assume
+that all sub-directories in the path exist and are valid, and
+that the actual desired path does not yet exist (Tcl takes care
+of all of that for us).
 .TP
 \fIcommand\fR \fIdeletefile\fR \fIr-r-a\fR
 Delete the given file.
index 52092b7a90375f1db1173249f284a8a2083307a0..b792cee85166e23ab24aa05ea6b868a2354f46a5 100644 (file)
@@ -383,8 +383,7 @@ namespace eval mk4vfs {
            } else {
                set row [mk::select $view -count 1 parent $parent name $ele]
                if { $row == "" } {
-                   return -code error "could not read \"$path\":\
-                           no such file or directory"
+                   vfs::filesystem posixerror $::vfs::posix(ENOENT)
                }
                set v::cache($db,$parent,$ele) $row
                set parent $row
@@ -426,8 +425,7 @@ namespace eval mk4vfs {
                if { $row != "" } {
                    set v::cache($db,$parent,$tail) $row
                } else { 
-                   return -code error "could not read \"$path\":\
-                           no such file or directory"
+                   vfs::filesystem posixerror $::vfs::posix(ENOENT)
                }
            }
        }
@@ -512,13 +510,15 @@ namespace eval mk4vfs {
        set view $db.dirs
 
        set npath {}
+       # This actually does more work than is needed. Tcl's
+       # vfs only requires us to create the last piece, and
+       # Tcl already knows it is not a file.
        foreach ele $sp {
            set npath [file join $npath $ele]
 
-           if { ![catch {stat $db $npath sb}] } {
+           if {![catch {stat $db $npath sb}] } {
                if { $sb(type) != "directory" } {
-                   return -code error "can't create directory \"$npath\":\
-                           file already exists"
+                   vfs::filesystem posixerror $::vfs::posix(EROFS)
                }
                set parent [mk::cursor position sb(ino)]
                continue
@@ -584,7 +584,7 @@ namespace eval mk4vfs {
                }
            } else {
                if {[llength $contents]} {
-                   return -code error "Non-empty"
+                   vfs::filesystem posixerror $::vfs::posix(ENOTEMPTY)
                }
            }
            array unset v::cache \
index f28ecb6548a53a36d4de5ed5c24cdcd4a11360ce..2325d5191acebbbafd6e492444ccd9bf30f3102b 100644 (file)
@@ -361,7 +361,7 @@ set vfs::posix(ESRCH)               3       ;# No such process
 set vfs::posix(EINTR)          4       ;# Interrupted system call
 set vfs::posix(EIO)            5       ;# Input/output error
 set vfs::posix(ENXIO)          6       ;# Device not configured
-set vfs::posix(E)2BIG          7       ;# Argument list too long
+set vfs::posix(E2BIG)          7       ;# Argument list too long
 set vfs::posix(ENOEXEC)                8       ;# Exec format error
 set vfs::posix(EBADF)          9       ;# Bad file descriptor
 set vfs::posix(ECHILD)         10      ;# No child processes