From e5ed771fcda0411b1f59d98032cd07dae83d6647 Mon Sep 17 00:00:00 2001 From: nareix Date: Sun, 22 Nov 2015 08:16:35 +0800 Subject: [PATCH] add WriteEmptyInt() and RefillInt() --- atom/writer.go | 40 +++++++++++++++++++++++++++++----------- 1 file changed, 29 insertions(+), 11 deletions(-) diff --git a/atom/writer.go b/atom/writer.go index a61b744..367c1a0 100644 --- a/atom/writer.go +++ b/atom/writer.go @@ -48,18 +48,39 @@ type Writer struct { sizePos int64 } +func (self *Writer) WriteEmptyInt(n int) (pos int64, err error) { + if pos, err = self.Seek(0, 1); err != nil { + return + } + if err = WriteInt(self, 0, n); err != nil { + return + } + return +} + +func (self *Writer) RefillInt(pos int64, val int, n int) (err error) { + var curPos int64 + if curPos, err = self.Seek(0, 1); err != nil { + return + } + if _, err = self.Seek(pos, 0); err != nil { + return + } + if err = WriteInt(self, val, n); err != nil { + return + } + if _, err = self.Seek(curPos, 0); err != nil { + return + } + return +} + func (self *Writer) Close() (err error) { var curPos int64 if curPos, err = self.Seek(0, 1); err != nil { return } - if _, err = self.Seek(self.sizePos, 0); err != nil { - return - } - if err = WriteInt(self, int(curPos - self.sizePos), 4); err != nil { - return - } - if _, err = self.Seek(curPos, 0); err != nil { + if err = self.RefillInt(self.sizePos, int(curPos - self.sizePos), 4); err != nil { return } if false { @@ -71,10 +92,7 @@ func (self *Writer) Close() (err error) { func WriteAtomHeader(w io.WriteSeeker, cc4 string) (res *Writer, err error) { self := &Writer{WriteSeeker: w} - if self.sizePos, err = w.Seek(0, 1); err != nil { - return - } - if err = WriteDummy(self, 4); err != nil { + if self.sizePos, err = self.WriteEmptyInt(4); err != nil { return } if err = WriteString(self, cc4, 4); err != nil {