woj-server/pkg/file/writer.go

35 lines
572 B
Go
Raw Normal View History

package file
import (
"fmt"
"git.0x7f.app/WOJ/woj-server/pkg/utils"
"os"
)
type LimitedWriter struct {
File *os.File
Limit int64
n int64
}
func (lw *LimitedWriter) Write(p []byte) (int, error) {
remaining := lw.Limit - lw.n
if remaining <= 0 {
return 0, fmt.Errorf("write limit exceeded")
}
var err, err2 error
var n int
writeLen := int64(len(p))
if writeLen > remaining {
err = fmt.Errorf("write limit exceeded")
writeLen = remaining
}
n, err2 = lw.File.Write(p[:writeLen])
lw.n += int64(n)
return n, utils.If(err2 != nil, err2, err)
}