From baae2c801506b8337eb96dc1d2d23cf0db19f96f Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Sun, 6 Aug 2017 12:09:09 +0200 Subject: ... --- zsig/zsig.go | 45 ++++++++++++++++++++++++++++----------------- 1 file changed, 28 insertions(+), 17 deletions(-) diff --git a/zsig/zsig.go b/zsig/zsig.go index e647cb4..5cd1630 100644 --- a/zsig/zsig.go +++ b/zsig/zsig.go @@ -163,31 +163,17 @@ func (z *Writer) Write(p []byte) (n int, err error) { return 0, err } if z.Extra != nil { - if len(z.Extra) > 0xffff { - return 0, errors.New("Extra data is too large") - } - var sz [2]byte - le.PutUint16(sz[:2], uint16(len(z.Extra))) - if _, err := z.w.Write(sz[:2]); err != nil { - return 0, err - } - if _, err := z.w.Write(z.Extra); err != nil { + if err := z.writeBytes(z.Extra); err != nil { return 0, err } } if z.Name != "" { - if _, err := io.WriteString(z.w, z.Name); err != nil { - return 0, err - } - if _, err := z.w.Write([]byte{0}); err != nil { + if err := z.writeString(z.Name); err != nil { return 0, err } } if z.Comment != "" { - if _, err := io.WriteString(z.w, z.Comment); err != nil { - return 0, err - } - if _, err := z.w.Write([]byte{0}); err != nil { + if err := z.writeString(z.Comment); err != nil { return 0, err } } @@ -195,3 +181,28 @@ func (z *Writer) Write(p []byte) (n int, err error) { } panic("not implemented") } + +func (z *Writer) writeString(s string) error { + if _, err := io.WriteString(z.w, s); err != nil { + return err + } + if _, err := z.w.Write([]byte{0}); err != nil { + return err + } + return nil +} + +func (z *Writer) writeBytes(b []byte) error { + if len(b) > 0xffff { + return errors.New("binary data is too large") + } + var sz [2]byte + le.PutUint16(sz[:2], uint16(len(b))) + if _, err := z.w.Write(sz[:2]); err != nil { + return err + } + if _, err := z.w.Write(b); err != nil { + return err + } + return nil +} -- cgit v1.2.3