summaryrefslogtreecommitdiff
path: root/unxml.go
diff options
context:
space:
mode:
authorSilvan Jegen <s.jegen@gmail.com>2015-06-14 15:55:11 +0200
committerSilvan Jegen <s.jegen@gmail.com>2015-06-14 15:55:11 +0200
commitbe0eced68a0cdfac63b3f806be9909c536ef8883 (patch)
treea36c340fd0c4a421f8fcf5d6f5a8b775962adb16 /unxml.go
parent546f5c3e67692e402e1dfdd42316a71fe9f550b3 (diff)
Still working on the off-by-ones
Diffstat (limited to 'unxml.go')
-rw-r--r--unxml.go25
1 files changed, 14 insertions, 11 deletions
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
}
}