forked from TrueCloudLab/frostfs-s3-gw
7deeb68d47
Naive migration, without any tries to start application closes #25 Signed-off-by: Evgeniy Kulikov <kim@nspcc.ru>
49 lines
716 B
Go
49 lines
716 B
Go
package layer
|
|
|
|
import "io"
|
|
|
|
type offsetWriter struct {
|
|
io.Writer
|
|
|
|
written int64
|
|
skipped int64
|
|
|
|
offset int64
|
|
length int64
|
|
}
|
|
|
|
func newWriter(w io.Writer, offset, length int64) io.Writer {
|
|
return &offsetWriter{
|
|
Writer: w,
|
|
offset: offset,
|
|
length: length,
|
|
}
|
|
}
|
|
|
|
func (w *offsetWriter) Write(p []byte) (int, error) {
|
|
ln := len(p)
|
|
length := int64(ln)
|
|
offset := w.offset - w.skipped
|
|
|
|
if length-offset < 0 {
|
|
w.skipped += length
|
|
|
|
return ln, nil
|
|
}
|
|
|
|
length -= offset
|
|
|
|
left := w.length - w.written
|
|
if left-length < 0 || length-left < length {
|
|
length = left
|
|
} else {
|
|
return 0, nil
|
|
}
|
|
|
|
n, err := w.Writer.Write(p[offset : offset+length])
|
|
|
|
w.written += int64(n)
|
|
w.skipped += offset
|
|
|
|
return n, err
|
|
}
|