MCPcopy Create free account
hub / github.com/Moddable-OpenSource/moddable / _xsmcGetViewBuffer

Function _xsmcGetViewBuffer

xs/sources/xsmc.c:257–280  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

255#endif
256
257static txInteger _xsmcGetViewBuffer(txMachine *the, txSlot* view, txSlot* buffer, void **data, txUnsigned *count, txBoolean writable)
258{
259 txInteger offset = view->value.dataView.offset;
260 txInteger size = view->value.dataView.size;
261 txSlot* arrayBuffer = buffer->value.reference->next;
262 txSlot* bufferInfo = arrayBuffer->next;
263 if (arrayBuffer->value.arrayBuffer.address == C_NULL)
264 mxTypeError("detached buffer");
265 if (writable && (arrayBuffer->flag & XS_DONT_SET_FLAG))
266 mxTypeError("read-only buffer");
267 if (bufferInfo->value.bufferInfo.maxLength >= 0) {
268 txInteger byteLength = bufferInfo->value.bufferInfo.length;
269 if (offset > byteLength)
270 mxTypeError("out of bounds view");
271 if (size < 0)
272 size = byteLength - offset;
273 else if (offset + size > byteLength)
274 mxTypeError("out of bounds view");
275 }
276 *data = arrayBuffer->value.arrayBuffer.address + offset;
277 *count = size;
278
279 return (XS_ARRAY_BUFFER_KIND == arrayBuffer->kind) ? xsBufferRelocatable : xsBufferNonrelocatable;
280}
281
282txInteger _xsmcGetBuffer(txMachine *the, txSlot *slot, void **data, txUnsigned *count, txBoolean writable)
283{

Callers 1

_xsmcGetBufferFunction · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected