"io"
"io/fs"
"os"
- "path"
"path/filepath"
)
rsrcPath string // path to the file resource fork
infoPath string // path to the file information fork
incompletePath string // path to partially transferred temp file
- saveMetaData bool // if true, enables saving of info and resource forks in sidecar files
- infoFork *FlatFileInformationFork
ffo *flattenedFileObject
}
return fmt.Sprintf(infoForkNameTemplate, f.name)
}
-func (f *fileWrapper) creatorCode() []byte {
- if f.ffo.FlatFileInformationFork.CreatorSignature != nil {
- return f.infoFork.CreatorSignature
- }
- return []byte(fileTypeFromFilename(f.name).CreatorCode)
-}
-
-func (f *fileWrapper) typeCode() []byte {
- if f.infoFork != nil {
- return f.infoFork.TypeSignature
- }
- return []byte(fileTypeFromFilename(f.name).TypeCode)
-}
-
-func (f *fileWrapper) rsrcForkWriter() (io.Writer, error) {
+func (f *fileWrapper) rsrcForkWriter() (io.WriteCloser, error) {
file, err := os.OpenFile(f.rsrcPath, os.O_CREATE|os.O_WRONLY, 0644)
if err != nil {
return nil, err
return file, nil
}
-func (f *fileWrapper) infoForkWriter() (io.Writer, error) {
+func (f *fileWrapper) infoForkWriter() (io.WriteCloser, error) {
file, err := os.OpenFile(f.infoPath, os.O_CREATE|os.O_WRONLY, 0644)
if err != nil {
return nil, err
return file, nil
}
-func (f *fileWrapper) incFileWriter() (io.Writer, error) {
+func (f *fileWrapper) incFileWriter() (io.WriteCloser, error) {
file, err := os.OpenFile(f.incompletePath, os.O_CREATE|os.O_APPEND|os.O_WRONLY, 0644)
if err != nil {
return nil, err
return nil, errors.New("file or directory not found")
}
-// move a fileWrapper and its associated metadata files to newPath
+// move a fileWrapper and its associated meta files to newPath.
+// Meta files include:
+// * Partially uploaded file ending with .incomplete
+// * Resource fork starting with .rsrc_
+// * Info fork starting with .info
+// During move of the meta files, os.ErrNotExist is ignored as these files may legitimately not exist.
func (f *fileWrapper) move(newPath string) error {
- err := f.fs.Rename(f.dataPath, path.Join(newPath, f.name))
+ err := f.fs.Rename(f.dataPath, filepath.Join(newPath, f.name))
if err != nil {
- // TODO
+ return err
}
- err = f.fs.Rename(f.incompletePath, path.Join(newPath, f.incompleteDataName()))
- if err != nil {
- // TODO
+ err = f.fs.Rename(f.incompletePath, filepath.Join(newPath, f.incompleteDataName()))
+ if err != nil && !errors.Is(err, os.ErrNotExist) {
+ return err
}
- err = f.fs.Rename(f.rsrcPath, path.Join(newPath, f.rsrcForkName()))
- if err != nil {
- // TODO
+ err = f.fs.Rename(f.rsrcPath, filepath.Join(newPath, f.rsrcForkName()))
+ if err != nil && !errors.Is(err, os.ErrNotExist) {
+ return err
}
- err = f.fs.Rename(f.infoPath, path.Join(newPath, f.infoForkName()))
- if err != nil {
- // TODO
+ err = f.fs.Rename(f.infoPath, filepath.Join(newPath, f.infoForkName()))
+ if err != nil && !errors.Is(err, os.ErrNotExist) {
+ return err
}
return nil
func (f *fileWrapper) delete() error {
err := f.fs.RemoveAll(f.dataPath)
if err != nil {
- // TODO
+ return err
}
err = f.fs.Remove(f.incompletePath)
- if err != nil {
- // TODO
+ if err != nil && !errors.Is(err, os.ErrNotExist) {
+ return err
}
err = f.fs.Remove(f.rsrcPath)
- if err != nil {
- // TODO
+ if err != nil && !errors.Is(err, os.ErrNotExist) {
+ return err
}
err = f.fs.Remove(f.infoPath)
- if err != nil {
- // TODO
+ if err != nil && !errors.Is(err, os.ErrNotExist) {
+ return err
}
return nil