bare-buffer 3.1.4 → 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
@@ -21,7 +21,7 @@ bare_buffer__memcmp(void *a, size_t a_len, void *b, size_t b_len) {
21
21
  }
22
22
 
23
23
  static void
24
- 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) {
25
25
  free(data);
26
26
  }
27
27
 
@@ -37,8 +37,8 @@ bare_buffer_alloc(js_env_t *env, js_callback_info_t *info) {
37
37
 
38
38
  assert(argc == 1);
39
39
 
40
- uint32_t len;
41
- err = js_get_value_uint32(env, argv[0], &len);
40
+ int64_t len;
41
+ err = js_get_value_int64(env, argv[0], &len);
42
42
  assert(err == 0);
43
43
 
44
44
  js_value_t *result;
@@ -60,8 +60,8 @@ bare_buffer_alloc_unsafe(js_env_t *env, js_callback_info_t *info) {
60
60
 
61
61
  assert(argc == 1);
62
62
 
63
- uint32_t len;
64
- err = js_get_value_uint32(env, argv[0], &len);
63
+ int64_t len;
64
+ err = js_get_value_int64(env, argv[0], &len);
65
65
  assert(err == 0);
66
66
 
67
67
  js_value_t *result;
@@ -71,7 +71,7 @@ bare_buffer_alloc_unsafe(js_env_t *env, js_callback_info_t *info) {
71
71
  return result;
72
72
  }
73
73
 
74
- static uint32_t
74
+ static int64_t
75
75
  bare_buffer_typed_byte_length_utf8(js_value_t *receiver, js_value_t *str, js_typed_callback_info_t *info) {
76
76
  int err;
77
77
 
@@ -83,7 +83,7 @@ bare_buffer_typed_byte_length_utf8(js_value_t *receiver, js_value_t *str, js_typ
83
83
  err = js_get_value_string_utf8(env, str, NULL, 0, &str_len);
84
84
  assert(err == 0);
85
85
 
86
- return (uint32_t) str_len;
86
+ return str_len;
87
87
  }
88
88
 
89
89
  static js_value_t *
@@ -103,7 +103,7 @@ bare_buffer_byte_length_utf8(js_env_t *env, js_callback_info_t *info) {
103
103
  assert(err == 0);
104
104
 
105
105
  js_value_t *result;
106
- err = js_create_uint32(env, (uint32_t) str_len, &result);
106
+ err = js_create_int64(env, str_len, &result);
107
107
  assert(err == 0);
108
108
 
109
109
  return result;
@@ -113,76 +113,89 @@ static js_value_t *
113
113
  bare_buffer_to_string_utf8(js_env_t *env, js_callback_info_t *info) {
114
114
  int err;
115
115
 
116
- size_t argc = 1;
117
- js_value_t *argv[1];
116
+ size_t argc = 3;
117
+ js_value_t *argv[3];
118
118
 
119
119
  err = js_get_callback_info(env, info, &argc, argv, NULL, NULL);
120
120
  assert(err == 0);
121
121
 
122
- assert(argc == 1);
122
+ assert(argc == 3);
123
123
 
124
124
  utf8_t *buf;
125
- size_t buf_len;
126
- 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);
127
134
  assert(err == 0);
128
135
 
129
136
  js_value_t *result;
130
- err = js_create_string_utf8(env, buf, buf_len, &result);
137
+ err = js_create_string_utf8(env, &buf[offset], len, &result);
131
138
  assert(err == 0);
132
139
 
133
140
  return result;
134
141
  }
135
142
 
136
- static uint32_t
137
- 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
+ ) {
138
152
  int err;
139
153
 
140
154
  js_env_t *env;
141
155
  err = js_get_typed_callback_info(info, &env, NULL);
142
156
  assert(err == 0);
143
157
 
144
- js_handle_scope_t *scope;
145
- err = js_open_handle_scope(env, &scope);
146
- assert(err == 0);
147
-
148
- void *buf;
149
- size_t buf_len;
150
- 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);
151
160
  assert(err == 0);
152
161
 
153
162
  size_t str_len;
154
- err = js_get_value_string_utf8(env, string, buf, buf_len, &str_len);
155
- assert(err == 0);
156
-
157
- err = js_close_handle_scope(env, scope);
163
+ err = js_get_value_string_utf8(env, string, &buf[offset], len, &str_len);
158
164
  assert(err == 0);
159
165
 
160
- return (uint32_t) str_len;
166
+ return str_len;
161
167
  }
162
168
 
163
169
  static js_value_t *
164
170
  bare_buffer_write_utf8(js_env_t *env, js_callback_info_t *info) {
165
171
  int err;
166
172
 
167
- size_t argc = 2;
168
- js_value_t *argv[2];
173
+ size_t argc = 4;
174
+ js_value_t *argv[4];
169
175
 
170
176
  err = js_get_callback_info(env, info, &argc, argv, NULL, NULL);
171
177
  assert(err == 0);
172
178
 
173
- 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);
174
188
 
175
- void *buf;
176
- size_t buf_len;
177
- 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);
178
191
  assert(err == 0);
