• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 #include <stdio.h>
2 #include <node_api.h>
3 #include <assert.h>
4 #include <stdlib.h>
5 #include "../../js-native-api/common.h"
6 
7 #define BUFFER_SIZE 4
8 
9 int wrappedNativeData;
10 napi_ref ref;
WrapFinalizer(napi_env env,void * data,void * hint)11 void WrapFinalizer(napi_env env, void* data, void* hint) {
12   uint32_t count;
13   NAPI_CALL_RETURN_VOID(env, napi_reference_unref(env, ref, &count));
14   NAPI_CALL_RETURN_VOID(env, napi_delete_reference(env, ref));
15 }
16 
BufferFinalizer(napi_env env,void * data,void * hint)17 void BufferFinalizer(napi_env env, void* data, void* hint) {
18   free(hint);
19 }
20 
Test(napi_env env,napi_callback_info info)21 napi_value Test(napi_env env, napi_callback_info info) {
22   size_t argc = 1;
23   napi_value argv[1];
24   napi_value result;
25   void* bufferData = malloc(BUFFER_SIZE);
26 
27   NAPI_CALL(env, napi_get_cb_info(env, info, &argc, argv, NULL, NULL));
28   NAPI_CALL(env, napi_create_external_buffer(env, BUFFER_SIZE, bufferData, BufferFinalizer, bufferData, &result));
29   NAPI_CALL(env, napi_create_reference(env, result, 1, &ref));
30   NAPI_CALL(env, napi_wrap(env, argv[0], (void*) &wrappedNativeData, WrapFinalizer, NULL, NULL));
31   return NULL;
32 }
33 
Init(napi_env env,napi_value exports)34 napi_value Init(napi_env env, napi_value exports) {
35   napi_property_descriptor properties[] = {
36     DECLARE_NAPI_PROPERTY("Test", Test)
37   };
38 
39   NAPI_CALL(env, napi_define_properties(
40       env, exports, sizeof(properties) / sizeof(*properties), properties));
41 
42   return exports;
43 }
44 
45 // Do not start using NAPI_MODULE_INIT() here, so that we can test
46 // compatibility of Workers with NAPI_MODULE().
47 NAPI_MODULE(NODE_GYP_MODULE_NAME, Init)
48