aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDimitri Sokolyuk <demon@dim13.org>2017-08-06 12:09:09 +0200
committerDimitri Sokolyuk <demon@dim13.org>2017-08-06 12:09:09 +0200
commitbaae2c801506b8337eb96dc1d2d23cf0db19f96f (patch)
tree1d30a4a6e19a063728d4fb95adf24a0755465d66
parentea94c0ecc07b1542028aea143a5bc9748f19ef2f (diff)
...
-rw-r--r--zsig/zsig.go45
1 files 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
+}