179
192
 
180
193
  size_t str_len;
181
- 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);
182
195
  assert(err == 0);
183
196
 
184
197
  js_value_t *result;
185
- err = js_create_uint32(env, (uint32_t) str_len, &result);
198
+ err = js_create_int64(env, str_len, &result);
186
199
  assert(err == 0);
187
200
 
188
201
  return result;
@@ -192,86 +205,102 @@ static js_value_t *
192
205
  bare_buffer_to_string_utf16le(js_env_t *env, js_callback_info_t *info) {
193
206
  int err;
194
207
 
195
- size_t argc = 1;
196
- js_value_t *argv[1];
208
+ size_t argc = 3;
209
+ js_value_t *argv[3];
197
210
 
198
211
  err = js_get_callback_info(env, info, &argc, argv, NULL, NULL);
199
212
  assert(err == 0);
200
213
 
201
- assert(argc == 1);
214
+ assert(argc == 3);
202
215
 
203
216
  utf16_t *buf;
204
- size_t buf_len;
205
- 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);
206
226
  assert(err == 0);
207
227
 
208
- buf_len /= sizeof(utf16_t);
228
+ offset /= sizeof(utf16_t);
229
+ len /= sizeof(utf16_t);
209
230
 
210
231
  js_value_t *result;
211
- err = js_create_string_utf16le(env, buf, buf_len, &result);
232
+ err = js_create_string_utf16le(env, &buf[offset], len, &result);
212
233
  assert(err == 0);
213
234
 
214
235
  return result;
215
236
  }
216
237
 
217
- static uint32_t
218
- 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
+ ) {
219
247
  int err;
220
248
 
221
249
  js_env_t *env;
222
250
  err = js_get_typed_callback_info(info, &env, NULL);
223
251
  assert(err == 0);
224
252
 
225
- js_handle_scope_t *scope;
226
- err = js_open_handle_scope(env, &scope);
227
- assert(err == 0);
228
-
229
- void *buf;
230
- size_t buf_len;
231
- 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);
232
255
  assert(err == 0);
233
256
 
234
- buf_len /= sizeof(utf16_t);
257
+ offset /= sizeof(utf16_t);
258
+ len /= sizeof(utf16_t);
235
259
 
236
260
  size_t str_len;
237
- 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);
238
262
  assert(err == 0);
239
263
 
240
264
  str_len *= sizeof(utf16_t);
241
265
 
242
- err = js_close_handle_scope(env, scope);
243
- assert(err == 0);
244
-
245
- return (uint32_t) str_len;
266
+ return str_len;
246
267
  }
247
268
 
248
269
  static js_value_t *
249
270
  bare_buffer_write_utf16le(js_env_t *env, js_callback_info_t *info) {
250
271
  int err;
251
272
 
252
- size_t argc = 2;
253
- js_value_t *argv[2];
273
+ size_t argc = 4;
274
+ js_value_t *argv[4];
254
275
 
255
276
  err = js_get_callback_info(env, info, &argc, argv, NULL, NULL);
256
277
  assert(err == 0);
257
278
 
258
- assert(argc == 2);
279
+ assert(argc == 4);
280
+
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);
259
288
 
260
- void *buf;
261
- size_t buf_len;
262
- err = js_get_typedarray_info(env, argv[0], NULL, &buf, &buf_len, NULL, NULL);
289
+ int64_t len;
290
+ err = js_get_value_int64(env, argv[2], &len);
263
291
  assert(err == 0);
