koffi 1.0.3 → 1.1.0-beta.0

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 (271) hide show
  1. package/README.md +48 -22
  2. package/build/qemu/1.1.0-beta.0/koffi_darwin_x64.tar.gz +0 -0
  3. package/build/qemu/1.1.0-beta.0/koffi_freebsd_arm64.tar.gz +0 -0
  4. package/build/qemu/1.1.0-beta.0/koffi_freebsd_ia32.tar.gz +0 -0
  5. package/build/qemu/1.1.0-beta.0/koffi_freebsd_x64.tar.gz +0 -0
  6. package/build/qemu/1.1.0-beta.0/koffi_linux_arm.tar.gz +0 -0
  7. package/build/qemu/1.1.0-beta.0/koffi_linux_arm64.tar.gz +0 -0
  8. package/build/qemu/1.1.0-beta.0/koffi_linux_ia32.tar.gz +0 -0
  9. package/build/qemu/1.1.0-beta.0/koffi_linux_x64.tar.gz +0 -0
  10. package/build/qemu/1.1.0-beta.0/koffi_win32_ia32.tar.gz +0 -0
  11. package/build/qemu/1.1.0-beta.0/koffi_win32_x64.tar.gz +0 -0
  12. package/package.json +1 -1
  13. package/qemu/qemu.js +11 -5
  14. package/qemu/registry/machines.json +20 -10
  15. package/src/abi_arm32.cc +130 -215
  16. package/src/abi_arm64.cc +103 -117
  17. package/src/abi_x64_sysv.cc +117 -135
  18. package/src/abi_x64_win.cc +89 -98
  19. package/src/abi_x86.cc +91 -99
  20. package/src/call.cc +164 -40
  21. package/src/call.hh +53 -31
  22. package/src/ffi.cc +163 -19
  23. package/src/ffi.hh +30 -22
  24. package/src/util.cc +0 -127
  25. package/src/util.hh +0 -16
  26. package/test/misc.c +68 -2
  27. package/vendor/libcc/libcc.hh +1 -1
  28. package/build/qemu/1.0.3/koffi_darwin_x64.tar.gz +0 -0
  29. package/build/qemu/1.0.3/koffi_freebsd_arm64.tar.gz +0 -0
  30. package/build/qemu/1.0.3/koffi_freebsd_ia32.tar.gz +0 -0
  31. package/build/qemu/1.0.3/koffi_freebsd_x64.tar.gz +0 -0
  32. package/build/qemu/1.0.3/koffi_linux_arm.tar.gz +0 -0
  33. package/build/qemu/1.0.3/koffi_linux_arm64.tar.gz +0 -0
  34. package/build/qemu/1.0.3/koffi_linux_ia32.tar.gz +0 -0
  35. package/build/qemu/1.0.3/koffi_linux_x64.tar.gz +0 -0
  36. package/build/qemu/1.0.3/koffi_win32_ia32.tar.gz +0 -0
  37. package/build/qemu/1.0.3/koffi_win32_x64.tar.gz +0 -0
  38. package/test/misc.js +0 -180
  39. package/vendor/node-addon-api/CODE_OF_CONDUCT.md +0 -4
  40. package/vendor/node-addon-api/CONTRIBUTING.md +0 -93
  41. package/vendor/node-addon-api/appveyor.yml +0 -37
  42. package/vendor/node-addon-api/benchmark/README.md +0 -47
  43. package/vendor/node-addon-api/benchmark/binding.gyp +0 -25
  44. package/vendor/node-addon-api/benchmark/function_args.cc +0 -217
  45. package/vendor/node-addon-api/benchmark/function_args.js +0 -60
  46. package/vendor/node-addon-api/benchmark/index.js +0 -34
  47. package/vendor/node-addon-api/benchmark/property_descriptor.cc +0 -91
  48. package/vendor/node-addon-api/benchmark/property_descriptor.js +0 -37
  49. package/vendor/node-addon-api/doc/addon.md +0 -163
  50. package/vendor/node-addon-api/doc/array.md +0 -81
  51. package/vendor/node-addon-api/doc/array_buffer.md +0 -155
  52. package/vendor/node-addon-api/doc/async_context.md +0 -86
  53. package/vendor/node-addon-api/doc/async_operations.md +0 -31
  54. package/vendor/node-addon-api/doc/async_worker.md +0 -427
  55. package/vendor/node-addon-api/doc/async_worker_variants.md +0 -557
  56. package/vendor/node-addon-api/doc/bigint.md +0 -97
  57. package/vendor/node-addon-api/doc/boolean.md +0 -68
  58. package/vendor/node-addon-api/doc/buffer.md +0 -150
  59. package/vendor/node-addon-api/doc/callback_scope.md +0 -54
  60. package/vendor/node-addon-api/doc/callbackinfo.md +0 -97
  61. package/vendor/node-addon-api/doc/checker-tool.md +0 -32
  62. package/vendor/node-addon-api/doc/class_property_descriptor.md +0 -123
  63. package/vendor/node-addon-api/doc/cmake-js.md +0 -68
  64. package/vendor/node-addon-api/doc/conversion-tool.md +0 -28
  65. package/vendor/node-addon-api/doc/creating_a_release.md +0 -62
  66. package/vendor/node-addon-api/doc/dataview.md +0 -248
  67. package/vendor/node-addon-api/doc/date.md +0 -68
  68. package/vendor/node-addon-api/doc/env.md +0 -196
  69. package/vendor/node-addon-api/doc/error.md +0 -120
  70. package/vendor/node-addon-api/doc/error_handling.md +0 -254
  71. package/vendor/node-addon-api/doc/escapable_handle_scope.md +0 -80
  72. package/vendor/node-addon-api/doc/external.md +0 -63
  73. package/vendor/node-addon-api/doc/function.md +0 -402
  74. package/vendor/node-addon-api/doc/function_reference.md +0 -238
  75. package/vendor/node-addon-api/doc/generator.md +0 -13
  76. package/vendor/node-addon-api/doc/handle_scope.md +0 -63
  77. package/vendor/node-addon-api/doc/hierarchy.md +0 -91
  78. package/vendor/node-addon-api/doc/instance_wrap.md +0 -408
  79. package/vendor/node-addon-api/doc/maybe.md +0 -76
  80. package/vendor/node-addon-api/doc/memory_management.md +0 -27
  81. package/vendor/node-addon-api/doc/name.md +0 -29
  82. package/vendor/node-addon-api/doc/node-gyp.md +0 -82
  83. package/vendor/node-addon-api/doc/number.md +0 -163
  84. package/vendor/node-addon-api/doc/object.md +0 -411
  85. package/vendor/node-addon-api/doc/object_lifetime_management.md +0 -83
  86. package/vendor/node-addon-api/doc/object_reference.md +0 -117
  87. package/vendor/node-addon-api/doc/object_wrap.md +0 -588
  88. package/vendor/node-addon-api/doc/prebuild_tools.md +0 -16
  89. package/vendor/node-addon-api/doc/promises.md +0 -79
  90. package/vendor/node-addon-api/doc/property_descriptor.md +0 -286
  91. package/vendor/node-addon-api/doc/propertylvalue.md +0 -50
  92. package/vendor/node-addon-api/doc/range_error.md +0 -59
  93. package/vendor/node-addon-api/doc/reference.md +0 -113
  94. package/vendor/node-addon-api/doc/setup.md +0 -110
  95. package/vendor/node-addon-api/doc/string.md +0 -93
  96. package/vendor/node-addon-api/doc/symbol.md +0 -61
  97. package/vendor/node-addon-api/doc/threadsafe.md +0 -121
  98. package/vendor/node-addon-api/doc/threadsafe_function.md +0 -290
  99. package/vendor/node-addon-api/doc/type_error.md +0 -59
  100. package/vendor/node-addon-api/doc/typed_array.md +0 -78
  101. package/vendor/node-addon-api/doc/typed_array_of.md +0 -137
  102. package/vendor/node-addon-api/doc/typed_threadsafe_function.md +0 -306
  103. package/vendor/node-addon-api/doc/value.md +0 -340
  104. package/vendor/node-addon-api/doc/version_management.md +0 -43
  105. package/vendor/node-addon-api/package.json +0 -415
  106. package/vendor/node-addon-api/test/README.md +0 -91
  107. package/vendor/node-addon-api/test/addon.cc +0 -36
  108. package/vendor/node-addon-api/test/addon.js +0 -11
  109. package/vendor/node-addon-api/test/addon_build/index.js +0 -49
  110. package/vendor/node-addon-api/test/addon_build/tpl/addon.cc +0 -17
  111. package/vendor/node-addon-api/test/addon_build/tpl/binding.gyp +0 -62
  112. package/vendor/node-addon-api/test/addon_build/tpl/index.js +0 -9
  113. package/vendor/node-addon-api/test/addon_build/tpl/package.json +0 -11
  114. package/vendor/node-addon-api/test/addon_data.cc +0 -99
  115. package/vendor/node-addon-api/test/addon_data.js +0 -46
  116. package/vendor/node-addon-api/test/array_buffer.cc +0 -243
  117. package/vendor/node-addon-api/test/array_buffer.js +0 -69
  118. package/vendor/node-addon-api/test/async_context.cc +0 -36
  119. package/vendor/node-addon-api/test/async_context.js +0 -122
  120. package/vendor/node-addon-api/test/async_progress_queue_worker.cc +0 -83
  121. package/vendor/node-addon-api/test/async_progress_queue_worker.js +0 -46
  122. package/vendor/node-addon-api/test/async_progress_worker.cc +0 -134
  123. package/vendor/node-addon-api/test/async_progress_worker.js +0 -61
  124. package/vendor/node-addon-api/test/async_worker.cc +0 -106
  125. package/vendor/node-addon-api/test/async_worker.js +0 -179
  126. package/vendor/node-addon-api/test/async_worker_nocallback.js +0 -13
  127. package/vendor/node-addon-api/test/async_worker_persistent.cc +0 -63
  128. package/vendor/node-addon-api/test/async_worker_persistent.js +0 -24
  129. package/vendor/node-addon-api/test/basic_types/array.cc +0 -40
  130. package/vendor/node-addon-api/test/basic_types/array.js +0 -35
  131. package/vendor/node-addon-api/test/basic_types/boolean.cc +0 -38
  132. package/vendor/node-addon-api/test/basic_types/boolean.js +0 -35
  133. package/vendor/node-addon-api/test/basic_types/number.cc +0 -99
  134. package/vendor/node-addon-api/test/basic_types/number.js +0 -114
  135. package/vendor/node-addon-api/test/basic_types/value.cc +0 -120
  136. package/vendor/node-addon-api/test/basic_types/value.js +0 -133
  137. package/vendor/node-addon-api/test/bigint.cc +0 -91
  138. package/vendor/node-addon-api/test/bigint.js +0 -53
  139. package/vendor/node-addon-api/test/binding-swallowexcept.cc +0 -12
  140. package/vendor/node-addon-api/test/binding.cc +0 -173
  141. package/vendor/node-addon-api/test/binding.gyp +0 -124
  142. package/vendor/node-addon-api/test/buffer.cc +0 -183
  143. package/vendor/node-addon-api/test/buffer.js +0 -69
  144. package/vendor/node-addon-api/test/callbackscope.cc +0 -22
  145. package/vendor/node-addon-api/test/callbackscope.js +0 -49
  146. package/vendor/node-addon-api/test/common/index.js +0 -114
  147. package/vendor/node-addon-api/test/common/test_helper.h +0 -71
  148. package/vendor/node-addon-api/test/dataview/dataview.cc +0 -48
  149. package/vendor/node-addon-api/test/dataview/dataview.js +0 -35
  150. package/vendor/node-addon-api/test/dataview/dataview_read_write.cc +0 -115
  151. package/vendor/node-addon-api/test/dataview/dataview_read_write.js +0 -90
  152. package/vendor/node-addon-api/test/date.cc +0 -44
  153. package/vendor/node-addon-api/test/date.js +0 -18
  154. package/vendor/node-addon-api/test/env_cleanup.cc +0 -88
  155. package/vendor/node-addon-api/test/env_cleanup.js +0 -56
  156. package/vendor/node-addon-api/test/error.cc +0 -287
  157. package/vendor/node-addon-api/test/error.js +0 -81
  158. package/vendor/node-addon-api/test/error_handling_for_primitives.cc +0 -13
  159. package/vendor/node-addon-api/test/error_handling_for_primitives.js +0 -29
  160. package/vendor/node-addon-api/test/error_terminating_environment.js +0 -95
  161. package/vendor/node-addon-api/test/external.cc +0 -81
  162. package/vendor/node-addon-api/test/external.js +0 -88
  163. package/vendor/node-addon-api/test/function.cc +0 -324
  164. package/vendor/node-addon-api/test/function.js +0 -133
  165. package/vendor/node-addon-api/test/function_reference.cc +0 -202
  166. package/vendor/node-addon-api/test/function_reference.js +0 -157
  167. package/vendor/node-addon-api/test/globalObject/global_object.cc +0 -61
  168. package/vendor/node-addon-api/test/globalObject/global_object_delete_property.cc +0 -31
  169. package/vendor/node-addon-api/test/globalObject/global_object_delete_property.js +0 -61
  170. package/vendor/node-addon-api/test/globalObject/global_object_get_property.cc +0 -40
  171. package/vendor/node-addon-api/test/globalObject/global_object_get_property.js +0 -57
  172. package/vendor/node-addon-api/test/globalObject/global_object_has_own_property.cc +0 -28
  173. package/vendor/node-addon-api/test/globalObject/global_object_has_own_property.js +0 -48
  174. package/vendor/node-addon-api/test/globalObject/global_object_set_property.cc +0 -31
  175. package/vendor/node-addon-api/test/globalObject/global_object_set_property.js +0 -58
  176. package/vendor/node-addon-api/test/handlescope.cc +0 -60
  177. package/vendor/node-addon-api/test/handlescope.js +0 -14
  178. package/vendor/node-addon-api/test/index.js +0 -159
  179. package/vendor/node-addon-api/test/maybe/check.cc +0 -23
  180. package/vendor/node-addon-api/test/maybe/index.js +0 -38
  181. package/vendor/node-addon-api/test/memory_management.cc +0 -17
  182. package/vendor/node-addon-api/test/memory_management.js +0 -9
  183. package/vendor/node-addon-api/test/movable_callbacks.cc +0 -23
  184. package/vendor/node-addon-api/test/movable_callbacks.js +0 -21
  185. package/vendor/node-addon-api/test/name.cc +0 -108
  186. package/vendor/node-addon-api/test/name.js +0 -59
  187. package/vendor/node-addon-api/test/napi_child.js +0 -14
  188. package/vendor/node-addon-api/test/object/delete_property.cc +0 -38
  189. package/vendor/node-addon-api/test/object/delete_property.js +0 -41
  190. package/vendor/node-addon-api/test/object/finalizer.cc +0 -29
  191. package/vendor/node-addon-api/test/object/finalizer.js +0 -28
  192. package/vendor/node-addon-api/test/object/get_property.cc +0 -34
  193. package/vendor/node-addon-api/test/object/get_property.js +0 -40
  194. package/vendor/node-addon-api/test/object/has_own_property.cc +0 -34
  195. package/vendor/node-addon-api/test/object/has_own_property.js +0 -34
  196. package/vendor/node-addon-api/test/object/has_property.cc +0 -38
  197. package/vendor/node-addon-api/test/object/has_property.js +0 -37
  198. package/vendor/node-addon-api/test/object/object.cc +0 -350
  199. package/vendor/node-addon-api/test/object/object.js +0 -217
  200. package/vendor/node-addon-api/test/object/object_deprecated.cc +0 -66
  201. package/vendor/node-addon-api/test/object/object_deprecated.js +0 -47
  202. package/vendor/node-addon-api/test/object/object_freeze_seal.cc +0 -25
  203. package/vendor/node-addon-api/test/object/object_freeze_seal.js +0 -61
  204. package/vendor/node-addon-api/test/object/set_property.cc +0 -45
  205. package/vendor/node-addon-api/test/object/set_property.js +0 -30
  206. package/vendor/node-addon-api/test/object/subscript_operator.cc +0 -58
  207. package/vendor/node-addon-api/test/object/subscript_operator.js +0 -17
  208. package/vendor/node-addon-api/test/object_reference.cc +0 -219
  209. package/vendor/node-addon-api/test/object_reference.js +0 -259
  210. package/vendor/node-addon-api/test/objectwrap.cc +0 -268
  211. package/vendor/node-addon-api/test/objectwrap.js +0 -284
  212. package/vendor/node-addon-api/test/objectwrap_constructor_exception.cc +0 -26
  213. package/vendor/node-addon-api/test/objectwrap_constructor_exception.js +0 -18
  214. package/vendor/node-addon-api/test/objectwrap_function.cc +0 -45
  215. package/vendor/node-addon-api/test/objectwrap_function.js +0 -22
  216. package/vendor/node-addon-api/test/objectwrap_multiple_inheritance.cc +0 -30
  217. package/vendor/node-addon-api/test/objectwrap_multiple_inheritance.js +0 -13
  218. package/vendor/node-addon-api/test/objectwrap_removewrap.cc +0 -45
  219. package/vendor/node-addon-api/test/objectwrap_removewrap.js +0 -40
  220. package/vendor/node-addon-api/test/objectwrap_worker_thread.js +0 -19
  221. package/vendor/node-addon-api/test/promise.cc +0 -29
  222. package/vendor/node-addon-api/test/promise.js +0 -18
  223. package/vendor/node-addon-api/test/reference.cc +0 -24
  224. package/vendor/node-addon-api/test/reference.js +0 -14
  225. package/vendor/node-addon-api/test/run_script.cc +0 -56
  226. package/vendor/node-addon-api/test/run_script.js +0 -45
  227. package/vendor/node-addon-api/test/symbol.cc +0 -79
  228. package/vendor/node-addon-api/test/symbol.js +0 -73
  229. package/vendor/node-addon-api/test/testUtil.js +0 -54
  230. package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function.cc +0 -195
  231. package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function.js +0 -188
  232. package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_ctx.cc +0 -63
  233. package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_ctx.js +0 -12
  234. package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_existing_tsfn.cc +0 -115
  235. package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_existing_tsfn.js +0 -14
  236. package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_ptr.cc +0 -26
  237. package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_ptr.js +0 -7
  238. package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_sum.cc +0 -225
  239. package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_sum.js +0 -59
  240. package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_unref.cc +0 -42
  241. package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_unref.js +0 -53
  242. package/vendor/node-addon-api/test/thunking_manual.cc +0 -140
  243. package/vendor/node-addon-api/test/thunking_manual.js +0 -17
  244. package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function.cc +0 -215
  245. package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function.js +0 -188
  246. package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_ctx.cc +0 -68
  247. package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_ctx.js +0 -12
  248. package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_existing_tsfn.cc +0 -127
  249. package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_existing_tsfn.js +0 -14
  250. package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_ptr.cc +0 -28
  251. package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_ptr.js +0 -7
  252. package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_sum.cc +0 -237
  253. package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_sum.js +0 -59
  254. package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_unref.cc +0 -53
  255. package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_unref.js +0 -53
  256. package/vendor/node-addon-api/test/typedarray-bigint.js +0 -58
  257. package/vendor/node-addon-api/test/typedarray.cc +0 -216
  258. package/vendor/node-addon-api/test/typedarray.js +0 -69
  259. package/vendor/node-addon-api/test/version_management.cc +0 -27
  260. package/vendor/node-addon-api/test/version_management.js +0 -31
  261. package/vendor/node-addon-api/unit-test/README.md +0 -28
  262. package/vendor/node-addon-api/unit-test/binding-file-template.js +0 -39
  263. package/vendor/node-addon-api/unit-test/binding.gyp +0 -72
  264. package/vendor/node-addon-api/unit-test/exceptions.js +0 -32
  265. package/vendor/node-addon-api/unit-test/generate-binding-cc.js +0 -61
  266. package/vendor/node-addon-api/unit-test/injectTestParams.js +0 -101
  267. package/vendor/node-addon-api/unit-test/listOfTestModules.js +0 -88
  268. package/vendor/node-addon-api/unit-test/matchModules.js +0 -65
  269. package/vendor/node-addon-api/unit-test/setup.js +0 -13
  270. package/vendor/node-addon-api/unit-test/spawnTask.js +0 -26
  271. package/vendor/node-addon-api/unit-test/test.js +0 -30
