archive/zip: remove WriterOptions and replace with SetOffset method
Change-Id: I0a8b972c33e80c750ff1d63717177a5a3294a112
Reviewed-on: https://go-review.googlesource.com/7445
Reviewed-by: Rob Pike <r@golang.org>
Reviewed-by: Geert-Johan Riemer <gjr19912@gmail.com>
Reviewed-by: Andrew Gerrand <adg@golang.org>
diff --git a/src/archive/zip/writer.go b/src/archive/zip/writer.go
index c2e0416..87ac694 100644
--- a/src/archive/zip/writer.go
+++ b/src/archive/zip/writer.go
@@ -29,29 +29,20 @@
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),
- },
+// 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")
}
- if options != nil {
- writer.cw.count = options.Offset
- }
- return writer
+ w.cw.count = n
}
// Flush flushes any buffered data to the underlying writer.
diff --git a/src/archive/zip/writer_test.go b/src/archive/zip/writer_test.go
index 8be8640..01b63f2 100644
--- a/src/archive/zip/writer_test.go
+++ b/src/archive/zip/writer_test.go
@@ -87,7 +87,7 @@
}
}
-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 @@
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)