264
292
 
265
- buf_len /= sizeof(utf16_t);
293
+ offset /= sizeof(utf16_t);
294
+ len /= sizeof(utf16_t);
266
295
 
267
296
  size_t str_len;
268
- 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);
269
298
  assert(err == 0);
270
299
 
271
300
  str_len *= sizeof(utf16_t);
272
301
 
273
302
  js_value_t *result;
274
- err = js_create_uint32(env, (uint32_t) str_len, &result);
303
+ err = js_create_int64(env, str_len, &result);
275
304
  assert(err == 0);
276
305
 
277
306
  return result;
@@ -281,76 +310,89 @@ static js_value_t *
281
310
  bare_buffer_to_string_latin1(js_env_t *env, js_callback_info_t *info) {
282
311
  int err;
283
312
 
284
- size_t argc = 1;
285
- js_value_t *argv[1];
313
+ size_t argc = 3;
314
+ js_value_t *argv[3];
286
315
 
287
316
  err = js_get_callback_info(env, info, &argc, argv, NULL, NULL);
288
317
  assert(err == 0);
289
318
 
290
- assert(argc == 1);
319
+ assert(argc == 3);
291
320
 
292
321
  latin1_t *buf;
293
- size_t buf_len;
294
- 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);
295
331
  assert(err == 0);
296
332
 
297
333
  js_value_t *result;
298
- err = js_create_string_latin1(env, buf, buf_len, &result);
334
+ err = js_create_string_latin1(env, &buf[offset], len, &result);
299
335
  assert(err == 0);
300
336
 
301
337
  return result;
302
338
  }
303
339
 
304
- static uint32_t
305
- 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
+ ) {
306
349
  int err;
307
350
 
308
351
  js_env_t *env;
309
352
  err = js_get_typed_callback_info(info, &env, NULL);
310
353
  assert(err == 0);
311
354
 
312
- js_handle_scope_t *scope;
313
- err = js_open_handle_scope(env, &scope);
314
- assert(err == 0);
315
-
316
- void *buf;
317
- size_t buf_len;
318
- 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);
319
357
  assert(err == 0);
320
358
 
321
359
  size_t str_len;
322
- err = js_get_value_string_latin1(env, string, buf, buf_len, &str_len);
323
- assert(err == 0);
324
-
325
- err = js_close_handle_scope(env, scope);
360
+ err = js_get_value_string_latin1(env, string, &buf[offset], len, &str_len);
326
361
  assert(err == 0);
327
362
 
328
- return (uint32_t) str_len;
363
+ return str_len;
329
364
  }
330
365
 
331
366
  static js_value_t *
332
367
  bare_buffer_write_latin1(js_env_t *env, js_callback_info_t *info) {
333
368
  int err;
334
369
 
335
- size_t argc = 2;
336
- js_value_t *argv[2];
370
+ size_t argc = 4;
371
+ js_value_t *argv[4];
337
372
 
338
373
  err = js_get_callback_info(env, info, &argc, argv, NULL, NULL);
339
374
  assert(err == 0);
340
375
 
341
- 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);
381
+
382
+ int64_t offset;
383
+ err = js_get_value_int64(env, argv[1], &offset);
384
+ assert(err == 0);
342
385
 
343
- void *buf;
344
- size_t buf_len;
345
- err = js_get_typedarray_info(env, argv[0], NULL, &buf, &buf_len, NULL, NULL);
386
+ int64_t len;
387
+ err = js_get_value_int64(env, argv[2], &len);
346
388
  assert(err == 0);
347
389
 
348
390
  size_t str_len;
349
- 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);
350
392
  assert(err == 0);
351
393
 
352
394
  js_value_t *result;
353
- err = js_create_uint32(env, (uint32_t) str_len, &result);
395
+ err = js_create_int64(env, str_len, &result);
354
396
  assert(err == 0);
355
397
 
356
398
  return result;