package/README.md CHANGED
@@ -16,36 +16,37 @@ Koffi is a fast and easy-to-use FFI module for Node.js, with support for primiti
16
16
 
17
17
  After the release of version 1.0, the following features are planned:
18
18
 
19
- * 1.1: C to JS callbacks
20
- * 1.2: Support fixed array types
19
+ * 1.1: Asynchronous calls
20
+ * 1.2: Fixed-size array types
21
+ * 1.3: C to JS callbacks
21
22
 
22
23
  The following platforms __are officially supported and tested__ at the moment:
23
24
 
24
- Platoform | Architecture | JS to C | C to JS (callback) | Pre-built binary
25
- --------- | -------------------------------- | ------- | ------------------ | ----------------
26
- Windows | x86 (cdecl, stdcall, fastcall) | 🟩 | 🟥 | Yes
27
- Windows | x86_64 | 🟩 | 🟥 | Yes
28
- Linux | x86 | 🟩 | 🟥 | Yes
29
- Linux | x86_64 | 🟩 | 🟥 | Yes
30
- Linux | ARM32+VFP Little Endian | 🟩 | 🟥 | Yes
31
- Linux | ARM64 Little Endian | 🟩 | 🟥 | Yes
32
- FreeBSD | x86 | 🟩 | 🟥 | Yes
33
- FreeBSD | x86_64 | 🟩 | 🟥 | Yes
34
- FreeBSD | ARM64 Little Endian | 🟩 | 🟥 | Yes
35
- macOS | x86_64 | 🟩 | 🟥 | Yes
36
- macOS | ARM64 (M1) Little Endian | 🟩 | 🟥 | No
37
- OpenBSD | x86_64 | 🟧 | 🟥 | No
38
- OpenBSD | x86 | 🟧 | 🟥 | No
39
- OpenBSD | ARM64 Little Endian | 🟧 | 🟥 | No
40
- NetBSD | x86_64 | 🟧 | 🟥 | No
41
- NetBSD | x86 | 🟧 | 🟥 | No
42
- NetBSD | ARM64 Little Endian | 🟧 | 🟥 | No
25
+ Platform | Architecture | Sync calls | Async calls | Callbacks | Pre-built binary
26
+ --------- | -------------------------------- | ---------- | ----------- | --------- | ----------------
27
+ Windows | x86 (cdecl, stdcall, fastcall) | 🟩 Yes | 🟩 Yes | 🟥 No | 🟩 Yes
28
+ Windows | x86_64 | 🟩 Yes | 🟩 Yes | 🟥 No | 🟩 Yes
29
+ Linux | x86 | 🟩 Yes | 🟩 Yes | 🟥 No | 🟩 Yes
30
+ Linux | x86_64 | 🟩 Yes | 🟩 Yes | 🟥 No | 🟩 Yes
31
+ Linux | ARM32+VFP Little Endian | 🟩 Yes | 🟩 Yes | 🟥 No | 🟩 Yes
32
+ Linux | ARM64 Little Endian | 🟩 Yes | 🟩 Yes | 🟥 No | 🟩 Yes
33
+ FreeBSD | x86 | 🟩 Yes | 🟩 Yes | 🟥 No | 🟩 Yes
34
+ FreeBSD | x86_64 | 🟩 Yes | 🟩 Yes | 🟥 No | 🟩 Yes
35
+ FreeBSD | ARM64 Little Endian | 🟩 Yes | 🟩 Yes | 🟥 No | 🟩 Yes
36
+ macOS | x86_64 | 🟩 Yes | 🟩 Yes | 🟥 No | 🟩 Yes
37
+ macOS | ARM64 (M1) Little Endian | 🟩 Yes | 🟩 Yes | 🟥 No | 🟥 No
38
+ OpenBSD | x86_64 | 🟧 Maybe | 🟧 Maybe | 🟥 No | 🟥 No
39
+ OpenBSD | x86 | 🟧 Maybe | 🟧 Maybe | 🟥 No | 🟥 No
40
+ OpenBSD | ARM64 Little Endian | 🟧 Maybe | 🟧 Maybe | 🟥 No | 🟥 No
41
+ NetBSD | x86_64 | 🟧 Maybe | 🟧 Maybe | 🟥 No | 🟥 No
42
+ NetBSD | x86 | 🟧 Maybe | 🟧 Maybe | 🟥 No | 🟥 No
43
+ NetBSD | ARM64 Little Endian | 🟧 Maybe | 🟧 Maybe | 🟥 No | 🟥 No
43
44
 
