@@ -222,9 +222,18 @@ void registerInterop(napi_env env, napi_value global) {
222
222
.attributes = napi_enumerable,
223
223
.data = nullptr ,
224
224
},
225
+ {
226
+ .utf8name = " stringFromCString" ,
227
+ .method = interop_stringFromCString,
228
+ .getter = nullptr ,
229
+ .setter = nullptr ,
230
+ .value = nullptr ,
231
+ .attributes = napi_enumerable,
232
+ .data = nullptr ,
233
+ },
225
234
};
226
235
227
- napi_define_properties (env, interop, 12 , properties);
236
+ napi_define_properties (env, interop, 13 , properties);
228
237
229
238
napi_set_named_property (env, global, " interop" , interop);
230
239
}
@@ -325,6 +334,42 @@ napi_value interop_free(napi_env env, napi_callback_info info) {
325
334
return nullptr ;
326
335
}
327
336
337
+ napi_value interop_stringFromCString (napi_env env, napi_callback_info info) {
338
+ napi_value arg;
339
+ size_t argc = 1 ;
340
+ napi_get_cb_info (env, info, &argc, &arg, nullptr , nullptr );
341
+
342
+ napi_valuetype type;
343
+ napi_typeof (env, arg, &type);
344
+
345
+ if (type != napi_object) {
346
+ napi_throw_type_error (env, " TypeError" , " Expected an object" );
347
+ return nullptr ;
348
+ }
349
+
350
+ void *data = nullptr ;
351
+
352
+ if (Pointer::isInstance (env, arg)) {
353
+ Pointer *ptr = Pointer::unwrap (env, arg);
354
+ data = ptr->data ;
355
+ }
356
+
357
+ if (Reference::isInstance (env, arg)) {
358
+ Reference *ref = Reference::unwrap (env, arg);
359
+ data = ref->data ;
360
+ }
361
+
362
+ napi_value result;
363
+
364
+ if (data == nullptr ) {
365
+ napi_get_null (env, &result);
366
+ } else {
367
+ napi_create_string_utf8 (env, (const char *)data, NAPI_AUTO_LENGTH, &result);
368
+ }
369
+
370
+ return result;
371
+ }
372
+
328
373
size_t jsSizeof (napi_env env, napi_value arg) {
329
374
napi_valuetype type;
330
375
napi_typeof (env, arg, &type);
0 commit comments