aboutsummaryrefslogtreecommitdiff
path: root/ber/len.go
diff options
context:
space:
mode:
authorDimitri Sokolyuk <demon@dim13.org>2015-09-25 15:07:15 +0200
committerDimitri Sokolyuk <demon@dim13.org>2015-09-25 15:07:15 +0200
commit0559b7d4eab07cacf0f005e8e756c1d04470e0c7 (patch)
tree45f327235303491747140bb10f92edce922b7d98 /ber/len.go
parent5d024539d5cc2f4deaa88f783533fd453b78586f (diff)
Broken, but a step in right direction
Diffstat (limited to 'ber/len.go')
-rw-r--r--ber/len.go24
1 files changed, 21 insertions, 3 deletions
diff --git a/ber/len.go b/ber/len.go
index 67aff34..2bccf59 100644
--- a/ber/len.go
+++ b/ber/len.go
@@ -1,12 +1,30 @@
package ber
-func UnmarshalLen(b []byte) (i, n int) {
+import (
+ "io"
+)
+
+func UnmarshalLen(r io.ByteReader) int {
+ b, _ := r.ReadByte()
+ if b&0x80 == 0 {
+ return int(b)
+ }
+ n := int(b & 0x7f)
+ var i int
+ for k := 0; k <= n; k++ {
+ b, _ := r.ReadByte()
+ i |= int(b) << uint(k*8)
+ }
+ return i
+}
+
+func unmarshalLen(b []byte) (i, n int) {
if b[0]&0x80 == 0 {
return int(b[0]), 1
}
n = int(b[0] & 0x7f)
- for k := n; k > 0; k-- {
- i += int(b[k]) << uint((k-1)*8)
+ for k := 0; k <= n; k++ {
+ i |= int(b[k]) << uint((k-1)*8)
}
return i, n + 1
}