feat: Add support for O_TRUNC and O_APPEND flags
This commit is contained in:
@@ -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,
|
||||
)
|
||||
|
||||
@@ -125,8 +125,9 @@ var serveHTTPCmd = &cobra.Command{
|
||||
Metadata: metadataPersister,
|
||||
},
|
||||
|
||||
"", // We never write
|
||||
nil, // We never write
|
||||
"", // We never write
|
||||
nil, // We never write
|
||||
false, // We never write
|
||||
|
||||
logger.PrintHeader,
|
||||
)
|
||||
|
||||
@@ -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,13 +251,16 @@ func (f *File) enterWriteMode() error {
|
||||
}
|
||||
}
|
||||
|
||||
// TODO: Don't do this if O_APPEND is set
|
||||
if err := f.writeBuf.Truncate(0); err != nil {
|
||||
return err
|
||||
if f.flags.truncate {
|
||||
if err := f.writeBuf.Truncate(0); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
if _, err := f.writeBuf.Seek(0, io.SeekStart); err != nil {
|
||||
return err
|
||||
if !f.flags.append {
|
||||
if _, err := f.writeBuf.Seek(0, io.SeekStart); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -30,8 +30,9 @@ type FileSystem struct {
|
||||
|
||||
metadata config.MetadataConfig
|
||||
|
||||
compressionLevel string
|
||||
getFileBuffer func() (WriteCache, func() error, error)
|
||||
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 {
|
||||
@@ -53,8 +55,9 @@ func NewFileSystem(
|
||||
|
||||
metadata: metadata,
|
||||
|
||||
compressionLevel: compressionLevel,
|
||||
getFileBuffer: getFileBuffer,
|
||||
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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user