| 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 167 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 178 func (d *Decoder) ReadInt8() (int8, error) { | 178 func (d *Decoder) ReadInt8() (int8, error) { |
| 179 value, err := d.ReadUint8() | 179 value, err := d.ReadUint8() |
| 180 return int8(value), err | 180 return int8(value), err |
| 181 } | 181 } |
| 182 | 182 |
| 183 // ReadUint8 reads an uint8 value. | 183 // ReadUint8 reads an uint8 value. |
| 184 func (d *Decoder) ReadUint8() (uint8, error) { | 184 func (d *Decoder) ReadUint8() (uint8, error) { |
| 185 if err := ensureElementBitSizeAndCapacity(d.state(), 8); err != nil { | 185 if err := ensureElementBitSizeAndCapacity(d.state(), 8); err != nil { |
| 186 return 0, err | 186 return 0, err |
| 187 } | 187 } |
| 188 d.state().alignOffsetToBytes() | |
| 189 value := d.buf[d.state().offset] | 188 value := d.buf[d.state().offset] |
| 190 d.state().skipBytes(1) | 189 d.state().skipBytes(1) |
| 191 d.state().elementsProcessed++ | 190 d.state().elementsProcessed++ |
| 192 return value, nil | 191 return value, nil |
| 193 } | 192 } |
| 194 | 193 |
| 195 // ReadInt16 reads an int16 value. | 194 // ReadInt16 reads an int16 value. |
| 196 func (d *Decoder) ReadInt16() (int16, error) { | 195 func (d *Decoder) ReadInt16() (int16, error) { |
| 197 value, err := d.ReadUint16() | 196 value, err := d.ReadUint16() |
| 198 return int16(value), err | 197 return int16(value), err |
| 199 } | 198 } |
| 200 | 199 |
| 201 // ReadUint16 reads an uint16 value. | 200 // ReadUint16 reads an uint16 value. |
| 202 func (d *Decoder) ReadUint16() (uint16, error) { | 201 func (d *Decoder) ReadUint16() (uint16, error) { |
| 203 if err := ensureElementBitSizeAndCapacity(d.state(), 16); err != nil { | 202 if err := ensureElementBitSizeAndCapacity(d.state(), 16); err != nil { |
| 204 return 0, err | 203 return 0, err |
| 205 } | 204 } |
| 206 d.state().alignOffsetToBytes() | |
| 207 d.state().offset = align(d.state().offset, 2) | 205 d.state().offset = align(d.state().offset, 2) |
| 208 value := binary.LittleEndian.Uint16(d.buf[d.state().offset:]) | 206 value := binary.LittleEndian.Uint16(d.buf[d.state().offset:]) |
| 209 d.state().skipBytes(2) | 207 d.state().skipBytes(2) |
| 210 d.state().elementsProcessed++ | 208 d.state().elementsProcessed++ |
| 211 return value, nil | 209 return value, nil |
| 212 } | 210 } |
| 213 | 211 |
| 214 // ReadInt32 reads an int32 value. | 212 // ReadInt32 reads an int32 value. |
| 215 func (d *Decoder) ReadInt32() (int32, error) { | 213 func (d *Decoder) ReadInt32() (int32, error) { |
| 216 value, err := d.ReadUint32() | 214 value, err := d.ReadUint32() |
| 217 return int32(value), err | 215 return int32(value), err |
| 218 } | 216 } |
| 219 | 217 |
| 220 // ReadUint32 reads an uint32 value. | 218 // ReadUint32 reads an uint32 value. |
| 221 func (d *Decoder) ReadUint32() (uint32, error) { | 219 func (d *Decoder) ReadUint32() (uint32, error) { |
| 222 if err := ensureElementBitSizeAndCapacity(d.state(), 32); err != nil { | 220 if err := ensureElementBitSizeAndCapacity(d.state(), 32); err != nil { |
| 223 return 0, err | 221 return 0, err |
| 224 } | 222 } |
| 225 d.state().alignOffsetToBytes() | |
| 226 d.state().offset = align(d.state().offset, 4) | 223 d.state().offset = align(d.state().offset, 4) |
| 227 value := binary.LittleEndian.Uint32(d.buf[d.state().offset:]) | 224 value := binary.LittleEndian.Uint32(d.buf[d.state().offset:]) |
| 228 d.state().skipBytes(4) | 225 d.state().skipBytes(4) |
| 229 d.state().elementsProcessed++ | 226 d.state().elementsProcessed++ |
| 230 return value, nil | 227 return value, nil |
| 231 } | 228 } |
| 232 | 229 |
| 233 // ReadInt64 reads an int64 value. | 230 // ReadInt64 reads an int64 value. |
| 234 func (d *Decoder) ReadInt64() (int64, error) { | 231 func (d *Decoder) ReadInt64() (int64, error) { |
| 235 value, err := d.ReadUint64() | 232 value, err := d.ReadUint64() |
| 236 return int64(value), err | 233 return int64(value), err |
| 237 } | 234 } |
| 238 | 235 |
| 239 // ReadUint64 reads an uint64 value. | 236 // ReadUint64 reads an uint64 value. |
| 240 func (d *Decoder) ReadUint64() (uint64, error) { | 237 func (d *Decoder) ReadUint64() (uint64, error) { |
| 241 if err := ensureElementBitSizeAndCapacity(d.state(), 64); err != nil { | 238 if err := ensureElementBitSizeAndCapacity(d.state(), 64); err != nil { |
| 242 return 0, err | 239 return 0, err |
| 243 } | 240 } |
| 244 d.state().alignOffsetToBytes() | |
| 245 d.state().offset = align(d.state().offset, 8) | 241 d.state().offset = align(d.state().offset, 8) |
| 246 value := binary.LittleEndian.Uint64(d.buf[d.state().offset:]) | 242 value := binary.LittleEndian.Uint64(d.buf[d.state().offset:]) |
| 247 d.state().skipBytes(8) | 243 d.state().skipBytes(8) |
| 248 d.state().elementsProcessed++ | 244 d.state().elementsProcessed++ |
| 249 return value, nil | 245 return value, nil |
| 250 } | 246 } |
| 251 | 247 |
| 252 // ReadFloat32 reads a float32 value. | 248 // ReadFloat32 reads a float32 value. |
| 253 func (d *Decoder) ReadFloat32() (float32, error) { | 249 func (d *Decoder) ReadFloat32() (float32, error) { |
| 254 bits, err := d.ReadUint32() | 250 bits, err := d.ReadUint32() |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 297 newEnd := uint64(oldEnd) + pointer | 293 newEnd := uint64(oldEnd) + pointer |
| 298 if newEnd >= uint64(len(d.buf)) { | 294 if newEnd >= uint64(len(d.buf)) { |
| 299 return 0, fmt.Errorf("trying to access out of range memory") | 295 return 0, fmt.Errorf("trying to access out of range memory") |
| 300 } | 296 } |
| 301 if newEnd < uint64(d.end) { | 297 if newEnd < uint64(d.end) { |
| 302 return 0, fmt.Errorf("trying to access memory out of order") | 298 return 0, fmt.Errorf("trying to access memory out of order") |
| 303 } | 299 } |
| 304 if newEnd%8 != 0 { | 300 if newEnd%8 != 0 { |
| 305 return 0, fmt.Errorf("incorrect pointer data alignment: %d", new
End) | 301 return 0, fmt.Errorf("incorrect pointer data alignment: %d", new
End) |
| 306 } | 302 } |
| 307 » d.claimData(int(newEnd) - d.end) | 303 » d.claimData(d.end - int(newEnd)) |
| 308 return pointer, nil | 304 return pointer, nil |
| 309 } | 305 } |
| 310 | 306 |
| 311 // ReadUntypedHandle reads an untyped handle. | 307 // ReadMessagePipeHandle reads a message pipe handle. |
| 312 func (d *Decoder) ReadUntypedHandle() (system.UntypedHandle, error) { | 308 func (d *Decoder) ReadMessagePipeHandle() (system.MessagePipeHandle, error) { |
| 313 handleIndex, err := d.ReadUint32() | 309 handleIndex, err := d.ReadUint32() |
| 314 if err != nil { | 310 if err != nil { |
| 315 return nil, err | 311 return nil, err |
| 316 } | 312 } |
| 317 » if handleIndex == ^uint32(0) { | 313 » untypedHandle, err := d.claimHandle(int(handleIndex)) |
| 318 » » return &InvalidHandle{}, nil | 314 » return untypedHandle.ToMessagePipeHandle(), err |
| 319 » } | |
| 320 » return d.claimHandle(int(handleIndex)) | |
| 321 } | 315 } |
| 322 | |
| 323 // ReadHandle reads a handle. | |
| 324 func (d *Decoder) ReadHandle() (system.Handle, error) { | |
| 325 return d.ReadUntypedHandle() | |
| 326 } | |
| 327 | |
| 328 // ReadMessagePipeHandle reads a message pipe handle. | |
| 329 func (d *Decoder) ReadMessagePipeHandle() (system.MessagePipeHandle, error) { | |
| 330 if handle, err := d.ReadUntypedHandle(); err != nil { | |
| 331 return nil, err | |
| 332 } else { | |
| 333 return handle.ToMessagePipeHandle(), nil | |
| 334 } | |
| 335 } | |
| 336 | |
| 337 // ReadConsumerHandle reads a data pipe consumer handle. | |
| 338 func (d *Decoder) ReadConsumerHandle() (system.ConsumerHandle, error) { | |
| 339 if handle, err := d.ReadUntypedHandle(); err != nil { | |
| 340 return nil, err | |
| 341 } else { | |
| 342 return handle.ToConsumerHandle(), nil | |
| 343 } | |
| 344 } | |
| 345 | |
| 346 // ReadProducerHandle reads a data pipe producer handle. | |
| 347 func (d *Decoder) ReadProducerHandle() (system.ProducerHandle, error) { | |
| 348 if handle, err := d.ReadUntypedHandle(); err != nil { | |
| 349 return nil, err | |
| 350 } else { | |
| 351 return handle.ToProducerHandle(), nil | |
| 352 } | |
| 353 } | |
| 354 | |
| 355 // ReadSharedBufferHandle reads a shared buffer handle. | |
| 356 func (d *Decoder) ReadSharedBufferHandle() (system.SharedBufferHandle, error) { | |
| 357 if handle, err := d.ReadUntypedHandle(); err != nil { | |
| 358 return nil, err | |
| 359 } else { | |
| 360 return handle.ToSharedBufferHandle(), nil | |
| 361 } | |
| 362 } | |
| OLD | NEW |