| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 package bindings | 5 package bindings |
| 6 | 6 |
| 7 import ( | 7 import ( |
| 8 "encoding/binary" | 8 "encoding/binary" |
| 9 "fmt" | 9 "fmt" |
| 10 "math" | 10 "math" |
| (...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 118 } | 118 } |
| 119 if header != mapHeader { | 119 if header != mapHeader { |
| 120 return fmt.Errorf("invalid map header: %v", header) | 120 return fmt.Errorf("invalid map header: %v", header) |
| 121 } | 121 } |
| 122 if err := d.pushState(header, pointerBitSize); err != nil { | 122 if err := d.pushState(header, pointerBitSize); err != nil { |
| 123 return err | 123 return err |
| 124 } | 124 } |
| 125 return nil | 125 return nil |
| 126 } | 126 } |
| 127 | 127 |
| 128 // StartStruct starts decoding a struct and reads its data header, | 128 // StartStruct starts decoding a struct and reads its data header. |
| 129 // returning struct version declared in data header. | 129 // Returns the read data header. The caller should check if it is valid. |
| 130 // Note: it doesn't read a pointer to the encoded struct. | 130 // Note: it doesn't read a pointer to the encoded struct. |
| 131 // Call |Finish()| after reading all fields. | 131 // Call |Finish()| after reading all fields. |
| 132 func (d *Decoder) StartStruct() (uint32, error) { | 132 func (d *Decoder) StartStruct() (DataHeader, error) { |
| 133 header, err := d.readDataHeader() | 133 header, err := d.readDataHeader() |
| 134 if err != nil { | 134 if err != nil { |
| 135 » » return 0, err | 135 » » return DataHeader{}, err |
| 136 } | 136 } |
| 137 if header.Size < dataHeaderSize { | 137 if header.Size < dataHeaderSize { |
| 138 » » return 0, fmt.Errorf("data header size is too small: is %d, but
should be at least %d", header.Size, dataHeaderSize) | 138 » » return DataHeader{}, fmt.Errorf("data header size(%d) should be
at least %d", header.Size, dataHeaderSize) |
| 139 } | 139 } |
| 140 if err := d.pushState(header, 0); err != nil { | 140 if err := d.pushState(header, 0); err != nil { |
| 141 » » return 0, err | 141 » » return DataHeader{}, err |
| 142 } | 142 } |
| 143 » return header.ElementsOrVersion, nil | 143 » return header, nil |
| 144 } | 144 } |
| 145 | 145 |
| 146 func (d *Decoder) readDataHeader() (DataHeader, error) { | 146 func (d *Decoder) readDataHeader() (DataHeader, error) { |
| 147 if err := d.claimData(dataHeaderSize); err != nil { | 147 if err := d.claimData(dataHeaderSize); err != nil { |
| 148 return DataHeader{}, err | 148 return DataHeader{}, err |
| 149 } | 149 } |
| 150 oldEnd := d.end - dataHeaderSize | 150 oldEnd := d.end - dataHeaderSize |
| 151 header := DataHeader{ | 151 header := DataHeader{ |
| 152 Size: binary.LittleEndian.Uint32(d.buf[oldEnd:]), | 152 Size: binary.LittleEndian.Uint32(d.buf[oldEnd:]), |
| 153 ElementsOrVersion: binary.LittleEndian.Uint32(d.buf[oldEnd+4:]), | 153 ElementsOrVersion: binary.LittleEndian.Uint32(d.buf[oldEnd+4:]), |
| (...skipping 204 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 358 } | 358 } |
| 359 | 359 |
| 360 // ReadSharedBufferHandle reads a shared buffer handle. | 360 // ReadSharedBufferHandle reads a shared buffer handle. |
| 361 func (d *Decoder) ReadSharedBufferHandle() (system.SharedBufferHandle, error) { | 361 func (d *Decoder) ReadSharedBufferHandle() (system.SharedBufferHandle, error) { |
| 362 if handle, err := d.ReadUntypedHandle(); err != nil { | 362 if handle, err := d.ReadUntypedHandle(); err != nil { |
| 363 return nil, err | 363 return nil, err |
| 364 } else { | 364 } else { |
| 365 return handle.ToSharedBufferHandle(), nil | 365 return handle.ToSharedBufferHandle(), nil |
| 366 } | 366 } |
| 367 } | 367 } |
| OLD | NEW |