@@ -360,49 +402,58 @@ static js_value_t *
360
402
  bare_buffer_to_string_base64(js_env_t *env, js_callback_info_t *info) {
361
403
  int err;
362
404
 
363
- size_t argc = 1;
364
- js_value_t *argv[1];
405
+ size_t argc = 3;
406
+ js_value_t *argv[3];
365
407
 
366
408
  err = js_get_callback_info(env, info, &argc, argv, NULL, NULL);
367
409
  assert(err == 0);
368
410
 
369
- assert(argc == 1);
411
+ assert(argc == 3);
370
412
 
371
- void *buf;
372
- size_t buf_len;
373
- 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);
374
423
  assert(err == 0);
375
424
 
376
425
  size_t str_len;
377
- err = base64_encode_utf8(buf, buf_len, NULL, &str_len);
426
+ err = base64_encode_utf8(&buf[offset], len, NULL, &str_len);
378
427
  assert(err == 0);
379
428
 
380
429
  utf8_t *str = malloc(str_len);
381
- err = base64_encode_utf8(buf, buf_len, str, &str_len);
430
+ err = base64_encode_utf8(&buf[offset], len, str, &str_len);
382
431
  assert(err == 0);
383
432
 
384
433
  js_value_t *result;
385
- 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);
386
435
  assert(err == 0);
387
436
 
388
437
  return result;
389
438
  }
390
439
 
391
- static uint32_t
392
- 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
+ ) {
393
449
  int err;
394
450
 
395
451
  js_env_t *env;
396
452
  err = js_get_typed_callback_info(info, &env, NULL);
397
453
  assert(err == 0);
398
454
 
399
- js_handle_scope_t *scope;
400
- err = js_open_handle_scope(env, &scope);
401
- assert(err == 0);
402
-
403
- void *buf;
404
- size_t buf_len;
405
- 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);
406
457
  assert(err == 0);
407
458
 
408
459
  js_string_encoding_t encoding;
@@ -413,38 +464,44 @@ bare_buffer_typed_write_base64(js_value_t *receiver, js_value_t *typedarray, js_
413
464
  err = js_get_string_view(env, string, &encoding, &str, &str_len, &str_view);
414
465
  assert(err == 0);
415
466
 
467
+ size_t written = len;
468
+
416
469
  if (encoding == js_utf16le) {
417
- err = base64_decode_utf16le(str, str_len, buf, &buf_len);
470
+ err = base64_decode_utf16le(str, str_len, &buf[offset], &written);
418
471
  assert(err == 0);
419
472
  } else {
420
- err = base64_decode_utf8(str, str_len, buf, &buf_len);
473
+ err = base64_decode_utf8(str, str_len, &buf[offset], &written);
421
474
  assert(err == 0);
422
475
  }
423
476
 
424
477
  err = js_release_string_view(env, str_view);
425
478
  assert(err == 0);
426
479
 
427
- err = js_close_handle_scope(env, scope);
428
- assert(err == 0);
429
-
430
- return buf_len;
480
+ return written;
431
481
  }
432
482
 
433
483
  static js_value_t *
434
484
  bare_buffer_write_base64(js_env_t *env, js_callback_info_t *info) {
435
485
  int err;
436
486
 
437
- size_t argc = 2;
438
- js_value_t *argv[2];
487
+ size_t argc = 4;
488
+ js_value_t *argv[4];
439
489
 
440
490
  err = js_get_callback_info(env, info, &argc, argv, NULL, NULL);
441
491
  assert(err == 0);
442
492
 
443
- 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);
444
502
 
445
- void *buf;
446
- size_t buf_len;
447
- 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);
448
505
  assert(err == 0);
449
506
 
450
507
  js_string_encoding_t encoding;
@@ -452,14 +509,16 @@ bare_buffer_write_base64(js_env_t *env, js_callback_info_t *info) {
452
509
  size_t str_len;
453
510
 
454
511
  js_string_view_t *str_view;
455
- 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);
456
513
  assert(err == 0);
457
514
 
515
+ size_t written = len;
516
+
458
517
  if (encoding == js_utf16le) {
459
- err = base64_decode_utf16le(str, str_len, buf, &buf_len);
518
+ err = base64_decode_utf16le(str, str_len, &buf[offset], &written);
460
519
  assert(err == 0);
461
520
  } else {
462
- err = base64_decode_utf8(str, str_len, buf, &buf_len);
521
+ err = base64_decode_utf8(str, str_len, &buf[offset], &written);
463
522
  assert(err == 0);
464
523
  }
