feat: Implement Open and Create for new files, decompose mknode

This commit is contained in:
Felicitas Pojtinger
2021-12-21 23:51:50 +01:00
parent ac50d61f0c
commit 191896bcda
3 changed files with 28 additions and 14 deletions

View File

@@ -66,11 +66,11 @@ func (f *FileSystem) Name() string {
func (f *FileSystem) Create(name string) (afero.File, error) {
log.Println("FileSystem.Name", name)
panic(ErrNotImplemented)
return os.OpenFile(name, os.O_CREATE, 0666)
}
func (f *FileSystem) Mkdir(name string, perm os.FileMode) error {
log.Println("FileSystem.Mkdir", name, perm)
func (f *FileSystem) mknode(dir bool, name string, perm os.FileMode) error {
log.Println("FileSystem.mknode", name, perm)
usr, err := user.Current()
if err != nil {
@@ -97,8 +97,13 @@ func (f *FileSystem) Mkdir(name string, perm os.FileMode) error {
gname = groups[0]
}
typeflag := tar.TypeReg
if dir {
typeflag = tar.TypeDir
}
hdr := &tar.Header{
Typeflag: tar.TypeDir,
Typeflag: byte(typeflag),
Name: name,
@@ -136,6 +141,12 @@ func (f *FileSystem) Mkdir(name string, perm os.FileMode) error {
return nil
}
func (f *FileSystem) Mkdir(name string, perm os.FileMode) error {
log.Println("FileSystem.Mkdir", name, perm)
return f.mknode(true, name, perm)
}
func (f *FileSystem) MkdirAll(path string, perm os.FileMode) error {
log.Println("FileSystem.MkdirAll", path, perm)
@@ -149,7 +160,7 @@ func (f *FileSystem) MkdirAll(path string, perm os.FileMode) error {
currentPath = filepath.Join(currentPath, part)
}
if err := f.Mkdir(currentPath, perm); err != nil {
if err := f.mknode(true, currentPath, perm); err != nil {
return err
}
}
@@ -192,13 +203,16 @@ func (f *FileSystem) Open(name string) (afero.File, error) {
func (f *FileSystem) OpenFile(name string, flag int, perm os.FileMode) (afero.File, error) {
log.Println("FileSystem.OpenFile", name, flag, perm)
if flag != 0 {
// TODO: Implement update and write
panic(ErrNotImplemented)
if _, err := f.Stat(name); err != nil {
if err == os.ErrNotExist && flag&os.O_CREATE != 0 {
if err := f.mknode(false, name, perm); err != nil {
return nil, err
}
} else {
return nil, err
}
}
// TODO: Implement `perm` support
return f.Open(name)
}