]> Sergey Matveev's repositories - btrtrc.git/commitdiff
Simplify bencode.Decoder.parseStringInterface
authorMatt Joiner <anacrolix@gmail.com>
Tue, 28 Sep 2021 23:50:01 +0000 (09:50 +1000)
committerMatt Joiner <anacrolix@gmail.com>
Tue, 28 Sep 2021 23:50:01 +0000 (09:50 +1000)
bencode/decode.go

index 0054c8678ea8c067d997a7992ed83539b1cea006..57d2d0cc67db69fe66851954b945d34f1929238a 100644 (file)
@@ -611,27 +611,21 @@ func (d *Decoder) parseIntInterface() (ret interface{}) {
        return
 }
 
-func (d *Decoder) parseStringInterface() (s string) {
+func (d *Decoder) parseStringInterface() string {
        // read the string length first
        d.readUntil(':')
        length, err := strconv.ParseInt(bytesAsString(d.buf.Bytes()), 10, 64)
        if err != nil {
-               panic(&SyntaxError{Offset: d.Offset-1, What: err})
+               panic(&SyntaxError{Offset: d.Offset - 1, What: err})
        }
        d.buf.Reset()
-       n, err := d.buf.ReadFrom(io.LimitReader(d.r, length))
-       d.Offset += n
-       switch err {
-       case nil:
-               s = d.buf.String()
-               d.buf.Reset()
-               return          
-       case io.EOF:
-               err = io.ErrUnexpectedEOF
-       default:
-               err = errors.New("unexpected I/O error: " + err.Error())
+       b := make([]byte, length)
+       n, err := io.ReadFull(d.r, b)
+       d.Offset += int64(n)
+       if err != nil {
+               panic(&SyntaxError{Offset: d.Offset, What: err})
        }
-       panic(&SyntaxError{Offset: d.Offset, What: err})
+       return bytesAsString(b)
 }
 
 func (d *Decoder) parseDictInterface() interface{} {