44
45
  🟩 Tested, fully operational
45
46
  🟧 May work, but not actively tested
46
47
  🟥 Does not work yet
47
48
 
48
- This is still in development, bugs are to expected. More tests will come in the near future.
49
+ This is still in development, bugs are to be expected. More tests will come in the near future.
49
50
 
50
51
  # Get started
51
52
 
@@ -226,6 +227,31 @@ const printf = lib.func('printf', 'int', ['string', '...']);
226
227
  printf('Integer %d, double %g, string %s', 'int', 6, 'double', 8.5, 'string', 'THE END');
227
228
  ```
228
229
 
230
+ ## Asynchronous calls
231
+
232
+ You can issue asynchronous calls by calling the function through its async member.
233
+ In this case, you need to provide a callback function as the last argument, with
234
+ `(err, res)` parameters.
235
+
236
+ ```js
237
+ const koffi = require('koffi');
238
+ const lib = koffi.load('libc.so.6');
239
+
240
+ const atoi = lib.func('int atoi(const char *str)');
241
+
242
+ atoi.async('1257', (err, res) => {
243
+ console.log('Result:', res);
244
+ })
245
+ console.log('Hello World!');
246
+
247
+ // This program will print "Hello World!", and then "Result: 1257"
248
+ ```
249
+
250
+ You can easily convert this callback-style async function with `util.promisify()` from the
251
+ Node.js standard library.
252
+
253
+ Variadic functions do not support async.
254
+
229
255
  ## Callbacks
230
256
 
231
257
  Koffi does not yet support passing JS functions as callbacks. This is planned for version 1.1.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "koffi",
3
- "version": "1.0.3",
3
+ "version": "1.1.0-beta.0",
4
4
  "description": "Fast and simple FFI (foreign function interface) for Node.js",
5
5
  "keywords": [
6
6
  "foreign",
package/qemu/qemu.js CHANGED
@@ -430,16 +430,22 @@ async function copy(func) {
430
430
  let copied = true;
431
431
 
432
432
  for (let directory of func(machine)) {
433
- try {
434
- await machine.ssh.exec('rm', ['-rf', directory]);
435
- } catch (err) {
436
- // Fails often on Windows (busy directory or whatever), but rarely a problem
433
+ for (let i = 0; i < 10; i++) {
434
+ try {
435
+ await machine.ssh.exec('rm', ['-rf', directory]);
436
+ break;
437
+ } catch (err) {
438
+ // Fails often on Windows (busy directory or whatever), but rarely a problem
439
+
440
+ await wait(1000);
441
+ continue;
442
+ }
437
443
  }
438
444
 
439
445
  try {
440
446
  await machine.ssh.putDirectory(snapshot_dir, directory, {
441
447
  recursive: true,
442
- concurrency: 4
448
+ concurrency: (process.platform != 'win32') ? 4 : 1
443
449
  });
444
450
  } catch (err) {
445
451
  ignore.add(machine);
@@ -35,8 +35,9 @@
35
35
  "Build": "node ../cnoke/cnoke.js -C test"
36
36
  },
37
37
  "commands": {
38
+ "Test Sync": "node test/sync.js",
39
+ "Test Async": "node test/async.js",
38
40
  "Test Raylib": "xvfb-run node test/raylib.js",
39
- "Test Misc": "node test/misc.js",
40
41
  "Test SQLite": "node test/sqlite.js"
41
42
  }
42
43
  }
@@ -79,8 +80,9 @@
79
80
  "Build": "node ../cnoke/cnoke.js -C test"
80
81
  },
81
82
  "commands": {
83
+ "Test Sync": "node test/sync.js",
84
+ "Test Async": "node test/async.js",
82
85
  "Test Raylib": "xvfb-run node test/raylib.js",
83
- "Test Misc": "node test/misc.js",
84
86
  "Test SQLite": "node test/sqlite.js"
85
87
  }
86
88
  }
@@ -123,8 +125,9 @@
123
125
  "Build": "node ../cnoke/cnoke.js -C test"
124
126
  },
125
127
  "commands": {
128
+ "Test Sync": "node test/sync.js",
129
+ "Test Async": "node test/async.js",
126
130
  "Test Raylib": "xvfb-run node test/raylib.js",
127
- "Test Misc": "node test/misc.js",
128
131
  "Test SQLite": "node test/sqlite.js"
129
132
  }
130
133
  }
@@ -167,8 +170,9 @@
167
170
  "Build": "node ../cnoke/cnoke.js -C test"
168
171
  },
169
172
  "commands": {
173
+ "Test Sync": "node test/sync.js",
174
+ "Test Async": "node test/async.js",
170
175
  "Test Raylib": "xvfb-run node test/raylib.js",
171
- "Test Misc": "node test/misc.js",
172
176
  "Test SQLite": "node test/sqlite.js"
173
177
  }
174
178
  }
@@ -218,8 +222,9 @@
218
222
  "Build": "C:\\Node32\\node32.cmd node ../cnoke/cnoke.js -C test"
219
223
  },
220
224
  "commands": {
225
+ "Test Sync": "C:\\Node32\\node32.cmd node test/sync.js",
226
+ "Test Async": "C:\\Node32\\node32.cmd node test/async.js",
221
227
  "Test Raylib": "seatsh C:\\Node32\\node32.cmd node test/raylib.js",
222
- "Test Misc": "C:\\Node32\\node32.cmd node test/misc.js",
223
228
  "Test SQLite": "C:\\Node32\\node32.cmd node test/sqlite.js"
224
229
  }
225
230
  },
@@ -230,8 +235,9 @@
230
235
  "Build": "C:\\Node64\\node64.cmd node ../cnoke/cnoke.js -C test"
231
236
  },
232
237
  "commands": {
238
+ "Test Sync": "C:\\Node64\\node64.cmd node test/sync.js",
239
+ "Test Async": "C:\\Node64\\node64.cmd node test/async.js",
233
240
  "Test Raylib": "seatsh C:\\Node64\\node64.cmd node test/raylib.js",
234
- "Test Misc": "C:\\Node64\\node64.cmd node test/misc.js",
235
241
  "Test SQLite": "C:\\Node64\\node64.cmd node test/sqlite.js"
236
242
  }
237
243
  }
@@ -274,8 +280,9 @@
274
280
  "Build": "node ../cnoke/cnoke.js -C test"
275
281
  },
276
282
  "commands": {
283
+ "Test Sync": "node test/sync.js",
284
+ "Test Async": "node test/async.js",
277
285
  "Test Raylib": "xvfb-run node test/raylib.js",
278
- "Test Misc": "node test/misc.js",
279
286
  "Test SQLite": "node test/sqlite.js"
280
287
  }
281
288
  }
@@ -318,8 +325,9 @@
318
325
  "Build": "node ../cnoke/cnoke.js -C test"
319
326
  },
320
327
  "commands": {
328
+ "Test Sync": "node test/sync.js",
329
+ "Test Async": "node test/async.js",
321
330
  "Test Raylib": "xvfb-run node test/raylib.js",
322
- "Test Misc": "node test/misc.js",
323
331
  "Test SQLite": "node test/sqlite.js"
324
332
  }
325
333
  }
@@ -362,8 +370,9 @@
362
370
  "Build": "node ../cnoke/cnoke.js -C test"
363
371
  },
364
372
  "commands": {
373
+ "Test Sync": "node test/sync.js",
374
+ "Test Async": "node test/async.js",
365
375
  "Test Raylib": "xvfb-run node test/raylib.js",
366
- "Test Misc": "node test/misc.js",
367
376
  "Test SQLite": "node test/sqlite.js"
368
377
  }
369
378
  }
@@ -406,7 +415,8 @@
406
415
  "Build": "PATH=/usr/local/bin:/usr/bin:/bin SDKROOT=/Library/Developer/CommandLineTools/SDKs/MacOSX11.3.sdk node ../cnoke/cnoke.js -C test"
407
416
  },
408
417
  "commands": {
409
- "Test Misc": "PATH=/usr/local/bin:/usr/bin:/bin node test/misc.js",
418
+ "Test Sync": "PATH=/usr/local/bin:/usr/bin:/bin node test/sync.js",
419
+ "Test Async": "PATH=/usr/local/bin:/usr/bin:/bin node test/async.js",
410
420
  "Test SQLite": "PATH=/usr/local/bin:/usr/bin:/bin node test/sqlite.js"
411
421
  }
412
422
  }