]> git.kaiwu.me - njs.git/commitdiff
QuickJS: accept ArrayBuffer as an arument for qjs_typed_array_data().
authorDmitry Volyntsev <xeioex@nginx.com>
Tue, 14 Jan 2025 06:00:10 +0000 (22:00 -0800)
committerDmitry Volyntsev <xeioexception@gmail.com>
Thu, 23 Jan 2025 00:05:47 +0000 (16:05 -0800)
src/qjs.c

index f9615668f83a98918f1d640211645f41a2ee5e00..487a03fc397a3739b0819a4ffe92040d50569d05 100644 (file)
--- a/src/qjs.c
+++ b/src/qjs.c
@@ -456,17 +456,25 @@ qjs_bytes_free(JSContext *ctx, qjs_bytes_t *bytes)
 JSValue
 qjs_typed_array_data(JSContext *ctx, JSValueConst value, njs_str_t *data)
 {
-    size_t  byte_offset, byte_length;
+    size_t   byte_offset, byte_length;
+    JSValue  ab;
+
+    /* TODO: DataView. */
 
-    value = JS_GetTypedArrayBuffer(ctx, value, &byte_offset, &byte_length,
+    ab = JS_GetTypedArrayBuffer(ctx, value, &byte_offset, &byte_length,
                                    NULL);
-    if (JS_IsException(value)) {
-        return value;
+    if (JS_IsException(ab)) {
+        data->start = JS_GetArrayBuffer(ctx, &data->length, value);
+        if (data->start == NULL) {
+            return JS_EXCEPTION;
+        }
+
+        return JS_UNDEFINED;
     }
 
-    data->start = JS_GetArrayBuffer(ctx, &data->length, value);
+    data->start = JS_GetArrayBuffer(ctx, &data->length, ab);
 
-    JS_FreeValue(ctx, value);
+    JS_FreeValue(ctx, ab);
 
     if (data->start == NULL) {
         return JS_EXCEPTION;