diff options
author | snek <snek@deno.com> | 2024-06-19 11:33:46 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-06-19 11:33:46 -0700 |
commit | 293a36f98d3614368d24f7804d2fc4191a54c0e3 (patch) | |
tree | bea097934bd7264318dba5762a369267d7ceea9e /cli/napi/js_native_api.rs | |
parent | 6c6ee02dfdb0f158a0aab20905e362100b2c3328 (diff) |
fix: more node-api fixes (#24220)
- add fallback impls of external string apis which always copy. after
upstream changes to rusty_v8 we can support non-copying api as well.
- `napi_get_buffer_data` needs to work on all TypedArray instances.
- Fixes: https://github.com/denoland/deno/issues/24209
- `target_defaults.default_configuration` is used by some modules to
find the corresponding node file from node-gyp
- `node_api_get_module_filename` expects the filename to be a `file:`
url.
Diffstat (limited to 'cli/napi/js_native_api.rs')
-rw-r--r-- | cli/napi/js_native_api.rs | 66 |
1 files changed, 48 insertions, 18 deletions
diff --git a/cli/napi/js_native_api.rs b/cli/napi/js_native_api.rs index fe6535446..5269d8d1d 100644 --- a/cli/napi/js_native_api.rs +++ b/cli/napi/js_native_api.rs @@ -1180,27 +1180,57 @@ fn napi_create_string_utf16( #[napi_sym] fn node_api_create_external_string_latin1( env_ptr: *mut Env, - _string: *const c_char, - _length: usize, - _nogc_finalize_callback: napi_finalize, - _finalize_hint: *mut c_void, - _result: *mut napi_value, - _copied: *mut bool, + string: *const c_char, + length: usize, + nogc_finalize_callback: Option<napi_finalize>, + finalize_hint: *mut c_void, + result: *mut napi_value, + copied: *mut bool, ) -> napi_status { - return napi_set_last_error(env_ptr, napi_generic_failure); + let status = + unsafe { napi_create_string_latin1(env_ptr, string, length, result) }; + + if status == napi_ok { + unsafe { + *copied = true; + } + + if let Some(finalize) = nogc_finalize_callback { + unsafe { + finalize(env_ptr as napi_env, string as *mut c_void, finalize_hint); + } + } + } + + status } #[napi_sym] fn node_api_create_external_string_utf16( env_ptr: *mut Env, - _string: *const u16, - _length: usize, - _nogc_finalize_callback: napi_finalize, - _finalize_hint: *mut c_void, - _result: *mut napi_value, - _copied: *mut bool, + string: *const u16, + length: usize, + nogc_finalize_callback: Option<napi_finalize>, + finalize_hint: *mut c_void, + result: *mut napi_value, + copied: *mut bool, ) -> napi_status { - return napi_set_last_error(env_ptr, napi_generic_failure); + let status = + unsafe { napi_create_string_utf16(env_ptr, string, length, result) }; + + if status == napi_ok { + unsafe { + *copied = true; + } + + if let Some(finalize) = nogc_finalize_callback { + unsafe { + finalize(env_ptr as napi_env, string as *mut c_void, finalize_hint); + } + } + } + + status } #[napi_sym] @@ -2793,8 +2823,8 @@ fn napi_instanceof( unsafe { napi_throw_type_error( env, - "ERR_NAPI_CONS_FUNCTION\0".as_ptr() as _, - "Constructor must be a function\0".as_ptr() as _, + c"ERR_NAPI_CONS_FUNCTION".as_ptr(), + c"Constructor must be a function".as_ptr(), ); } return napi_function_expected; @@ -3147,8 +3177,8 @@ fn napi_create_dataview<'s>( unsafe { return napi_throw_range_error( env, - "ERR_NAPI_INVALID_DATAVIEW_ARGS\0".as_ptr() as _, - "byte_offset + byte_length should be less than or equal to the size in bytes of the array passed in\0".as_ptr() as _, + c"ERR_NAPI_INVALID_DATAVIEW_ARGS".as_ptr(), + c"byte_offset + byte_length should be less than or equal to the size in bytes of the array passed in".as_ptr(), ); } } |