From be0eced68a0cdfac63b3f806be9909c536ef8883 Mon Sep 17 00:00:00 2001 From: Silvan Jegen Date: Sun, 14 Jun 2015 15:55:11 +0200 Subject: Still working on the off-by-ones --- unxml.go | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) (limited to 'unxml.go') diff --git a/unxml.go b/unxml.go index db191c0..f3909dc 100644 --- a/unxml.go +++ b/unxml.go @@ -138,10 +138,16 @@ func (r *ElementReader) Read(out []byte) (int, error) { lenlr := len(r.xr.lastread) if lenlr > 0 { - n = copy(out[0:], r.xr.lastread) - r.xr.count += n - r.xr.lastread = make([]byte, len(out)) - lenout -= n + if lenlr < lenout { + n = copy(out[0:], r.xr.lastread) + r.xr.count += n + r.xr.lastread = make([]byte, len(out)) + lenout -= n + } else { + n = copy(out[0:], r.xr.lastread[:lenout]) + r.xr.lastread = r.xr.lastread[lenout:] + return r.xr.count, err + } } for { @@ -167,7 +173,6 @@ func (r *ElementReader) Read(out []byte) (int, error) { //fmt.Printf("HAD NO SPACE: count: %d, lenout: %d\n", r.xr.count, lenout) n = copy(out[r.xr.count:], text[:lenout]) r.xr.count += n - lenout -= n r.xr.lastread = text[lenout:] return r.xr.count, err } @@ -188,10 +193,9 @@ func (r *ElementReader) Read(out []byte) (int, error) { r.xr.count += n lenout -= n } else { - n = copy(out[r.xr.count:], raw[:lenout-1]) + n = copy(out[r.xr.count:], raw[:lenout]) r.xr.count += n - lenout -= n - r.xr.lastread = raw[lenout-1:] + r.xr.lastread = raw[lenout:] return r.xr.count, err } } @@ -213,10 +217,9 @@ func (r *ElementReader) Read(out []byte) (int, error) { r.xr.count += n lenout -= n } else { - n = copy(out[r.xr.count:], raw[:lenout-1]) + n = copy(out[r.xr.count:], raw[:lenout]) r.xr.count += n - lenout -= n - r.xr.lastread = raw[lenout-1:] + r.xr.lastread = raw[lenout:] return r.xr.count, err } } -- cgit v1.2.1-18-gbd029