1
0
mirror of https://github.com/golang/go synced 2024-11-12 05:50:21 -07:00

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>
This commit is contained in:
Andrew Gerrand 2015-03-12 11:54:11 +11:00
parent 8a6eca43df
commit 1f35bb6466
2 changed files with 12 additions and 20 deletions

View File

@ -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),
},
// 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.

View File

@ -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)