aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Jarred Sumner <jarred@jarredsumner.com> 2022-05-09 00:23:51 -0700
committerGravatar Jarred Sumner <jarred@jarredsumner.com> 2022-05-09 00:23:51 -0700
commit3bd83eb134f60044a231b6357e597be47831bdd4 (patch)
treea91eed4318617abbefb31f6c6fa08499c408332d
parenta5ebcefeeb02876f61a984db04d615ac291baa88 (diff)
downloadbun-3bd83eb134f60044a231b6357e597be47831bdd4.tar.gz
bun-3bd83eb134f60044a231b6357e597be47831bdd4.tar.zst
bun-3bd83eb134f60044a231b6357e597be47831bdd4.zip
[napi] Fix strings
-rw-r--r--src/napi/napi.zig250
1 files changed, 142 insertions, 108 deletions
diff --git a/src/napi/napi.zig b/src/napi/napi.zig
index 2616b2374..9189d4c94 100644
--- a/src/napi/napi.zig
+++ b/src/napi/napi.zig
@@ -381,16 +381,28 @@ pub export fn napi_get_value_bool(_: napi_env, value: napi_value, result: *bool)
result.* = value.to(bool);
return .ok;
}
-pub export fn napi_get_value_string_latin1(env: napi_env, value: napi_value, buf: [*]u8, bufsize: usize, result: *usize) napi_status {
+pub export fn napi_get_value_string_latin1(env: napi_env, value: napi_value, buf_ptr: [*c]u8, bufsize: usize, result: *usize) napi_status {
const zig_str = value.getZigString(env);
- if (@ptrToInt(buf) == 0) {
+ var buf = buf_ptr orelse {
result.* = zig_str.len;
return .ok;
+ };
+
+ if (zig_str.len == 0) {
+ result.* = 0;
+ buf[0] = 0;
+
+ return .ok;
}
var buf_ = buf[0..bufsize];
+
if (bufsize == 0) {
- buf_ = std.mem.span(std.meta.assumeSentinel(buf, 0));
+ buf_ = std.mem.span(std.meta.assumeSentinel(buf_, 0));
+ if (buf_.len == 0) {
+ result.* = 0;
+ return .ok;
+ }
}
if (zig_str.is16Bit()) {
@@ -407,17 +419,28 @@ pub export fn napi_get_value_string_latin1(env: napi_env, value: napi_value, buf
result.* = to_copy;
return .ok;
}
-pub export fn napi_get_value_string_utf8(env: napi_env, value: napi_value, buf: [*]u8, bufsize: usize, result: *usize) napi_status {
+pub export fn napi_get_value_string_utf8(env: napi_env, value: napi_value, buf_ptr: [*c]u8, bufsize: usize, result: *usize) napi_status {
const zig_str = value.getZigString(env);
- if (@ptrToInt(buf) == 0) {
+ var buf = buf_ptr orelse {
result.* = zig_str.len;
return .ok;
+ };
+
+ if (zig_str.len == 0) {
+ result.* = 0;
+ buf[0] = 0;
+
+ return .ok;
}
var buf_ = buf[0..bufsize];
if (bufsize == 0) {
- buf_ = std.mem.span(std.meta.assumeSentinel(buf, 0));
+ buf_ = std.mem.span(std.meta.assumeSentinel(buf_, 0));
+ if (buf_.len == 0) {
+ result.* = 0;
+ return .ok;
+ }
}
if (zig_str.is16Bit()) {
@@ -435,17 +458,28 @@ pub export fn napi_get_value_string_utf8(env: napi_env, value: napi_value, buf:
result.* = to_copy;
return .ok;
}
-pub export fn napi_get_value_string_utf16(env: napi_env, value: napi_value, buf: [*]char16_t, bufsize: usize, result: *usize) napi_status {
+pub export fn napi_get_value_string_utf16(env: napi_env, value: napi_value, buf_ptr: [*c]char16_t, bufsize: usize, result: *usize) napi_status {
const zig_str = value.getZigString(env);
- if (@ptrToInt(buf) == 0) {
+ var buf = buf_ptr orelse {
result.* = zig_str.len;
return .ok;
+ };
+
+ if (zig_str.len == 0) {
+ result.* = 0;
+ buf[0] = 0;
+
+ return .ok;
}
var buf_ = buf[0..bufsize];
if (bufsize == 0) {
- buf_ = std.mem.span(std.meta.assumeSentinel(buf, 0));
+ buf_ = std.mem.span(std.meta.assumeSentinel(buf_, 0));
+ if (buf_.len == 0) {
+ result.* = 0;
+ return .ok;
+ }
}
if (!zig_str.is16Bit()) {
@@ -1481,105 +1515,105 @@ pub const NAPI_MODULE_VERSION = @as(c_int, 1);
pub fn fixDeadCodeElimination() void {
if (comptime JSC.is_bindgen) unreachable;
- std.mem.doNotOptimizeAway(napi_get_undefined);
- std.mem.doNotOptimizeAway(napi_get_null);
- std.mem.doNotOptimizeAway(napi_get_boolean);
- std.mem.doNotOptimizeAway(napi_create_object);
- std.mem.doNotOptimizeAway(napi_create_array);
- std.mem.doNotOptimizeAway(napi_create_array_with_length);
- std.mem.doNotOptimizeAway(napi_create_double);
- std.mem.doNotOptimizeAway(napi_create_int32);
- std.mem.doNotOptimizeAway(napi_create_uint32);
- std.mem.doNotOptimizeAway(napi_create_int64);
- std.mem.doNotOptimizeAway(napi_create_string_latin1);
- std.mem.doNotOptimizeAway(napi_create_string_utf8);
- std.mem.doNotOptimizeAway(napi_create_string_utf16);
- std.mem.doNotOptimizeAway(napi_create_symbol);
- // std.mem.doNotOptimizeAway(napi_create_function);
- std.mem.doNotOptimizeAway(napi_create_error);
- std.mem.doNotOptimizeAway(napi_typeof);
- std.mem.doNotOptimizeAway(napi_get_value_double);
- std.mem.doNotOptimizeAway(napi_get_value_int32);
- std.mem.doNotOptimizeAway(napi_get_value_uint32);
- std.mem.doNotOptimizeAway(napi_get_value_int64);
- std.mem.doNotOptimizeAway(napi_get_value_bool);
- std.mem.doNotOptimizeAway(napi_get_value_string_latin1);
- std.mem.doNotOptimizeAway(napi_get_value_string_utf8);
- std.mem.doNotOptimizeAway(napi_get_value_string_utf16);
- std.mem.doNotOptimizeAway(napi_coerce_to_bool);
- std.mem.doNotOptimizeAway(napi_coerce_to_number);
- std.mem.doNotOptimizeAway(napi_coerce_to_object);
- // std.mem.doNotOptimizeAway(napi_coerce_to_string);
- std.mem.doNotOptimizeAway(napi_get_prototype);
- // std.mem.doNotOptimizeAway(napi_get_property_names);
- std.mem.doNotOptimizeAway(napi_set_property);
- std.mem.doNotOptimizeAway(napi_has_property);
- std.mem.doNotOptimizeAway(napi_get_property);
- std.mem.doNotOptimizeAway(napi_delete_property);
- std.mem.doNotOptimizeAway(napi_has_own_property);
- std.mem.doNotOptimizeAway(napi_set_named_property);
- std.mem.doNotOptimizeAway(napi_has_named_property);
- std.mem.doNotOptimizeAway(napi_get_named_property);
- std.mem.doNotOptimizeAway(napi_set_element);
- std.mem.doNotOptimizeAway(napi_has_element);
- std.mem.doNotOptimizeAway(napi_get_element);
- // std.mem.doNotOptimizeAway(napi_delete_element);
- std.mem.doNotOptimizeAway(napi_is_array);
- std.mem.doNotOptimizeAway(napi_get_array_length);
- std.mem.doNotOptimizeAway(napi_strict_equals);
- std.mem.doNotOptimizeAway(napi_call_function);
- std.mem.doNotOptimizeAway(napi_new_instance);
- std.mem.doNotOptimizeAway(napi_instanceof);
- std.mem.doNotOptimizeAway(napi_open_handle_scope);
- std.mem.doNotOptimizeAway(napi_close_handle_scope);
- std.mem.doNotOptimizeAway(napi_is_error);
- std.mem.doNotOptimizeAway(napi_is_arraybuffer);
- std.mem.doNotOptimizeAway(napi_create_arraybuffer);
- std.mem.doNotOptimizeAway(napi_create_external_arraybuffer);
- std.mem.doNotOptimizeAway(napi_get_arraybuffer_info);
- std.mem.doNotOptimizeAway(napi_is_typedarray);
- std.mem.doNotOptimizeAway(napi_create_typedarray);
- std.mem.doNotOptimizeAway(napi_get_typedarray_info);
- std.mem.doNotOptimizeAway(napi_is_dataview);
- std.mem.doNotOptimizeAway(napi_get_dataview_info);
- std.mem.doNotOptimizeAway(napi_get_version);
- std.mem.doNotOptimizeAway(napi_create_promise);
- std.mem.doNotOptimizeAway(napi_resolve_deferred);
- std.mem.doNotOptimizeAway(napi_reject_deferred);
- std.mem.doNotOptimizeAway(napi_is_promise);
- std.mem.doNotOptimizeAway(napi_run_script);
- std.mem.doNotOptimizeAway(napi_create_date);
- std.mem.doNotOptimizeAway(napi_is_date);
- std.mem.doNotOptimizeAway(napi_get_date_value);
- std.mem.doNotOptimizeAway(napi_create_bigint_int64);
- std.mem.doNotOptimizeAway(napi_create_bigint_uint64);
- std.mem.doNotOptimizeAway(napi_get_value_bigint_int64);
- std.mem.doNotOptimizeAway(napi_get_value_bigint_uint64);
- // std.mem.doNotOptimizeAway(napi_module_register);
- std.mem.doNotOptimizeAway(napi_fatal_error);
- // std.mem.doNotOptimizeAway(napi_make_callback);
- std.mem.doNotOptimizeAway(napi_create_buffer);
- std.mem.doNotOptimizeAway(napi_create_external_buffer);
- std.mem.doNotOptimizeAway(napi_create_buffer_copy);
- std.mem.doNotOptimizeAway(napi_is_buffer);
- std.mem.doNotOptimizeAway(napi_get_buffer_info);
- std.mem.doNotOptimizeAway(napi_create_async_work);
- std.mem.doNotOptimizeAway(napi_delete_async_work);
- std.mem.doNotOptimizeAway(napi_queue_async_work);
- std.mem.doNotOptimizeAway(napi_cancel_async_work);
- std.mem.doNotOptimizeAway(napi_get_node_version);
- std.mem.doNotOptimizeAway(napi_get_uv_event_loop);
- std.mem.doNotOptimizeAway(napi_add_env_cleanup_hook);
- std.mem.doNotOptimizeAway(napi_remove_env_cleanup_hook);
- std.mem.doNotOptimizeAway(napi_create_threadsafe_function);
- std.mem.doNotOptimizeAway(napi_get_threadsafe_function_context);
- std.mem.doNotOptimizeAway(napi_call_threadsafe_function);
- std.mem.doNotOptimizeAway(napi_acquire_threadsafe_function);
- std.mem.doNotOptimizeAway(napi_release_threadsafe_function);
- std.mem.doNotOptimizeAway(napi_unref_threadsafe_function);
- std.mem.doNotOptimizeAway(napi_ref_threadsafe_function);
- std.mem.doNotOptimizeAway(napi_add_async_cleanup_hook);
- std.mem.doNotOptimizeAway(napi_remove_async_cleanup_hook);
+ std.mem.doNotOptimizeAway(&napi_get_undefined);
+ std.mem.doNotOptimizeAway(&napi_get_null);
+ std.mem.doNotOptimizeAway(&napi_get_boolean);
+ std.mem.doNotOptimizeAway(&napi_create_object);
+ std.mem.doNotOptimizeAway(&napi_create_array);
+ std.mem.doNotOptimizeAway(&napi_create_array_with_length);
+ std.mem.doNotOptimizeAway(&napi_create_double);
+ std.mem.doNotOptimizeAway(&napi_create_int32);
+ std.mem.doNotOptimizeAway(&napi_create_uint32);
+ std.mem.doNotOptimizeAway(&napi_create_int64);
+ std.mem.doNotOptimizeAway(&napi_create_string_latin1);
+ std.mem.doNotOptimizeAway(&napi_create_string_utf8);
+ std.mem.doNotOptimizeAway(&napi_create_string_utf16);
+ std.mem.doNotOptimizeAway(&napi_create_symbol);
+ // std.mem.doNotOptimizeAway(&napi_create_function);
+ std.mem.doNotOptimizeAway(&napi_create_error);
+ std.mem.doNotOptimizeAway(&napi_typeof);
+ std.mem.doNotOptimizeAway(&napi_get_value_double);
+ std.mem.doNotOptimizeAway(&napi_get_value_int32);
+ std.mem.doNotOptimizeAway(&napi_get_value_uint32);
+ std.mem.doNotOptimizeAway(&napi_get_value_int64);
+ std.mem.doNotOptimizeAway(&napi_get_value_bool);
+ std.mem.doNotOptimizeAway(&napi_get_value_string_latin1);
+ std.mem.doNotOptimizeAway(&napi_get_value_string_utf8);
+ std.mem.doNotOptimizeAway(&napi_get_value_string_utf16);
+ std.mem.doNotOptimizeAway(&napi_coerce_to_bool);
+ std.mem.doNotOptimizeAway(&napi_coerce_to_number);
+ std.mem.doNotOptimizeAway(&napi_coerce_to_object);
+ // std.mem.doNotOptimizeAway(&napi_coerce_to_string);
+ std.mem.doNotOptimizeAway(&napi_get_prototype);
+ // std.mem.doNotOptimizeAway(&napi_get_property_names);
+ std.mem.doNotOptimizeAway(&napi_set_property);
+ std.mem.doNotOptimizeAway(&napi_has_property);
+ std.mem.doNotOptimizeAway(&napi_get_property);
+ std.mem.doNotOptimizeAway(&napi_delete_property);
+ std.mem.doNotOptimizeAway(&napi_has_own_property);
+ std.mem.doNotOptimizeAway(&napi_set_named_property);
+ std.mem.doNotOptimizeAway(&napi_has_named_property);
+ std.mem.doNotOptimizeAway(&napi_get_named_property);
+ std.mem.doNotOptimizeAway(&napi_set_element);
+ std.mem.doNotOptimizeAway(&napi_has_element);
+ std.mem.doNotOptimizeAway(&napi_get_element);
+ // std.mem.doNotOptimizeAway(&napi_delete_element);
+ std.mem.doNotOptimizeAway(&napi_is_array);
+ std.mem.doNotOptimizeAway(&napi_get_array_length);
+ std.mem.doNotOptimizeAway(&napi_strict_equals);
+ std.mem.doNotOptimizeAway(&napi_call_function);
+ std.mem.doNotOptimizeAway(&napi_new_instance);
+ std.mem.doNotOptimizeAway(&napi_instanceof);
+ std.mem.doNotOptimizeAway(&napi_open_handle_scope);
+ std.mem.doNotOptimizeAway(&napi_close_handle_scope);
+ std.mem.doNotOptimizeAway(&napi_is_error);
+ std.mem.doNotOptimizeAway(&napi_is_arraybuffer);
+ std.mem.doNotOptimizeAway(&napi_create_arraybuffer);
+ std.mem.doNotOptimizeAway(&napi_create_external_arraybuffer);
+ std.mem.doNotOptimizeAway(&napi_get_arraybuffer_info);
+ std.mem.doNotOptimizeAway(&napi_is_typedarray);
+ std.mem.doNotOptimizeAway(&napi_create_typedarray);
+ std.mem.doNotOptimizeAway(&napi_get_typedarray_info);
+ std.mem.doNotOptimizeAway(&napi_is_dataview);
+ std.mem.doNotOptimizeAway(&napi_get_dataview_info);
+ std.mem.doNotOptimizeAway(&napi_get_version);
+ std.mem.doNotOptimizeAway(&napi_create_promise);
+ std.mem.doNotOptimizeAway(&napi_resolve_deferred);
+ std.mem.doNotOptimizeAway(&napi_reject_deferred);
+ std.mem.doNotOptimizeAway(&napi_is_promise);
+ std.mem.doNotOptimizeAway(&napi_run_script);
+ std.mem.doNotOptimizeAway(&napi_create_date);
+ std.mem.doNotOptimizeAway(&napi_is_date);
+ std.mem.doNotOptimizeAway(&napi_get_date_value);
+ std.mem.doNotOptimizeAway(&napi_create_bigint_int64);
+ std.mem.doNotOptimizeAway(&napi_create_bigint_uint64);
+ std.mem.doNotOptimizeAway(&napi_get_value_bigint_int64);
+ std.mem.doNotOptimizeAway(&napi_get_value_bigint_uint64);
+ // std.mem.doNotOptimizeAway(&napi_module_register);
+ std.mem.doNotOptimizeAway(&napi_fatal_error);
+ // std.mem.doNotOptimizeAway(&napi_make_callback);
+ std.mem.doNotOptimizeAway(&napi_create_buffer);
+ std.mem.doNotOptimizeAway(&napi_create_external_buffer);
+ std.mem.doNotOptimizeAway(&napi_create_buffer_copy);
+ std.mem.doNotOptimizeAway(&napi_is_buffer);
+ std.mem.doNotOptimizeAway(&napi_get_buffer_info);
+ std.mem.doNotOptimizeAway(&napi_create_async_work);
+ std.mem.doNotOptimizeAway(&napi_delete_async_work);
+ std.mem.doNotOptimizeAway(&napi_queue_async_work);
+ std.mem.doNotOptimizeAway(&napi_cancel_async_work);
+ std.mem.doNotOptimizeAway(&napi_get_node_version);
+ std.mem.doNotOptimizeAway(&napi_get_uv_event_loop);
+ std.mem.doNotOptimizeAway(&napi_add_env_cleanup_hook);
+ std.mem.doNotOptimizeAway(&napi_remove_env_cleanup_hook);
+ std.mem.doNotOptimizeAway(&napi_create_threadsafe_function);
+ std.mem.doNotOptimizeAway(&napi_get_threadsafe_function_context);
+ std.mem.doNotOptimizeAway(&napi_call_threadsafe_function);
+ std.mem.doNotOptimizeAway(&napi_acquire_threadsafe_function);
+ std.mem.doNotOptimizeAway(&napi_release_threadsafe_function);
+ std.mem.doNotOptimizeAway(&napi_unref_threadsafe_function);
+ std.mem.doNotOptimizeAway(&napi_ref_threadsafe_function);
+ std.mem.doNotOptimizeAway(&napi_add_async_cleanup_hook);
+ std.mem.doNotOptimizeAway(&napi_remove_async_cleanup_hook);
}
comptime {