bare-buffer 3.1.3 → 3.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/binding.c CHANGED
@@ -7,8 +7,6 @@
7
7
  #include <string.h>
8
8
  #include <utf.h>
9
9
 
10
- static js_type_tag_t bare_buffer__tag = {0xfea3e944b70b0812, 0xe53bb5c343c040b6};
11
-
12
10
  static inline int
13
11
  bare_buffer__memcmp(void *a, size_t a_len, void *b, size_t b_len) {
14
12
  int r = memcmp(a, b, a_len < b_len ? a_len : b_len);
@@ -23,7 +21,7 @@ bare_buffer__memcmp(void *a, size_t a_len, void *b, size_t b_len) {
23
21
  }
24
22
 
25
23
  static void
26
- bare_buffer__on_free_string(js_env_t *env, void *data, void *finalize_hint) {
24
+ bare_buffer__on_finalize_string(js_env_t *env, void *data, void *finalize_hint) {
27
25
  free(data);
28
26
  }
29
27
 
@@ -39,8 +37,8 @@ bare_buffer_alloc(js_env_t *env, js_callback_info_t *info) {
39
37
 
40
38
  assert(argc == 1);
41
39
 
42
- uint32_t len;
43
- err = js_get_value_uint32(env, argv[0], &len);
40
+ int64_t len;
41
+ err = js_get_value_int64(env, argv[0], &len);
44
42
  assert(err == 0);
45
43
 
46
44
  js_value_t *result;
@@ -62,8 +60,8 @@ bare_buffer_alloc_unsafe(js_env_t *env, js_callback_info_t *info) {
62
60
 
63
61
  assert(argc == 1);
64
62
 
65
- uint32_t len;
66
- err = js_get_value_uint32(env, argv[0], &len);
63
+ int64_t len;
64
+ err = js_get_value_int64(env, argv[0], &len);
67
65
  assert(err == 0);
68
66
 
69
67
  js_value_t *result;
@@ -73,7 +71,7 @@ bare_buffer_alloc_unsafe(js_env_t *env, js_callback_info_t *info) {
73
71
  return result;
74
72
  }
75
73
 
76
- static uint32_t
74
+ static int64_t
77
75
  bare_buffer_typed_byte_length_utf8(js_value_t *receiver, js_value_t *str, js_typed_callback_info_t *info) {
78
76
  int err;
79
77
 
@@ -85,7 +83,7 @@ bare_buffer_typed_byte_length_utf8(js_value_t *receiver, js_value_t *str, js_typ
85
83
  err = js_get_value_string_utf8(env, str, NULL, 0, &str_len);
86
84
  assert(err == 0);
87
85
 
88
- return (uint32_t) str_len;
86
+ return str_len;
89
87
  }
90
88
 
91
89
  static js_value_t *
@@ -105,7 +103,7 @@ bare_buffer_byte_length_utf8(js_env_t *env, js_callback_info_t *info) {
105
103
  assert(err == 0);
106
104
 
107
105
  js_value_t *result;
108
- err = js_create_uint32(env, (uint32_t) str_len, &result);
106
+ err = js_create_int64(env, str_len, &result);
109
107
  assert(err == 0);
110
108
 
111
109
  return result;
@@ -115,76 +113,89 @@ static js_value_t *
115
113
  bare_buffer_to_string_utf8(js_env_t *env, js_callback_info_t *info) {
116
114
  int err;
117
115
 
118
- size_t argc = 1;
119
- js_value_t *argv[1];
116
+ size_t argc = 3;
117
+ js_value_t *argv[3];
120
118
 
121
119
  err = js_get_callback_info(env, info, &argc, argv, NULL, NULL);
122
120
  assert(err == 0);
123
121
 
124
- assert(argc == 1);
122
+ assert(argc == 3);
125
123
 
126
124
  utf8_t *buf;
127
- size_t buf_len;
128
- err = js_get_typedarray_info(env, argv[0], NULL, (void **) &buf, &buf_len, NULL, NULL);
125
+ err = js_get_arraybuffer_info(env, argv[0], (void **) &buf, NULL);
126
+ assert(err == 0);
127
+
128
+ int64_t offset;
129
+ err = js_get_value_int64(env, argv[1], &offset);
130
+ assert(err == 0);
131
+
132
+ int64_t len;
133
+ err = js_get_value_int64(env, argv[2], &len);
129
134
  assert(err == 0);
130
135
 
131
136
  js_value_t *result;
132
- err = js_create_string_utf8(env, buf, buf_len, &result);
137
+ err = js_create_string_utf8(env, &buf[offset], len, &result);
133
138
  assert(err == 0);
134
139
 
135
140
  return result;
136
141
  }
137
142
 
138
- static uint32_t
139
- bare_buffer_typed_write_utf8(js_value_t *receiver, js_value_t *typedarray, js_value_t *string, js_typed_callback_info_t *info) {
143
+ static int64_t
144
+ bare_buffer_typed_write_utf8(
145
+ js_value_t *receiver,
146
+ js_value_t *handle,
147
+ int64_t offset,
148
+ int64_t len,
149
+ js_value_t *string,
150
+ js_typed_callback_info_t *info
151
+ ) {
140
152
  int err;
141
153
 
142
154
  js_env_t *env;
143
155
  err = js_get_typed_callback_info(info, &env, NULL);
144
156
  assert(err == 0);
145
157
 
146
- js_handle_scope_t *scope;
147
- err = js_open_handle_scope(env, &scope);
148
- assert(err == 0);
149
-
150
- void *buf;
151
- size_t buf_len;
152
- err = js_get_typedarray_info(env, typedarray, NULL, &buf, &buf_len, NULL, NULL);
158
+ utf8_t *buf;
159
+ err = js_get_arraybuffer_info(env, handle, (void **) &buf, NULL);
153
160
  assert(err == 0);
154
161
 
155
162
  size_t str_len;
156
- err = js_get_value_string_utf8(env, string, buf, buf_len, &str_len);
163
+ err = js_get_value_string_utf8(env, string, &buf[offset], len, &str_len);
157
164
  assert(err == 0);
158
165
 
159
- err = js_close_handle_scope(env, scope);
160
- assert(err == 0);
161
-
162
- return (uint32_t) str_len;
166
+ return str_len;
163
167
  }
164
168
 
165
169
  static js_value_t *
166
170
  bare_buffer_write_utf8(js_env_t *env, js_callback_info_t *info) {
167
171
  int err;
168
172
 
169
- size_t argc = 2;
170
- js_value_t *argv[2];
173
+ size_t argc = 4;
174
+ js_value_t *argv[4];
171
175
 
172
176
  err = js_get_callback_info(env, info, &argc, argv, NULL, NULL);
173
177
  assert(err == 0);
174
178
 
175
- assert(argc == 2);
179
+ assert(argc == 4);
180
+
181
+ utf8_t *buf;
182
+ err = js_get_arraybuffer_info(env, argv[0], (void **) &buf, NULL);
183
+ assert(err == 0);
184
+
185
+ int64_t offset;
186
+ err = js_get_value_int64(env, argv[1], &offset);
187
+ assert(err == 0);
176
188
 
177
- void *buf;
178
- size_t buf_len;
179
- err = js_get_typedarray_info(env, argv[0], NULL, &buf, &buf_len, NULL, NULL);
189
+ int64_t len;
190
+ err = js_get_value_int64(env, argv[2], &len);
180
191
  assert(err == 0);
181
192
 
182
193
  size_t str_len;
183
- err = js_get_value_string_utf8(env, argv[1], buf, buf_len, &str_len);
194
+ err = js_get_value_string_utf8(env, argv[3], &buf[offset], len, &str_len);
184
195
  assert(err == 0);
185
196
 
186
197
  js_value_t *result;
187
- err = js_create_uint32(env, (uint32_t) str_len, &result);
198
+ err = js_create_int64(env, str_len, &result);
188
199
  assert(err == 0);
189
200
 
190
201
  return result;
@@ -194,86 +205,102 @@ static js_value_t *
194
205
  bare_buffer_to_string_utf16le(js_env_t *env, js_callback_info_t *info) {
195
206
  int err;
196
207
 
197
- size_t argc = 1;
198
- js_value_t *argv[1];
208
+ size_t argc = 3;
209
+ js_value_t *argv[3];
199
210
 
200
211
  err = js_get_callback_info(env, info, &argc, argv, NULL, NULL);
201
212
  assert(err == 0);
202
213
 
203
- assert(argc == 1);
214
+ assert(argc == 3);
204
215
 
205
216
  utf16_t *buf;
206
- size_t buf_len;
207
- err = js_get_typedarray_info(env, argv[0], NULL, (void **) &buf, &buf_len, NULL, NULL);
217
+ err = js_get_arraybuffer_info(env, argv[0], (void **) &buf, NULL);
218
+ assert(err == 0);
219
+
220
+ int64_t offset;
221
+ err = js_get_value_int64(env, argv[1], &offset);
222
+ assert(err == 0);
223
+
224
+ int64_t len;
225
+ err = js_get_value_int64(env, argv[2], &len);
208
226
  assert(err == 0);
209
227
 
210
- buf_len /= sizeof(utf16_t);
228
+ offset /= sizeof(utf16_t);
229
+ len /= sizeof(utf16_t);
211
230
 
212
231
  js_value_t *result;
213
- err = js_create_string_utf16le(env, buf, buf_len, &result);
232
+ err = js_create_string_utf16le(env, &buf[offset], len, &result);
214
233
  assert(err == 0);
215
234
 
216
235
  return result;
217
236
  }
218
237
 
219
- static uint32_t
220
- bare_buffer_typed_write_utf16le(js_value_t *receiver, js_value_t *typedarray, js_value_t *string, js_typed_callback_info_t *info) {
238
+ static int64_t
239
+ bare_buffer_typed_write_utf16le(
240
+ js_value_t *receiver,
241
+ js_value_t *handle,
242
+ int64_t offset,
243
+ int64_t len,
244
+ js_value_t *string,
245
+ js_typed_callback_info_t *info
246
+ ) {
221
247
  int err;
222
248
 
223
249
  js_env_t *env;
224
250
  err = js_get_typed_callback_info(info, &env, NULL);
225
251
  assert(err == 0);
226
252
 
227
- js_handle_scope_t *scope;
228
- err = js_open_handle_scope(env, &scope);
229
- assert(err == 0);
230
-
231
- void *buf;
232
- size_t buf_len;
233
- err = js_get_typedarray_info(env, typedarray, NULL, &buf, &buf_len, NULL, NULL);
253
+ utf16_t *buf;
254
+ err = js_get_arraybuffer_info(env, handle, (void **) &buf, NULL);
234
255
  assert(err == 0);
235
256
 
236
- buf_len /= sizeof(utf16_t);
257
+ offset /= sizeof(utf16_t);
258
+ len /= sizeof(utf16_t);
237
259
 
238
260
  size_t str_len;
239
- err = js_get_value_string_utf16le(env, string, buf, buf_len, &str_len);
261
+ err = js_get_value_string_utf16le(env, string, &buf[offset], len, &str_len);
240
262
  assert(err == 0);
241
263
 
242
264
  str_len *= sizeof(utf16_t);
243
265
 
244
- err = js_close_handle_scope(env, scope);
245
- assert(err == 0);
246
-
247
- return (uint32_t) str_len;
266
+ return str_len;
248
267
  }
249
268
 
250
269
  static js_value_t *
251
270
  bare_buffer_write_utf16le(js_env_t *env, js_callback_info_t *info) {
252
271
  int err;
253
272
 
254
- size_t argc = 2;
255
- js_value_t *argv[2];
273
+ size_t argc = 4;
274
+ js_value_t *argv[4];
256
275
 
257
276
  err = js_get_callback_info(env, info, &argc, argv, NULL, NULL);
258
277
  assert(err == 0);
259
278
 
260
- assert(argc == 2);
279
+ assert(argc == 4);
261
280
 
262
- void *buf;
263
- size_t buf_len;
264
- err = js_get_typedarray_info(env, argv[0], NULL, &buf, &buf_len, NULL, NULL);
281
+ utf16_t *buf;
282
+ err = js_get_arraybuffer_info(env, argv[0], (void **) &buf, NULL);
283
+ assert(err == 0);
284
+
285
+ int64_t offset;
286
+ err = js_get_value_int64(env, argv[1], &offset);
287
+ assert(err == 0);
288
+
289
+ int64_t len;
290
+ err = js_get_value_int64(env, argv[2], &len);
265
291
  assert(err == 0);
266
292
 
267
- buf_len /= sizeof(utf16_t);
293
+ offset /= sizeof(utf16_t);
294
+ len /= sizeof(utf16_t);
268
295
 
269
296
  size_t str_len;
270
- err = js_get_value_string_utf16le(env, argv[1], buf, buf_len, &str_len);
297
+ err = js_get_value_string_utf16le(env, argv[3], &buf[offset], len, &str_len);
271
298
  assert(err == 0);
272
299
 
273
300
  str_len *= sizeof(utf16_t);
274
301
 
275
302
  js_value_t *result;
276
- err = js_create_uint32(env, (uint32_t) str_len, &result);
303
+ err = js_create_int64(env, str_len, &result);
277
304
  assert(err == 0);
278
305
 
279
306
  return result;
@@ -283,76 +310,89 @@ static js_value_t *
283
310
  bare_buffer_to_string_latin1(js_env_t *env, js_callback_info_t *info) {
284
311
  int err;
285
312
 
286
- size_t argc = 1;
287
- js_value_t *argv[1];
313
+ size_t argc = 3;
314
+ js_value_t *argv[3];
288
315
 
289
316
  err = js_get_callback_info(env, info, &argc, argv, NULL, NULL);
290
317
  assert(err == 0);
291
318
 
292
- assert(argc == 1);
319
+ assert(argc == 3);
293
320
 
294
321
  latin1_t *buf;
295
- size_t buf_len;
296
- err = js_get_typedarray_info(env, argv[0], NULL, (void **) &buf, &buf_len, NULL, NULL);
322
+ err = js_get_arraybuffer_info(env, argv[0], (void **) &buf, NULL);
323
+ assert(err == 0);
324
+
325
+ int64_t offset;
326
+ err = js_get_value_int64(env, argv[1], &offset);
327
+ assert(err == 0);
328
+
329
+ int64_t len;
330
+ err = js_get_value_int64(env, argv[2], &len);
297
331
  assert(err == 0);
298
332
 
299
333
  js_value_t *result;
300
- err = js_create_string_latin1(env, buf, buf_len, &result);
334
+ err = js_create_string_latin1(env, &buf[offset], len, &result);
301
335
  assert(err == 0);
302
336
 
303
337
  return result;
304
338
  }
305
339
 
306
- static uint32_t
307
- bare_buffer_typed_write_latin1(js_value_t *receiver, js_value_t *typedarray, js_value_t *string, js_typed_callback_info_t *info) {
340
+ static int64_t
341
+ bare_buffer_typed_write_latin1(
342
+ js_value_t *receiver,
343
+ js_value_t *handle,
344
+ int64_t offset,
345
+ int64_t len,
346
+ js_value_t *string,
347
+ js_typed_callback_info_t *info
348
+ ) {
308
349
  int err;
309
350
 
310
351
  js_env_t *env;
311
352
  err = js_get_typed_callback_info(info, &env, NULL);
312
353
  assert(err == 0);
313
354
 
314
- js_handle_scope_t *scope;
315
- err = js_open_handle_scope(env, &scope);
316
- assert(err == 0);
317
-
318
- void *buf;
319
- size_t buf_len;
320
- err = js_get_typedarray_info(env, typedarray, NULL, &buf, &buf_len, NULL, NULL);
355
+ latin1_t *buf;
356
+ err = js_get_arraybuffer_info(env, handle, (void **) &buf, NULL);
321
357
  assert(err == 0);
322
358
 
323
359
  size_t str_len;
324
- err = js_get_value_string_latin1(env, string, buf, buf_len, &str_len);
360
+ err = js_get_value_string_latin1(env, string, &buf[offset], len, &str_len);
325
361
  assert(err == 0);
326
362
 
327
- err = js_close_handle_scope(env, scope);
328
- assert(err == 0);
329
-
330
- return (uint32_t) str_len;
363
+ return str_len;
331
364
  }
332
365
 
333
366
  static js_value_t *
334
367
  bare_buffer_write_latin1(js_env_t *env, js_callback_info_t *info) {
335
368
  int err;
336
369
 
337
- size_t argc = 2;
338
- js_value_t *argv[2];
370
+ size_t argc = 4;
371
+ js_value_t *argv[4];
339
372
 
340
373
  err = js_get_callback_info(env, info, &argc, argv, NULL, NULL);
341
374
  assert(err == 0);
342
375
 
343
- assert(argc == 2);
376
+ assert(argc == 4);
377
+
378
+ latin1_t *buf;
379
+ err = js_get_arraybuffer_info(env, argv[0], (void **) &buf, NULL);
380
+ assert(err == 0);
344
381
 
345
- void *buf;
346
- size_t buf_len;
347
- err = js_get_typedarray_info(env, argv[0], NULL, &buf, &buf_len, NULL, NULL);
382
+ int64_t offset;
383
+ err = js_get_value_int64(env, argv[1], &offset);
384
+ assert(err == 0);
385
+
386
+ int64_t len;
387
+ err = js_get_value_int64(env, argv[2], &len);
348
388
  assert(err == 0);
349
389
 
350
390
  size_t str_len;
351
- err = js_get_value_string_latin1(env, argv[1], buf, buf_len, &str_len);
391
+ err = js_get_value_string_latin1(env, argv[3], &buf[offset], len, &str_len);
352
392
  assert(err == 0);
353
393
 
354
394
  js_value_t *result;
355
- err = js_create_uint32(env, (uint32_t) str_len, &result);
395
+ err = js_create_int64(env, str_len, &result);
356
396
  assert(err == 0);
357
397
 
358
398
  return result;
@@ -362,49 +402,58 @@ static js_value_t *
362
402
  bare_buffer_to_string_base64(js_env_t *env, js_callback_info_t *info) {
363
403
  int err;
364
404
 
365
- size_t argc = 1;
366
- js_value_t *argv[1];
405
+ size_t argc = 3;
406
+ js_value_t *argv[3];
367
407
 
368
408
  err = js_get_callback_info(env, info, &argc, argv, NULL, NULL);
369
409
  assert(err == 0);
370
410
 
371
- assert(argc == 1);
411
+ assert(argc == 3);
372
412
 
373
- void *buf;
374
- size_t buf_len;
375
- err = js_get_typedarray_info(env, argv[0], NULL, &buf, &buf_len, NULL, NULL);
413
+ utf8_t *buf;
414
+ err = js_get_arraybuffer_info(env, argv[0], (void **) &buf, NULL);
415
+ assert(err == 0);
416
+
417
+ int64_t offset;
418
+ err = js_get_value_int64(env, argv[1], &offset);
419
+ assert(err == 0);
420
+
421
+ int64_t len;
422
+ err = js_get_value_int64(env, argv[2], &len);
376
423
  assert(err == 0);
377
424
 
378
425
  size_t str_len;
379
- err = base64_encode_utf8(buf, buf_len, NULL, &str_len);
426
+ err = base64_encode_utf8(&buf[offset], len, NULL, &str_len);
380
427
  assert(err == 0);
381
428
 
382
429
  utf8_t *str = malloc(str_len);
383
- err = base64_encode_utf8(buf, buf_len, str, &str_len);
430
+ err = base64_encode_utf8(&buf[offset], len, str, &str_len);
384
431
  assert(err == 0);
385
432
 
386
433
  js_value_t *result;
387
- err = js_create_external_string_latin1(env, str, str_len, bare_buffer__on_free_string, NULL, &result, NULL);
434
+ err = js_create_external_string_latin1(env, str, str_len, bare_buffer__on_finalize_string, NULL, &result, NULL);
388
435
  assert(err == 0);
389
436
 
390
437
  return result;
391
438
  }
392
439
 
393
- static uint32_t
394
- bare_buffer_typed_write_base64(js_value_t *receiver, js_value_t *typedarray, js_value_t *string, js_typed_callback_info_t *info) {
440
+ static int64_t
441
+ bare_buffer_typed_write_base64(
442
+ js_value_t *receiver,
443
+ js_value_t *handle,
444
+ int64_t offset,
445
+ int64_t len,
446
+ js_value_t *string,
447
+ js_typed_callback_info_t *info
448
+ ) {
395
449
  int err;
396
450
 
397
451
  js_env_t *env;
398
452
  err = js_get_typed_callback_info(info, &env, NULL);
399
453
  assert(err == 0);
400
454
 
401
- js_handle_scope_t *scope;
402
- err = js_open_handle_scope(env, &scope);
403
- assert(err == 0);
404
-
405
- void *buf;
406
- size_t buf_len;
407
- err = js_get_typedarray_info(env, typedarray, NULL, &buf, &buf_len, NULL, NULL);
455
+ utf8_t *buf;
456
+ err = js_get_arraybuffer_info(env, handle, (void **) &buf, NULL);
408
457
  assert(err == 0);
409
458
 
410
459
  js_string_encoding_t encoding;
@@ -415,38 +464,44 @@ bare_buffer_typed_write_base64(js_value_t *receiver, js_value_t *typedarray, js_
415
464
  err = js_get_string_view(env, string, &encoding, &str, &str_len, &str_view);
416
465
  assert(err == 0);
417
466
 
467
+ size_t written = len;
468
+
418
469
  if (encoding == js_utf16le) {
419
- err = base64_decode_utf16le(str, str_len, buf, &buf_len);
470
+ err = base64_decode_utf16le(str, str_len, &buf[offset], &written);
420
471
  assert(err == 0);
421
472
  } else {
422
- err = base64_decode_utf8(str, str_len, buf, &buf_len);
473
+ err = base64_decode_utf8(str, str_len, &buf[offset], &written);
423
474
  assert(err == 0);
424
475
  }
425
476
 
426
477
  err = js_release_string_view(env, str_view);
427
478
  assert(err == 0);
428
479
 
429
- err = js_close_handle_scope(env, scope);
430
- assert(err == 0);
431
-
432
- return buf_len;
480
+ return written;
433
481
  }
434
482
 
435
483
  static js_value_t *
436
484
  bare_buffer_write_base64(js_env_t *env, js_callback_info_t *info) {
437
485
  int err;
438
486
 
439
- size_t argc = 2;
440
- js_value_t *argv[2];
487
+ size_t argc = 4;
488
+ js_value_t *argv[4];
441
489
 
442
490
  err = js_get_callback_info(env, info, &argc, argv, NULL, NULL);
443
491
  assert(err == 0);
444
492
 
445
- assert(argc == 2);
493
+ assert(argc == 4);
494
+
495
+ utf8_t *buf;
496
+ err = js_get_arraybuffer_info(env, argv[0], (void **) &buf, NULL);
497
+ assert(err == 0);
498
+
499
+ int64_t offset;
500
+ err = js_get_value_int64(env, argv[1], &offset);
501
+ assert(err == 0);
446
502
 
447
- void *buf;
448
- size_t buf_len;
449
- err = js_get_typedarray_info(env, argv[0], NULL, &buf, &buf_len, NULL, NULL);
503
+ int64_t len;
504
+ err = js_get_value_int64(env, argv[2], &len);
450
505
  assert(err == 0);
451
506
 
452
507
  js_string_encoding_t encoding;
@@ -454,14 +509,16 @@ bare_buffer_write_base64(js_env_t *env, js_callback_info_t *info) {
454
509
  size_t str_len;
455
510
 
456
511
  js_string_view_t *str_view;
457
- err = js_get_string_view(env, argv[1], &encoding, &str, &str_len, &str_view);
512
+ err = js_get_string_view(env, argv[3], &encoding, &str, &str_len, &str_view);
458
513
  assert(err == 0);
459
514
 
515
+ size_t written = len;
516
+
460
517
  if (encoding == js_utf16le) {
461
- err = base64_decode_utf16le(str, str_len, buf, &buf_len);
518
+ err = base64_decode_utf16le(str, str_len, &buf[offset], &written);
462
519
  assert(err == 0);
463
520
  } else {
464
- err = base64_decode_utf8(str, str_len, buf, &buf_len);
521
+ err = base64_decode_utf8(str, str_len, &buf[offset], &written);
465
522
  assert(err == 0);
466
523
  }
467
524
 
@@ -469,7 +526,7 @@ bare_buffer_write_base64(js_env_t *env, js_callback_info_t *info) {
469
526
  assert(err == 0);
470
527
 
471
528
  js_value_t *result;
472
- err = js_create_uint32(env, (uint32_t) buf_len, &result);
529
+ err = js_create_int64(env, written, &result);
473
530
  assert(err == 0);
474
531
 
475
532
  return result;
@@ -479,49 +536,58 @@ static js_value_t *
479
536
  bare_buffer_to_string_hex(js_env_t *env, js_callback_info_t *info) {
480
537
  int err;
481
538
 
482
- size_t argc = 1;
483
- js_value_t *argv[1];
539
+ size_t argc = 3;
540
+ js_value_t *argv[3];
484
541
 
485
542
  err = js_get_callback_info(env, info, &argc, argv, NULL, NULL);
486
543
  assert(err == 0);
487
544
 
488
- assert(argc == 1);
545
+ assert(argc == 3);
546
+
547
+ utf8_t *buf;
548
+ err = js_get_arraybuffer_info(env, argv[0], (void **) &buf, NULL);
549
+ assert(err == 0);
489
550
 
490
- void *buf;
491
- size_t buf_len;
492
- err = js_get_typedarray_info(env, argv[0], NULL, &buf, &buf_len, NULL, NULL);
551
+ int64_t offset;
552
+ err = js_get_value_int64(env, argv[1], &offset);
553
+ assert(err == 0);
554
+
555
+ int64_t len;
556
+ err = js_get_value_int64(env, argv[2], &len);
493
557
  assert(err == 0);
494
558
 
495
559
  size_t str_len;
496
- err = hex_encode_utf8(buf, buf_len, NULL, &str_len);
560
+ err = hex_encode_utf8(&buf[offset], len, NULL, &str_len);
497
561
  assert(err == 0);
498
562
 
499
563
  utf8_t *str = malloc(str_len);
500
- err = hex_encode_utf8(buf, buf_len, str, &str_len);
564
+ err = hex_encode_utf8(&buf[offset], len, str, &str_len);
501
565
  assert(err == 0);
502
566
 
503
567
  js_value_t *result;
504
- err = js_create_external_string_latin1(env, str, str_len, bare_buffer__on_free_string, NULL, &result, NULL);
568
+ err = js_create_external_string_latin1(env, str, str_len, bare_buffer__on_finalize_string, NULL, &result, NULL);
505
569
  assert(err == 0);
506
570
 
507
571
  return result;
508
572
  }
509
573
 
510
- static uint32_t
511
- bare_buffer_typed_write_hex(js_value_t *receiver, js_value_t *typedarray, js_value_t *string, js_typed_callback_info_t *info) {
574
+ static int64_t
575
+ bare_buffer_typed_write_hex(
576
+ js_value_t *receiver,
577
+ js_value_t *handle,
578
+ int64_t offset,
579
+ int64_t len,
580
+ js_value_t *string,
581
+ js_typed_callback_info_t *info
582
+ ) {
512
583
  int err;
513
584
 
514
585
  js_env_t *env;
515
586
  err = js_get_typed_callback_info(info, &env, NULL);
516
587
  assert(err == 0);
517
588
 
518
- js_handle_scope_t *scope;
519
- err = js_open_handle_scope(env, &scope);
520
- assert(err == 0);
521
-
522
- void *buf;
523
- size_t buf_len;
524
- err = js_get_typedarray_info(env, typedarray, NULL, &buf, &buf_len, NULL, NULL);
589
+ utf8_t *buf;
590
+ err = js_get_arraybuffer_info(env, handle, (void **) &buf, NULL);
525
591
  assert(err == 0);
526
592
 
527
593
  js_string_encoding_t encoding;
@@ -532,38 +598,44 @@ bare_buffer_typed_write_hex(js_value_t *receiver, js_value_t *typedarray, js_val
532
598
  err = js_get_string_view(env, string, &encoding, &str, &str_len, &str_view);
533
599
  assert(err == 0);
534
600
 
601
+ size_t written = len;
602
+
535
603
  if (encoding == js_utf16le) {
536
- err = hex_decode_utf16le(str, str_len, buf, &buf_len);
604
+ err = hex_decode_utf16le(str, str_len, &buf[offset], &written);
537
605
  assert(err == 0);
538
606
  } else {
539
- err = hex_decode_utf8(str, str_len, buf, &buf_len);
607
+ err = hex_decode_utf8(str, str_len, &buf[offset], &written);
540
608
  assert(err == 0);
541
609
  }
542
610
 
543
611
  err = js_release_string_view(env, str_view);
544
612
  assert(err == 0);
545
613
 
546
- err = js_close_handle_scope(env, scope);
547
- assert(err == 0);
548
-
549
- return buf_len;
614
+ return written;
550
615
  }
551
616
 
552
617
  static js_value_t *
553
618
  bare_buffer_write_hex(js_env_t *env, js_callback_info_t *info) {
554
619
  int err;
555
620
 
556
- size_t argc = 2;
557
- js_value_t *argv[2];
621
+ size_t argc = 4;
622
+ js_value_t *argv[4];
558
623
 
559
624
  err = js_get_callback_info(env, info, &argc, argv, NULL, NULL);
560
625
  assert(err == 0);
561
626
 
562
- assert(argc == 2);
627
+ assert(argc == 4);
628
+
629
+ utf8_t *buf;
630
+ err = js_get_arraybuffer_info(env, argv[0], (void **) &buf, NULL);
631
+ assert(err == 0);
563
632
 
564
- void *buf;
565
- size_t buf_len;
566
- err = js_get_typedarray_info(env, argv[0], NULL, &buf, &buf_len, NULL, NULL);
633
+ int64_t offset;
634
+ err = js_get_value_int64(env, argv[1], &offset);
635
+ assert(err == 0);
636
+
637
+ int64_t len;
638
+ err = js_get_value_int64(env, argv[2], &len);
567
639
  assert(err == 0);
568
640
 
569
641
  js_string_encoding_t encoding;
@@ -571,14 +643,16 @@ bare_buffer_write_hex(js_env_t *env, js_callback_info_t *info) {
571
643
  size_t str_len;
572
644
 
573
645
  js_string_view_t *str_view;
574
- err = js_get_string_view(env, argv[1], &encoding, &str, &str_len, &str_view);
646
+ err = js_get_string_view(env, argv[3], &encoding, &str, &str_len, &str_view);
575
647
  assert(err == 0);
576
648
 
649
+ size_t written = len;
650
+
577
651
  if (encoding == js_utf16le) {
578
- err = hex_decode_utf16le(str, str_len, buf, &buf_len);
652
+ err = hex_decode_utf16le(str, str_len, &buf[offset], &written);
579
653
  assert(err == 0);
580
654
  } else {
581
- err = hex_decode_utf8(str, str_len, buf, &buf_len);
655
+ err = hex_decode_utf8(str, str_len, &buf[offset], &written);
582
656
  assert(err == 0);
583
657
  }
584
658
 
@@ -586,7 +660,7 @@ bare_buffer_write_hex(js_env_t *env, js_callback_info_t *info) {
586
660
  assert(err == 0);
587
661
 
588
662
  js_value_t *result;
589
- err = js_create_uint32(env, (uint32_t) buf_len, &result);
663
+ err = js_create_int64(env, written, &result);
590
664
  assert(err == 0);
591
665
 
592
666
  return result;
@@ -596,11 +670,11 @@ static int32_t
596
670
  bare_buffer_typed_compare(
597
671
  js_value_t *receiver,
598
672
  js_value_t *a_handle,
599
- uint32_t a_offset,
600
- uint32_t a_len,
673
+ int64_t a_offset,
674
+ int64_t a_len,
601
675
  js_value_t *b_handle,
602
- uint32_t b_offset,
603
- uint32_t b_len,
676
+ int64_t b_offset,
677
+ int64_t b_len,
604
678
  js_typed_callback_info_t *info
605
679
  ) {
606
680
  int err;
@@ -609,12 +683,12 @@ bare_buffer_typed_compare(
609
683
  err = js_get_typed_callback_info(info, &env, NULL);
610
684
  assert(err == 0);
611
685
 
612
- void *a;
613
- err = js_get_arraybuffer_info(env, a_handle, &a, NULL);
686
+ uint8_t *a;
687
+ err = js_get_arraybuffer_info(env, a_handle, (void **) &a, NULL);
614
688
  assert(err == 0);
615
689
 
616
- void *b;
617
- err = js_get_arraybuffer_info(env, b_handle, &b, NULL);
690
+ uint8_t *b;
691
+ err = js_get_arraybuffer_info(env, b_handle, (void **) &b, NULL);
618
692
  assert(err == 0);
619
693
 
620
694
  return bare_buffer__memcmp(&a[a_offset], a_len, &b[b_offset], b_len);
@@ -632,28 +706,28 @@ bare_buffer_compare(js_env_t *env, js_callback_info_t *info) {
632
706
 
633
707
  assert(argc == 6);
634
708
 
635
- void *a;
636
- err = js_get_arraybuffer_info(env, argv[0], &a, NULL);
709
+ uint8_t *a;
710
+ err = js_get_arraybuffer_info(env, argv[0], (void **) &a, NULL);
637
711
  assert(err == 0);
638
712
 
639
- uint32_t a_offset;
640
- err = js_get_value_uint32(env, argv[1], &a_offset);
713
+ int64_t a_offset;
714
+ err = js_get_value_int64(env, argv[1], &a_offset);
641
715
  assert(err == 0);
642
716
 
643
- uint32_t a_len;
644
- err = js_get_value_uint32(env, argv[2], &a_len);
717
+ int64_t a_len;
718
+ err = js_get_value_int64(env, argv[2], &a_len);
645
719
  assert(err == 0);
646
720
 
647
- void *b;
648
- err = js_get_arraybuffer_info(env, argv[3], &b, NULL);
721
+ uint8_t *b;
722
+ err = js_get_arraybuffer_info(env, argv[3], (void **) &b, NULL);
649
723
  assert(err == 0);
650
724
 
651
- uint32_t b_offset;
652
- err = js_get_value_uint32(env, argv[4], &b_offset);
725
+ int64_t b_offset;
726
+ err = js_get_value_int64(env, argv[4], &b_offset);
653
727
  assert(err == 0);
654
728
 
655
- uint32_t b_len;
656
- err = js_get_value_uint32(env, argv[5], &b_len);
729
+ int64_t b_len;
730
+ err = js_get_value_int64(env, argv[5], &b_len);
657
731
  assert(err == 0);
658
732
 
659
733
  js_value_t *result;
@@ -664,49 +738,39 @@ bare_buffer_compare(js_env_t *env, js_callback_info_t *info) {
664
738
  }
665
739
 
666
740
  static js_value_t *
667
- bare_buffer_tag(js_env_t *env, js_callback_info_t *info) {
741
+ bare_buffer_exports(js_env_t *env, js_value_t *exports) {
668
742
  int err;
669
743
 
670
- size_t argc = 1;
671
- js_value_t *argv[1];
672
-
673
- err = js_get_callback_info(env, info, &argc, argv, NULL, NULL);
744
+ js_value_t *constants;
745
+ err = js_create_object(env, &constants);
674
746
  assert(err == 0);
675
747
 
676
- assert(argc == 1);
677
-
678
- err = js_add_type_tag(env, argv[0], &bare_buffer__tag);
748
+ err = js_set_named_property(env, exports, "constants", constants);
679
749
  assert(err == 0);
680
750
 
681
- return NULL;
682
- }
683
-
684
- static js_value_t *
685
- bare_buffer_is_tagged(js_env_t *env, js_callback_info_t *info) {
686
- int err;
687
-
688
- size_t argc = 1;
689
- js_value_t *argv[1];
690
-
691
- err = js_get_callback_info(env, info, &argc, argv, NULL, NULL);
751
+ js_platform_t *platform;
752
+ err = js_get_env_platform(env, &platform);
692
753
  assert(err == 0);
693
754
 
694
- assert(argc == 1);
695
-
696
- bool is_tagged;
697
- err = js_check_type_tag(env, argv[0], &bare_buffer__tag, &is_tagged);
698
- assert(err == 0);
755
+ js_platform_limits_t limits = {
756
+ .version = 0,
757
+ };
699
758
 
700
- js_value_t *result;
701
- err = js_get_boolean(env, is_tagged, &result);
759
+ err = js_get_platform_limits(platform, &limits);
702
760
  assert(err == 0);
703
761
 
704
- return result;
705
- }
762
+ #define V(name, value) \
763
+ { \
764
+ js_value_t *val; \
765
+ err = js_create_int64(env, value, &val); \
766
+ assert(err == 0); \
767
+ err = js_set_named_property(env, constants, name, val); \
768
+ assert(err == 0); \
769
+ }
706
770
 
707
- static js_value_t *
708
- bare_buffer_exports(js_env_t *env, js_value_t *exports) {
709
- int err;
771
+ V("MAX_LENGTH", limits.arraybuffer_length);
772
+ V("MAX_STRING_LENGTH", limits.string_length);
773
+ #undef V
710
774
 
711
775
  #define V(name, untyped, signature, typed) \
712
776
  { \
@@ -731,7 +795,7 @@ bare_buffer_exports(js_env_t *env, js_value_t *exports) {
731
795
  bare_buffer_byte_length_utf8,
732
796
  &((js_callback_signature_t) {
733
797
  .version = 0,
734
- .result = js_uint32,
798
+ .result = js_int64,
735
799
  .args_len = 2,
736
800
  .args = (int[]) {
737
801
  js_object,
@@ -748,11 +812,13 @@ bare_buffer_exports(js_env_t *env, js_value_t *exports) {
748
812
  bare_buffer_write_utf8,
749
813
  &((js_callback_signature_t) {
750
814
  .version = 0,
751
- .result = js_uint32,
752
- .args_len = 3,
815
+ .result = js_int64,
816
+ .args_len = 5,
753
817
  .args = (int[]) {
754
818
  js_object,
755
819
  js_object,
820
+ js_int64,
821
+ js_int64,
756
822
  js_string,
757
823
  }
758
824
  }),
@@ -766,7 +832,7 @@ bare_buffer_exports(js_env_t *env, js_value_t *exports) {
766
832
  bare_buffer_write_utf16le,
767
833
  &((js_callback_signature_t) {
768
834
  .version = 0,
769
- .result = js_uint32,
835
+ .result = js_int64,
770
836
  .args_len = 3,
771
837
  .args = (int[]) {
772
838
  js_object,
@@ -784,11 +850,13 @@ bare_buffer_exports(js_env_t *env, js_value_t *exports) {
784
850
  bare_buffer_write_latin1,
785
851
  &((js_callback_signature_t) {
786
852
  .version = 0,
787
- .result = js_uint32,
788
- .args_len = 3,
853
+ .result = js_int64,
854
+ .args_len = 5,
789
855
  .args = (int[]) {
790
856
  js_object,
791
857
  js_object,
858
+ js_int64,
859
+ js_int64,
792
860
  js_string,
793
861
  }
794
862
  }),
@@ -802,11 +870,13 @@ bare_buffer_exports(js_env_t *env, js_value_t *exports) {
802
870
  bare_buffer_write_base64,
803
871
  &((js_callback_signature_t) {
804
872
  .version = 0,
805
- .result = js_uint32,
806
- .args_len = 3,
873
+ .result = js_int64,
874
+ .args_len = 5,
807
875
  .args = (int[]) {
808
876
  js_object,
809
877
  js_object,
878
+ js_int64,
879
+ js_int64,
810
880
  js_string,
811
881
  }
812
882
  }),
@@ -820,11 +890,13 @@ bare_buffer_exports(js_env_t *env, js_value_t *exports) {
820
890
  bare_buffer_write_hex,
821
891
  &((js_callback_signature_t) {
822
892
  .version = 0,
823
- .result = js_uint32,
824
- .args_len = 3,
893
+ .result = js_int64,
894
+ .args_len = 5,
825
895
  .args = (int[]) {
826
896
  js_object,
827
897
  js_object,
898
+ js_int64,
899
+ js_int64,
828
900
  js_string,
829
901
  }
830
902
  }),
@@ -841,19 +913,15 @@ bare_buffer_exports(js_env_t *env, js_value_t *exports) {
841
913
  .args = (int[]) {
842
914
  js_object,
843
915
  js_object,
844
- js_uint32,
845
- js_uint32,
916
+ js_int64,
917
+ js_int64,
846
918
  js_object,
847
- js_uint32,
848
- js_uint32,
919
+ js_int64,
920
+ js_int64,
849
921
  }
850
922
  }),
851
923
  bare_buffer_typed_compare
852
924
  );
853
-
854
- V("tag", bare_buffer_tag, NULL, NULL);
855
-
856
- V("isTagged", bare_buffer_is_tagged, NULL, NULL);
857
925
  #undef V
858
926
 
859
927
  return exports;
package/index.js CHANGED
@@ -7,11 +7,13 @@ const utf16le = require('./lib/utf16le')
7
7
  const latin1 = require('./lib/latin1')
8
8
  const binding = require('./binding')
9
9
 
10
+ const kind = Symbol.for('bare.buffer.kind')
11
+
10
12
  let poolSize = 0
11
13
 
12
14
  module.exports = exports = class Buffer extends Uint8Array {
13
- static {
14
- binding.tag(this)
15
+ static get [kind]() {
16
+ return 0 // Compatibility version
15
17
  }
16
18
 
17
19
  static get poolSize() {
@@ -60,8 +62,8 @@ module.exports = exports = class Buffer extends Uint8Array {
60
62
  super(arrayBuffer, offset, length)
61
63
  }
62
64
 
63
- [Symbol.species]() {
64
- return Buffer
65
+ get [kind]() {
66
+ return Buffer[kind]
65
67
  }
66
68
 
67
69
  copy(target, targetStart = 0, sourceStart = 0, sourceEnd = this.byteLength) {
@@ -562,17 +564,10 @@ function viewOf(buffer) {
562
564
 
563
565
  exports.isBuffer = function isBuffer(value) {
564
566
  if (value instanceof Buffer) return true
565
- if (typeof value !== 'object' || value === null) return false
566
-
567
- let constructor = value.constructor
568
-
569
- while (typeof constructor === 'function') {
570
- if (binding.isTagged(constructor)) return true
571
567
 
572
- constructor = Reflect.getPrototypeOf(constructor)
573
- }
574
-
575
- return false
568
+ return (
569
+ typeof value === 'object' && value !== null && value[kind] === Buffer[kind]
570
+ )
576
571
  }
577
572
 
578
573
  exports.isEncoding = function isEncoding(encoding) {
package/lib/base64.js CHANGED
@@ -9,6 +9,19 @@ exports.byteLength = function byteLength(string) {
9
9
  return (len * 3) >>> 2
10
10
  }
11
11
 
12
- exports.toString = binding.toStringBase64
12
+ exports.toString = function toString(buffer) {
13
+ return binding.toStringBase64(
14
+ buffer.buffer,
15
+ buffer.byteOffset,
16
+ buffer.byteLength
17
+ )
18
+ }
13
19
 
14
- exports.write = binding.writeBase64
20
+ exports.write = function write(buffer, string) {
21
+ return binding.writeBase64(
22
+ buffer.buffer,
23
+ buffer.byteOffset,
24
+ buffer.byteLength,
25
+ string
26
+ )
27
+ }
package/lib/constants.js CHANGED
@@ -1,4 +1,3 @@
1
- module.exports = {
2
- MAX_LENGTH: 2 ** 32 - 1, // 4 GiB
3
- MAX_STRING_LENGTH: 2 ** 28 - 16 // ~512 MiB, lowest common limit
4
- }
1
+ const binding = require('../binding')
2
+
3
+ module.exports = binding.constants
package/lib/hex.js CHANGED
@@ -4,6 +4,19 @@ exports.byteLength = function byteLength(string) {
4
4
  return string.length >>> 1
5
5
  }
6
6
 
7
- exports.toString = binding.toStringHex
7
+ exports.toString = function toString(buffer) {
8
+ return binding.toStringHex(
9
+ buffer.buffer,
10
+ buffer.byteOffset,
11
+ buffer.byteLength
12
+ )
13
+ }
8
14
 
9
- exports.write = binding.writeHex
15
+ exports.write = function write(buffer, string) {
16
+ return binding.writeHex(
17
+ buffer.buffer,
18
+ buffer.byteOffset,
19
+ buffer.byteLength,
20
+ string
21
+ )
22
+ }
package/lib/latin1.js CHANGED
@@ -4,6 +4,19 @@ exports.byteLength = function byteLength(string) {
4
4
  return string.length
5
5
  }
6
6
 
7
- exports.toString = binding.toStringLatin1
7
+ exports.toString = function toString(buffer) {
8
+ return binding.toStringLatin1(
9
+ buffer.buffer,
10
+ buffer.byteOffset,
11
+ buffer.byteLength
12
+ )
13
+ }
8
14
 
9
- exports.write = binding.writeLatin1
15
+ exports.write = function write(buffer, string) {
16
+ return binding.writeLatin1(
17
+ buffer.buffer,
18
+ buffer.byteOffset,
19
+ buffer.byteLength,
20
+ string
21
+ )
22
+ }
package/lib/utf16le.js CHANGED
@@ -4,6 +4,19 @@ exports.byteLength = function byteLength(string) {
4
4
  return string.length * 2
5
5
  }
6
6
 
7
- exports.toString = binding.toStringUTF16LE
7
+ exports.toString = function toString(buffer) {
8
+ return binding.toStringUTF16LE(
9
+ buffer.buffer,
10
+ buffer.byteOffset,
11
+ buffer.byteLength
12
+ )
13
+ }
8
14
 
9
- exports.write = binding.writeUTF16LE
15
+ exports.write = function write(buffer, string) {
16
+ return binding.writeUTF16LE(
17
+ buffer.buffer,
18
+ buffer.byteOffset,
19
+ buffer.byteLength,
20
+ string
21
+ )
22
+ }
package/lib/utf8.js CHANGED
@@ -1,7 +1,22 @@
1
1
  const binding = require('../binding')
2
2
 
3
- exports.byteLength = binding.byteLengthUTF8
3
+ exports.byteLength = function byteLength(string) {
4
+ return binding.byteLengthUTF8(string)
5
+ }
4
6
 
5
- exports.toString = binding.toStringUTF8
7
+ exports.toString = function toString(buffer) {
8
+ return binding.toStringUTF8(
9
+ buffer.buffer,
10
+ buffer.byteOffset,
11
+ buffer.byteLength
12
+ )
13
+ }
6
14
 
7
- exports.write = binding.writeUTF8
15
+ exports.write = function write(buffer, string) {
16
+ return binding.writeUTF8(
17
+ buffer.buffer,
18
+ buffer.byteOffset,
19
+ buffer.byteLength,
20
+ string
21
+ )
22
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "bare-buffer",
3
- "version": "3.1.3",
3
+ "version": "3.2.0",
4
4
  "description": "Native buffers for JavaScript",
5
5
  "exports": {
6
6
  "./package": "./package.json",
@@ -43,7 +43,7 @@
43
43
  },
44
44
  "homepage": "https://github.com/holepunchto/bare-buffer#readme",
45
45
  "engines": {
46
- "bare": ">=1.13.0"
46
+ "bare": ">=1.20.0"
47
47
  },
48
48
  "devDependencies": {
49
49
  "brittle": "^3.1.1",