diff options
author | Silvan Jegen <s.jegen@gmail.com> | 2015-06-14 15:55:11 +0200 |
---|---|---|
committer | Silvan Jegen <s.jegen@gmail.com> | 2015-06-14 15:55:11 +0200 |
commit | be0eced68a0cdfac63b3f806be9909c536ef8883 (patch) | |
tree | a36c340fd0c4a421f8fcf5d6f5a8b775962adb16 /unxml.go | |
parent | 546f5c3e67692e402e1dfdd42316a71fe9f550b3 (diff) |
Still working on the off-by-ones
Diffstat (limited to 'unxml.go')
-rw-r--r-- | unxml.go | 25 |
1 files changed, 14 insertions, 11 deletions
@@ -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 } } |