rocksdb-native 3.0.0 → 3.0.1

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
@@ -1043,6 +1043,23 @@ rocksdb_native_iterator_close(js_env_t *env, js_callback_info_t *info) {
1043
1043
  return NULL;
1044
1044
  }
1045
1045
 
1046
+ static int
1047
+ rocksdb_native_try_create_external_arraybuffer(js_env_t *env, void *data, size_t len, js_value_t **result) {
1048
+ // the external arraybuffer api is optional per (https://nodejs.org/api/n-api.html#napi_create_external_arraybuffer)
1049
+ // so provide a fallback that does a memcpy
1050
+ int err = js_create_external_arraybuffer(env, data, len, rocksdb_native__on_free, NULL, result);
1051
+ if (err == 0) return 0;
1052
+
1053
+ void* cpy;
1054
+ err = js_create_arraybuffer(env, len, &cpy, result);
1055
+ if (err != 0) return err;
1056
+
1057
+ memcpy(cpy, data, len);
1058
+ free(data);
1059
+
1060
+ return 0;
1061
+ }
1062
+
1046
1063
  static void
1047
1064
  rocksdb_native__on_iterator_read(rocksdb_iterator_t *handle, int status) {
1048
1065
  int err;
@@ -1102,7 +1119,7 @@ rocksdb_native__on_iterator_read(rocksdb_iterator_t *handle, int status) {
1102
1119
 
1103
1120
  rocksdb_slice_t *key = &req->keys[i];
1104
1121
 
1105
- err = js_create_external_arraybuffer(env, (void *) key->data, key->len, rocksdb_native__on_free, NULL, &result);
1122
+ err = rocksdb_native_try_create_external_arraybuffer(env, (void *) key->data, key->len, &result);
1106
1123
  assert(err == 0);
1107
1124
 
1108
1125
  err = js_set_element(env, keys, i, result);
@@ -1110,7 +1127,7 @@ rocksdb_native__on_iterator_read(rocksdb_iterator_t *handle, int status) {
1110
1127
 
1111
1128
  rocksdb_slice_t *value = &req->values[i];
1112
1129
 
1113
- err = js_create_external_arraybuffer(env, (void *) value->data, value->len, rocksdb_native__on_free, NULL, &result);
1130
+ err = rocksdb_native_try_create_external_arraybuffer(env, (void *) value->data, value->len, &result);
1114
1131
  assert(err == 0);
1115
1132
 
1116
1133
  err = js_set_element(env, values, i, result);
@@ -1265,7 +1282,7 @@ rocksdb_native__on_read(rocksdb_read_batch_t *handle, int status) {
1265
1282
  } else {
1266
1283
  rocksdb_slice_t *slice = &req->reads[i].value;
1267
1284
 
1268
- err = js_create_external_arraybuffer(env, (void *) slice->data, slice->len, rocksdb_native__on_free, NULL, &result);
1285
+ err = rocksdb_native_try_create_external_arraybuffer(env, (void *) slice->data, slice->len, &result);
1269
1286
  assert(err == 0);
1270
1287
 
1271
1288
  err = js_set_element(env, values, i, result);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "rocksdb-native",
3
- "version": "3.0.0",
3
+ "version": "3.0.1",
4
4
  "description": "librocksdb bindings for JavaScript",
5
5
  "exports": {
6
6
  ".": "./index.js",