MCPcopy Create free account
hub / github.com/awslabs/llrt / read_buf

Function read_buf

modules/llrt_buffer/src/buffer.rs:692–791  ·  view source on GitHub ↗
(
    this: &This<Object<'js>>,
    ctx: &Ctx<'js>,
    offset: &Opt<usize>,
    endian: Endian,
    kind: NumberKind,
)

Source from the content-addressed store, hash-verified

690 (1i64 << (kind.bits() - 1)) - 1
691 } else {
692 bit_mask
693 };
694 let min_val = if kind.is_signed() { -max_val - 1 } else { 0 };
695
696 if int_val < min_val || int_val > max_val {
697 return Err(Exception::throw_range(ctx, "Value out of range"));
698 }
699
700 let masked = int_val & bit_mask;
701 (
702 (kind.bits() / 8) as usize,
703 shifted_bytes(masked as u64, kind.bits(), endian),
704 )
705 },
706 };
707
708 if offset >= this.0.len() || offset + byte_count > this.0.len() {
709 return Err(Exception::throw_range(
710 ctx,
711 "The specified offset is out of range",
712 ));
713 }
714
715 let target = ObjectBytes::from(ctx, this.0.as_inner())?;
716 let mut writable_length = 0;
717
718 if let Some((array_buffer, target_byte_length, target_byte_offset)) =
719 target.get_array_buffer()?
720 {
721 let target_bytes =
722 resolve_view_bytes(ctx, array_buffer, target_byte_length, target_byte_offset)?;
723
724 writable_length = offset + bytes.len();
725 target_bytes[offset..writable_length].copy_from_slice(&bytes);
726 }
727
728 Ok(writable_length)
729}
730
731fn read_buf<'js>(
732 this: &This<Object<'js>>,
733 ctx: &Ctx<'js>,
734 offset: &Opt<usize>,
735 endian: Endian,
736 kind: NumberKind,
737) -> Result<Value<'js>> {
738 // Retrieve the array buffer
739 let target = ObjectBytes::from(ctx, this.0.as_inner())?;
740 let Some((array_buffer, target_byte_length, target_byte_offset)) = target.get_array_buffer()?
741 else {
742 return Err(Exception::throw_message(ctx, ERROR_MSG_NOT_ARRAY_BUFFER));
743 };
744 let target_bytes =
745 resolve_view_bytes(ctx, array_buffer, target_byte_length, target_byte_offset)?;
746
747 // Enforce the bounds
748 let start = offset.0.unwrap_or_default();
749 let end = start + (kind.bits() / 8) as usize;

Callers 1

set_prototypeFunction · 0.85

Calls 5

fromFunction · 0.85
or_throwMethod · 0.80
bitsMethod · 0.80
get_array_bufferMethod · 0.45
cloneMethod · 0.45

Tested by

no test coverage detected