465
524
 
@@ -467,7 +526,7 @@ bare_buffer_write_base64(js_env_t *env, js_callback_info_t *info) {
467
526
  assert(err == 0);
468
527
 
469
528
  js_value_t *result;
470
- err = js_create_uint32(env, (uint32_t) buf_len, &result);
529
+ err = js_create_int64(env, written, &result);
471
530
  assert(err == 0);
472
531
 
473
532
  return result;
@@ -477,49 +536,58 @@ static js_value_t *
477
536
  bare_buffer_to_string_hex(js_env_t *env, js_callback_info_t *info) {
478
537
  int err;
479
538
 
480
- size_t argc = 1;
481
- js_value_t *argv[1];
539
+ size_t argc = 3;
540
+ js_value_t *argv[3];
482
541
 
483
542
  err = js_get_callback_info(env, info, &argc, argv, NULL, NULL);
484
543
  assert(err == 0);
485
544
 
486
- 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);
550
+
551
+ int64_t offset;
552
+ err = js_get_value_int64(env, argv[1], &offset);
553
+ assert(err == 0);
487
554
 
488
- void *buf;
489
- size_t buf_len;
490
- err = js_get_typedarray_info(env, argv[0], NULL, &buf, &buf_len, NULL, NULL);
555
+ int64_t len;
556
+ err = js_get_value_int64(env, argv[2], &len);
491
557
  assert(err == 0);
492
558
 
493
559
  size_t str_len;
494
- err = hex_encode_utf8(buf, buf_len, NULL, &str_len);
560
+ err = hex_encode_utf8(&buf[offset], len, NULL, &str_len);
495
561
  assert(err == 0);
496
562
 
497
563
  utf8_t *str = malloc(str_len);
498
- err = hex_encode_utf8(buf, buf_len, str, &str_len);
564
+ err = hex_encode_utf8(&buf[offset], len, str, &str_len);
499
565
  assert(err == 0);
500
566
 
501
567
  js_value_t *result;
502
- 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);
503
569
  assert(err == 0);
504
570
 
505
571
  return result;
506
572
  }
507
573
 
508
- static uint32_t
509
- 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
+ ) {
510
583
  int err;
511
584
 
512
585
  js_env_t *env;
513
586
  err = js_get_typed_callback_info(info, &env, NULL);
514
587
  assert(err == 0);
515
588
 
516
- js_handle_scope_t *scope;
517
- err = js_open_handle_scope(env, &scope);
518
- assert(err == 0);
519
-
520
- void *buf;
521
- size_t buf_len;
522
- 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);
523
591
  assert(err == 0);
524
592
 
525
593
  js_string_encoding_t encoding;
@@ -530,38 +598,44 @@ bare_buffer_typed_write_hex(js_value_t *receiver, js_value_t *typedarray, js_val
530
598
  err = js_get_string_view(env, string, &encoding, &str, &str_len, &str_view);
531
599
  assert(err == 0);
532
600
 
601
+ size_t written = len;
602
+
533
603
  if (encoding == js_utf16le) {
534
- err = hex_decode_utf16le(str, str_len, buf, &buf_len);
604
+ err = hex_decode_utf16le(str, str_len, &buf[offset], &written);
535
605
  assert(err == 0);
536
606
  } else {
537
- err = hex_decode_utf8(str, str_len, buf, &buf_len);
607
+ err = hex_decode_utf8(str, str_len, &buf[offset], &written);
538
608
  assert(err == 0);
539
609
  }
540
610
 
541
611
  err = js_release_string_view(env, str_view);
542
612
  assert(err == 0);
543
613
 
544
- err = js_close_handle_scope(env, scope);
545
- assert(err == 0);
546
-
547
- return buf_len;
614
+ return written;
548
615
  }
549
616
 
550
617
  static js_value_t *
551
618
  bare_buffer_write_hex(js_env_t *env, js_callback_info_t *info) {
552
619
  int err;
553
620
 
554
- size_t argc = 2;
555
- js_value_t *argv[2];
621
+ size_t argc = 4;
622
+ js_value_t *argv[4];
556
623
 
557
624
  err = js_get_callback_info(env, info, &argc, argv, NULL, NULL);
558
625
  assert(err == 0);
559
626
 
560
- 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);
632
+
633
+ int64_t offset;
634
+ err = js_get_value_int64(env, argv[1], &offset);
635
+ assert(err == 0);
561
636
 
