Commit 1f35bb64 authored by Andrew Gerrand's avatar Andrew Gerrand

archive/zip: remove WriterOptions and replace with SetOffset method

Change-Id: I0a8b972c33e80c750ff1d63717177a5a3294a112
Reviewed-on: https://go-review.googlesource.com/7445Reviewed-by: 's avatarRob Pike <r@golang.org>
Reviewed-by: 's avatarGeert-Johan Riemer <gjr19912@gmail.com>
Reviewed-by: 's avatarAndrew Gerrand <adg@golang.org>
parent 8a6eca43
......@@ -29,29 +29,20 @@ type header struct {
offset uint64
}
// WriterOptions contains configuration options for a zip.Writer.
type WriterOptions struct {
// Offset modifies the initial zip offset.
// This is useful when the zip is appended to other data such as a binary executable.
Offset int64
}
// NewWriter returns a new Writer writing a zip file to w.
func NewWriter(w io.Writer) *Writer {
return NewWriterWithOptions(w, nil)
return &Writer{cw: &countWriter{w: bufio.NewWriter(w)}}
}
// NewWriterWithOptions returns a new Writer writing a zip file to w and uses the given options.
func NewWriterWithOptions(w io.Writer, options *WriterOptions) *Writer {
writer := &Writer{
cw: &countWriter{
w: bufio.NewWriter(w),
},
}
if options != nil {
writer.cw.count = options.Offset
// SetOffset sets the offset of the beginning of the zip data within the
// underlying writer. It should be used when the zip data is appended to an
// existing file, such as a binary executable.
// It must be called before any data is written.
func (w *Writer) SetOffset(n int64) {
if w.cw.count != 0 {
panic("zip: SetOffset called after data was written")
}
return writer
w.cw.count = n
}
// Flush flushes any buffered data to the underlying writer.
......
......@@ -87,7 +87,7 @@ func TestWriter(t *testing.T) {
}
}
func TestWriterOffsetOption(t *testing.T) {
func TestWriterOffset(t *testing.T) {
largeData := make([]byte, 1<<17)
for i := range largeData {
largeData[i] = byte(rand.Int())
......@@ -101,7 +101,8 @@ func TestWriterOffsetOption(t *testing.T) {
buf := new(bytes.Buffer)
existingData := []byte{1, 2, 3, 1, 2, 3, 1, 2, 3}
n, _ := buf.Write(existingData)
w := NewWriterWithOptions(buf, &WriterOptions{Offset: int64(n)})
w := NewWriter(buf)
w.SetOffset(int64(n))
for _, wt := range writeTests {
testCreate(t, w, &wt)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment