feat: Add support for O_TRUNC and O_APPEND flags

This commit is contained in:
Felicitas Pojtinger
2021-12-27 17:12:19 +01:00
parent 77060795e6
commit 04a4a4fa7e
4 changed files with 24 additions and 13 deletions

View File

@@ -203,6 +203,7 @@ var serveFTPCmd = &cobra.Command{
viper.GetString(cacheWriteFlag),
)
},
true, // FTP needs read permission for `STOR` command even if O_WRONLY is set
logger.PrintHeader,
)

View File

@@ -127,6 +127,7 @@ var serveHTTPCmd = &cobra.Command{
"", // We never write
nil, // We never write
false, // We never write
logger.PrintHeader,
)

View File

@@ -199,8 +199,6 @@ func (f *File) closeWithoutLocking() error {
}
func (f *File) enterWriteMode() error {
log.Println("File.enterWriteMode")
if f.readOpReader != nil || f.readOpWriter != nil {
if err := f.closeWithoutLocking(); err != nil {
return err
@@ -253,15 +251,18 @@ func (f *File) enterWriteMode() error {
}
}
// TODO: Don't do this if O_APPEND is set
if f.flags.truncate {
if err := f.writeBuf.Truncate(0); err != nil {
return err
}
}
if !f.flags.append {
if _, err := f.writeBuf.Seek(0, io.SeekStart); err != nil {
return err
}
}
}
return nil
}

View File

@@ -32,6 +32,7 @@ type FileSystem struct {
compressionLevel string
getFileBuffer func() (WriteCache, func() error, error)
relaxedReadPermissions bool
onHeader func(hdr *models.Header)
}
@@ -44,6 +45,7 @@ func NewFileSystem(
compressionLevel string,
getFileBuffer func() (WriteCache, func() error, error),
ignorePermissionFlags bool,
onHeader func(hdr *models.Header),
) afero.Fs {
@@ -55,6 +57,7 @@ func NewFileSystem(
compressionLevel: compressionLevel,
getFileBuffer: getFileBuffer,
relaxedReadPermissions: ignorePermissionFlags,
onHeader: onHeader,
}
@@ -196,6 +199,11 @@ func (f *FileSystem) OpenFile(name string, flag int, perm os.FileMode) (afero.Fi
flags.write = true
}
if flags.write && !flags.read && f.relaxedReadPermissions {
flags.read = true
flags.write = true
}
if flag&os.O_APPEND != 0 {
flags.append = true
}