b35a3d6574
There has been over 1 year of commit history leading up to this point, but almost all of that has had some kind network configuration or secrets built into the code. As of today all of that has been removed, and the codebase can finally be published! I am keeping a private copy of the previous commit history, though it's unclear if it will ever be able to be published.
42 lines
600 B
Go
42 lines
600 B
Go
package garage
|
|
|
|
import "io"
|
|
|
|
type infiniteReader struct {
|
|
b []byte
|
|
i int
|
|
}
|
|
|
|
// NewInfiniteReader returns a reader which will produce the given bytes in
|
|
// repetition. len(b) must be greater than 0.
|
|
func NewInfiniteReader(b []byte) io.Reader {
|
|
|
|
if len(b) == 0 {
|
|
panic("len(b) must be greater than 0")
|
|
}
|
|
|
|
return &infiniteReader{b: b}
|
|
}
|
|
|
|
func (r *infiniteReader) Read(b []byte) (int, error) {
|
|
|
|
// here, have a puzzle
|
|
|
|
var n int
|
|
|
|
for {
|
|
|
|
n += copy(b[n:], r.b[r.i:])
|
|
|
|
if r.i > 0 {
|
|
n += copy(b[n:], r.b[:r.i])
|
|
}
|
|
|
|
r.i = (r.i + n) % len(r.b)
|
|
|
|
if n >= len(b) {
|
|
return n, nil
|
|
}
|
|
}
|
|
}
|