aboutsummaryrefslogtreecommitdiff
path: root/zsig/zsig.go
diff options
context:
space:
mode:
Diffstat (limited to 'zsig/zsig.go')
-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
+}