diff options
-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 } } |