- var node inode = dn
- for i, name := range names {
- dn, ok := node.(*dirnode)
- if !ok {
- err = ErrFileExists
- return
- }
- if name == "" || name == "." {
- continue
- }
- if name == ".." {
- node = dn.parent
- continue
- }
- node, ok = dn.inodes[name]
- if !ok {
- if i == len(names)-1 {
- fn = dn.newFilenode(name, 0755)
+ for _, name := range names[:len(names)-1] {
+ switch name {
+ case "", ".":
+ case "..":
+ dn = dn.parent
+ default:
+ switch node := dn.inodes[name].(type) {
+ case nil:
+ dn = dn.newDirnode(name, 0755, dn.fileinfo.modTime)
+ case *dirnode:
+ dn = node
+ case *filenode:
+ err = ErrFileExists