562
- void *buf;
563
- size_t buf_len;
564
- err = js_get_typedarray_info(env, argv[0], NULL, &buf, &buf_len, NULL, NULL);
637
+ int64_t len;
638
+ err = js_get_value_int64(env, argv[2], &len);
565
639
  assert(err == 0);
566
640
 
567
641
  js_string_encoding_t encoding;
@@ -569,14 +643,16 @@ bare_buffer_write_hex(js_env_t *env, js_callback_info_t *info) {
569
643
  size_t str_len;
570
644
 
571
645
  js_string_view_t *str_view;
572
- 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);
573
647
  assert(err == 0);
574
648
 
649
+ size_t written = len;
650
+
575
651
  if (encoding == js_utf16le) {
576
- err = hex_decode_utf16le(str, str_len, buf, &buf_len);
652
+ err = hex_decode_utf16le(str, str_len, &buf[offset], &written);
577
653
  assert(err == 0);
578
654
  } else {
579
- err = hex_decode_utf8(str, str_len, buf, &buf_len);
655
+ err = hex_decode_utf8(str, str_len, &buf[offset], &written);
580
656
  assert(err == 0);
581
657
  }
582
658
 
@@ -584,7 +660,7 @@ bare_buffer_write_hex(js_env_t *env, js_callback_info_t *info) {
584
660
  assert(err == 0);
585
661
 
586
662
  js_value_t *result;
587
- err = js_create_uint32(env, (uint32_t) buf_len, &result);
663
+ err = js_create_int64(env, written, &result);
588
664
  assert(err == 0);
589
665
 
590
666
  return result;
@@ -594,11 +670,11 @@ static int32_t
594
670
  bare_buffer_typed_compare(
595
671
  js_value_t *receiver,
596
672
  js_value_t *a_handle,
597
- uint32_t a_offset,
598
- uint32_t a_len,
673
+ int64_t a_offset,
674
+ int64_t a_len,
599
675
  js_value_t *b_handle,
600
- uint32_t b_offset,
601
- uint32_t b_len,
676
+ int64_t b_offset,
677
+ int64_t b_len,
602
678
  js_typed_callback_info_t *info
603
679
  ) {
604
680
  int err;
@@ -607,12 +683,12 @@ bare_buffer_typed_compare(
607
683
  err = js_get_typed_callback_info(info, &env, NULL);
608
684
  assert(err == 0);
609
685
 
610
- void *a;
611
- 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);
612
688
  assert(err == 0);
613
689
 
614
- void *b;
615
- 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);
616
692
  assert(err == 0);
617
693
 
618
694
  return bare_buffer__memcmp(&a[a_offset], a_len, &b[b_offset], b_len);
@@ -630,28 +706,28 @@ bare_buffer_compare(js_env_t *env, js_callback_info_t *info) {
630
706
 
631
707
  assert(argc == 6);
632
708
 
633
- void *a;
634
- 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);
635
711
  assert(err == 0);
636
712
 
637
- uint32_t a_offset;
638
- 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);
639
715
  assert(err == 0);
640
716
 
641
- uint32_t a_len;
642
- 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);
643
719
  assert(err == 0);
644
720
 
645
- void *b;
646
- 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);
647
723
  assert(err == 0);
648
724
 
649
- uint32_t b_offset;
650
- 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);
651
727
  assert(err == 0);
652
728
 
653
- uint32_t b_len;
654
- 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);
655
731
  assert(err == 0);
656
732
 
657
733
  js_value_t *result;
