return fmt.Errorf("line %d: bad file segment %q", lineno, token)
}
name := path.Clean(dirname + "/" + manifestUnescape(toks[2]))
- dn.makeParentDirs(name)
+ err = dn.makeParentDirs(name)
+ if err != nil {
+ return fmt.Errorf("line %d: cannot use path %q: %s", lineno, name, err)
+ }
f, err := dn.OpenFile(name, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0700)
if err != nil {
return fmt.Errorf("line %d: cannot append to %q: %s", lineno, name, err)
func (dn *dirnode) makeParentDirs(name string) (err error) {
names := strings.Split(name, "/")
for _, name := range names[:len(names)-1] {
- f, err := dn.mkdir(name)
+ f, err := dn.OpenFile(name, os.O_CREATE, os.ModeDir|0755)
if err != nil {
return err
}
func (dn *dirnode) Mkdir(name string, perm os.FileMode) error {
f, err := dn.mkdir(name)
- if err != nil {
- f.Close()
+ if err == nil {
+ err = f.Close()
}
return err
}
var err error
s.fs, err = (&Collection{}).FileSystem(s.client, s.kc)
c.Assert(err, check.IsNil)
- for _, name := range []string{"dir", "zero", "zero/zero"} {
+ for _, name := range []string{"dir", "dir/zerodir", "zero", "zero/zero"} {
err = s.fs.Mkdir(name, 0755)
c.Assert(err, check.IsNil)
}
expect := map[string][]byte{
- "0": nil,
- "00": []byte{},
- "one": []byte{1},
- "dir/0": nil,
- "dir/two": []byte{1, 2},
- "dir/zero": nil,
- "zero/zero/zero": nil,
+ "0": nil,
+ "00": []byte{},
+ "one": []byte{1},
+ "dir/0": nil,
+ "dir/two": []byte{1, 2},
+ "dir/zero": nil,
+ "dir/zerodir/zero": nil,
+ "zero/zero/zero": nil,
}
for name, data := range expect {
f, err := s.fs.OpenFile(name, os.O_WRONLY|os.O_CREATE, 0)