35 lines
572 B
Go
35 lines
572 B
Go
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)
|
|
}
|