@@ -665,6 +741,37 @@ static js_value_t *
665
741
  bare_buffer_exports(js_env_t *env, js_value_t *exports) {
666
742
  int err;
667
743
 
744
+ js_value_t *constants;
745
+ err = js_create_object(env, &constants);
746
+ assert(err == 0);
747
+
748
+ err = js_set_named_property(env, exports, "constants", constants);
749
+ assert(err == 0);
750
+
751
+ js_platform_t *platform;
752
+ err = js_get_env_platform(env, &platform);
753
+ assert(err == 0);
754
+
755
+ js_platform_limits_t limits = {
756
+ .version = 0,
757
+ };
758
+
759
+ err = js_get_platform_limits(platform, &limits);
760
+ assert(err == 0);
761
+
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
+ }
770
+
771
+ V("MAX_LENGTH", limits.arraybuffer_length);
772
+ V("MAX_STRING_LENGTH", limits.string_length);
773
+ #undef V
774
+
668
775
  #define V(name, untyped, signature, typed) \
669
776
  { \
670
777
  js_value_t *val; \
@@ -688,7 +795,7 @@ bare_buffer_exports(js_env_t *env, js_value_t *exports) {
688
795
  bare_buffer_byte_length_utf8,
689
796
  &((js_callback_signature_t) {
690
797
  .version = 0,
691
- .result = js_uint32,
798
+ .result = js_int64,
692
799
  .args_len = 2,
693
800
  .args = (int[]) {
694
801
  js_object,
@@ -705,11 +812,13 @@ bare_buffer_exports(js_env_t *env, js_value_t *exports) {
705
812
  bare_buffer_write_utf8,
706
813
  &((js_callback_signature_t) {
707
814
  .version = 0,
708
- .result = js_uint32,
709
- .args_len = 3,
815
+ .result = js_int64,
816
+ .args_len = 5,
710
817
  .args = (int[]) {
711
818
  js_object,
712
819
  js_object,
820
+ js_int64,
821
+ js_int64,
713
822
  js_string,
714
823
  }
715
824
  }),
@@ -723,7 +832,7 @@ bare_buffer_exports(js_env_t *env, js_value_t *exports) {
723
832
  bare_buffer_write_utf16le,
724
833
  &((js_callback_signature_t) {
725
834
  .version = 0,
726
- .result = js_uint32,
835
+ .result = js_int64,
727
836
  .args_len = 3,
728
837
  .args = (int[]) {
729
838
  js_object,
@@ -741,11 +850,13 @@ bare_buffer_exports(js_env_t *env, js_value_t *exports) {
741
850
  bare_buffer_write_latin1,
742
851
  &((js_callback_signature_t) {
743
852
  .version = 0,
744
- .result = js_uint32,
745
- .args_len = 3,
853
+ .result = js_int64,
854
+ .args_len = 5,
746
855
  .args = (int[]) {
747
856
  js_object,
748
857
  js_object,
858
+ js_int64,
859
+ js_int64,
749
860
  js_string,
750
861
  }
751
862
  }),
@@ -759,11 +870,13 @@ bare_buffer_exports(js_env_t *env, js_value_t *exports) {
759
870
  bare_buffer_write_base64,
760
871
  &((js_callback_signature_t) {
761
872
  .version = 0,
762
- .result = js_uint32,
763
- .args_len = 3,
873
+ .result = js_int64,
874
+ .args_len = 5,
764
875
  .args = (int[]) {
765
876
  js_object,
766
877
  js_object,
878
+ js_int64,
879
+ js_int64,
767
880
  js_string,
768
881
  }
769
882
  }),
@@ -777,11 +890,13 @@ bare_buffer_exports(js_env_t *env, js_value_t *exports) {
777
890
  bare_buffer_write_hex,
778
891
  &((js_callback_signature_t) {
779
892
  .version = 0,
780
- .result = js_uint32,
781
- .args_len = 3,
893
+ .result = js_int64,
894
+ .args_len = 5,
782
895
  .args = (int[]) {
783
896
  js_object,
784
897
  js_object,
898
+ js_int64,
899
+ js_int64,
785
900
  js_string,
786
901
  }
787
902
  }),
@@ -798,11 +913,11 @@ bare_buffer_exports(js_env_t *env, js_value_t *exports) {
798
913
  .args = (int[]) {
799
914
  js_object,
800
915
  js_object,
801
- js_uint32,
802
- js_uint32,
916
+ js_int64,
917
+ js_int64,
803
918
  js_object,
804
- js_uint32,
805
- js_uint32,
919
+ js_int64,
920
+ js_int64,
806
921
  }
807
922
  }),
808
923
  bare_buffer_typed_compare
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.4",
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",