koffi 2.3.0-beta.1 → 2.3.0-beta.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (33) hide show
  1. package/doc/callbacks.md +4 -0
  2. package/package.json +1 -1
  3. package/src/koffi/build/2.3.0-beta.2/koffi_darwin_arm64.tar.gz +0 -0
  4. package/src/koffi/build/2.3.0-beta.2/koffi_darwin_x64.tar.gz +0 -0
  5. package/src/koffi/build/2.3.0-beta.2/koffi_freebsd_arm64.tar.gz +0 -0
  6. package/src/koffi/build/2.3.0-beta.2/koffi_freebsd_ia32.tar.gz +0 -0
  7. package/src/koffi/build/2.3.0-beta.2/koffi_freebsd_x64.tar.gz +0 -0
  8. package/src/koffi/build/2.3.0-beta.2/koffi_linux_arm32hf.tar.gz +0 -0
  9. package/src/koffi/build/2.3.0-beta.2/koffi_linux_arm64.tar.gz +0 -0
  10. package/src/koffi/build/2.3.0-beta.2/koffi_linux_ia32.tar.gz +0 -0
  11. package/src/koffi/build/2.3.0-beta.2/koffi_linux_riscv64hf64.tar.gz +0 -0
  12. package/src/koffi/build/2.3.0-beta.2/koffi_linux_x64.tar.gz +0 -0
  13. package/src/koffi/build/2.3.0-beta.2/koffi_openbsd_ia32.tar.gz +0 -0
  14. package/src/koffi/build/2.3.0-beta.2/koffi_openbsd_x64.tar.gz +0 -0
  15. package/src/koffi/build/2.3.0-beta.2/koffi_win32_arm64.tar.gz +0 -0
  16. package/src/koffi/build/2.3.0-beta.2/koffi_win32_ia32.tar.gz +0 -0
  17. package/src/koffi/build/2.3.0-beta.2/koffi_win32_x64.tar.gz +0 -0
  18. package/src/koffi/src/call.cc +6 -4
  19. package/src/koffi/build/2.3.0-beta.1/koffi_darwin_arm64.tar.gz +0 -0
  20. package/src/koffi/build/2.3.0-beta.1/koffi_darwin_x64.tar.gz +0 -0
  21. package/src/koffi/build/2.3.0-beta.1/koffi_freebsd_arm64.tar.gz +0 -0
  22. package/src/koffi/build/2.3.0-beta.1/koffi_freebsd_ia32.tar.gz +0 -0
  23. package/src/koffi/build/2.3.0-beta.1/koffi_freebsd_x64.tar.gz +0 -0
  24. package/src/koffi/build/2.3.0-beta.1/koffi_linux_arm32hf.tar.gz +0 -0
  25. package/src/koffi/build/2.3.0-beta.1/koffi_linux_arm64.tar.gz +0 -0
  26. package/src/koffi/build/2.3.0-beta.1/koffi_linux_ia32.tar.gz +0 -0
  27. package/src/koffi/build/2.3.0-beta.1/koffi_linux_riscv64hf64.tar.gz +0 -0
  28. package/src/koffi/build/2.3.0-beta.1/koffi_linux_x64.tar.gz +0 -0
  29. package/src/koffi/build/2.3.0-beta.1/koffi_openbsd_ia32.tar.gz +0 -0
  30. package/src/koffi/build/2.3.0-beta.1/koffi_openbsd_x64.tar.gz +0 -0
  31. package/src/koffi/build/2.3.0-beta.1/koffi_win32_arm64.tar.gz +0 -0
  32. package/src/koffi/build/2.3.0-beta.1/koffi_win32_ia32.tar.gz +0 -0
  33. package/src/koffi/build/2.3.0-beta.1/koffi_win32_x64.tar.gz +0 -0
package/doc/callbacks.md CHANGED
@@ -173,6 +173,10 @@ There is also an optional ending `length` argument that you can use in two cases
173
173
  - Use it to give the number of bytes to decode in non-NUL terminated strings: `koffi.decode(value, 'char *', 5)`
174
174
  - Decode consecutive values into an array. For example, here is how you can decode an array with 3 float values: `koffi.decode(value, 'float', 3)`. This is equivalent to `koffi.decode(value, koffi.array('float', 3))`.
175
175
 
176
+ ```{note}
177
+ In Koffi 2.2 and earlier versions, the length argument is only used to decode strings and is ignored otherwise.
178
+ ```
179
+
176
180
  ## Asynchronous callbacks
177
181
 
178
182
  *New in Koffi 2.2.2*
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "koffi",
3
- "version": "2.3.0-beta.1",
3
+ "version": "2.3.0-beta.2",
4
4
  "stable": "2.2.5",
5
5
  "description": "Fast and simple C FFI (foreign function interface) for Node.js",
6
6
  "keywords": [
@@ -923,15 +923,17 @@ bool CallData::PushPointer(Napi::Value value, const TypeInfo *type, int directio
923
923
  memset_safe(ptr, 0, size);
924
924
  }
925
925
  } else if (IsRawBuffer(value)) {
926
- Span<const uint8_t> buffer = GetRawBuffer(value);
926
+ Span<uint8_t> buffer = GetRawBuffer(value);
927
927
 
928
- ptr = AllocHeap(buffer.len, 16);
928
+ if (directions == 1) {
929
+ ptr = AllocHeap(buffer.len, 16);
929
930
 
930
- if (directions & 1) {
931
931
  if (!PushBuffer(buffer, buffer.len, type, ptr))
932
932
  return false;
933
933
  } else {
934
- memset_safe(ptr, 0, (size_t)buffer.len);
934
+ // Fast no-copy path
935
+ ptr = buffer.ptr;
936
+ directions = 1;
935
937
  }
936
938
  } else if (RG_LIKELY(type->ref.type->primitive == PrimitiveKind::Record)) {
937
939
  Napi::Object obj = value.As<Napi::Object>();