Skip to content

Commit e510ada

Browse files
committed
Refactor + fixed externel buffer
1 parent f5a7848 commit e510ada

File tree

2 files changed

+25
-12
lines changed

2 files changed

+25
-12
lines changed

packages/host/cpp/RuntimeNodeApi.cpp

Lines changed: 23 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,13 @@
33

44
auto ArrayType = napi_uint8_array;
55

6-
napi_status NAPI_CDECL callstack::nodeapihost::napi_create_buffer(
6+
namespace callstack::nodeapihost {
7+
8+
napi_status napi_create_buffer(
79
napi_env env, size_t length, void** data, napi_value* result) {
810
napi_value buffer;
9-
const auto status = napi_create_arraybuffer(env, length, data, &buffer);
10-
if (status != napi_ok) {
11+
if (const auto status = napi_create_arraybuffer(env, length, data, &buffer);
12+
status != napi_ok) {
1113
return status;
1214
}
1315

@@ -18,8 +20,7 @@ napi_status NAPI_CDECL callstack::nodeapihost::napi_create_buffer(
1820
return napi_create_typedarray(env, ArrayType, length, buffer, 0, result);
1921
}
2022

21-
napi_status NAPI_CDECL callstack::nodeapihost::napi_create_buffer_copy(
22-
napi_env env,
23+
napi_status napi_create_buffer_copy(napi_env env,
2324
size_t length,
2425
const void* data,
2526
void** result_data,
@@ -38,8 +39,7 @@ napi_status NAPI_CDECL callstack::nodeapihost::napi_create_buffer_copy(
3839
return napi_ok;
3940
}
4041

41-
napi_status callstack::nodeapihost::napi_is_buffer(
42-
napi_env env, napi_value value, bool* result) {
42+
napi_status napi_is_buffer(napi_env env, napi_value value, bool* result) {
4343
if (!result) {
4444
return napi_invalid_arg;
4545
}
@@ -74,7 +74,7 @@ napi_status callstack::nodeapihost::napi_is_buffer(
7474
return napi_ok;
7575
}
7676

77-
napi_status callstack::nodeapihost::napi_get_buffer_info(
77+
napi_status napi_get_buffer_info(
7878
napi_env env, napi_value value, void** data, size_t* length) {
7979
if (!data || !length) {
8080
return napi_invalid_arg;
@@ -101,12 +101,24 @@ napi_status callstack::nodeapihost::napi_get_buffer_info(
101101
return napi_ok;
102102
}
103103

104-
napi_status callstack::nodeapihost::napi_create_external_buffer(napi_env env,
104+
napi_status napi_create_external_buffer(napi_env env,
105105
size_t length,
106106
void* data,
107107
node_api_basic_finalize basic_finalize_cb,
108108
void* finalize_hint,
109109
napi_value* result) {
110-
return napi_create_external_arraybuffer(
111-
env, data, length, basic_finalize_cb, finalize_hint, result);
110+
napi_value buffer;
111+
if (const auto status = napi_create_external_arraybuffer(
112+
env, data, length, basic_finalize_cb, finalize_hint, &buffer);
113+
status != napi_ok) {
114+
return status;
115+
}
116+
117+
// Warning: The returned data structure does not fully align with the
118+
// characteristics of a Buffer.
119+
// @see
120+
// https://github.com/callstackincubator/react-native-node-api/issues/171
121+
return napi_create_typedarray(env, ArrayType, length, buffer, 0, result);
112122
}
123+
124+
} // namespace callstack::nodeapihost

packages/host/cpp/RuntimeNodeApi.hpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
#pragma once
2+
13
#include "node_api.h"
24

35
namespace callstack::nodeapihost {
@@ -21,5 +23,4 @@ napi_status napi_create_external_buffer(napi_env env,
2123
node_api_basic_finalize basic_finalize_cb,
2224
void* finalize_hint,
2325
napi_value* result);
24-
2526
} // namespace callstack::nodeapihost

0 commit comments

Comments
 (0)