@scriptc/runtime 0.0.0 → 0.0.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 (416) hide show
  1. package/LICENSE +202 -0
  2. package/package.json +16 -6
  3. package/src/scr_array.c +488 -0
  4. package/src/scr_assert.c +1393 -0
  5. package/src/scr_async.c +2593 -0
  6. package/src/scr_async_dyn.c +607 -0
  7. package/src/scr_bytes.c +1425 -0
  8. package/src/scr_bytes_io.c +161 -0
  9. package/src/scr_child.c +3587 -0
  10. package/src/scr_closure.c +214 -0
  11. package/src/scr_console.c +143 -0
  12. package/src/scr_cycle.c +218 -0
  13. package/src/scr_dc.c +805 -0
  14. package/src/scr_dgram.c +1007 -0
  15. package/src/scr_dyn_handle.c +154 -0
  16. package/src/scr_dyn_invoke.c +644 -0
  17. package/src/scr_error.c +332 -0
  18. package/src/scr_events.c +714 -0
  19. package/src/scr_events_emitter.c +699 -0
  20. package/src/scr_exception.c +242 -0
  21. package/src/scr_fetch.c +1130 -0
  22. package/src/scr_fetch_curl.c +654 -0
  23. package/src/scr_http.c +3482 -0
  24. package/src/scr_http2.c +3030 -0
  25. package/src/scr_inspect.c +803 -0
  26. package/src/scr_inspect_island.c +51 -0
  27. package/src/scr_island.c +9363 -0
  28. package/src/scr_json.c +2151 -0
  29. package/src/scr_lib.c +3612 -0
  30. package/src/scr_loop_epoll.c +241 -0
  31. package/src/scr_loop_kqueue.c +121 -0
  32. package/src/scr_loop_wsapoll.c +208 -0
  33. package/src/scr_map.c +591 -0
  34. package/src/scr_net.c +3017 -0
  35. package/src/scr_net_island.c +458 -0
  36. package/src/scr_number.c +115 -0
  37. package/src/scr_object.c +25 -0
  38. package/src/scr_path.c +1266 -0
  39. package/src/scr_platform.h +119 -0
  40. package/src/scr_readline.c +287 -0
  41. package/src/scr_regex.c +1080 -0
  42. package/src/scr_runtime.h +5046 -0
  43. package/src/scr_stream.c +2877 -0
  44. package/src/scr_string.c +1264 -0
  45. package/src/scr_symbol.c +132 -0
  46. package/src/scr_test.c +662 -0
  47. package/src/scr_tls.c +1520 -0
  48. package/src/scr_union.c +105 -0
  49. package/src/scr_url.c +911 -0
  50. package/src/scr_url_internal.h +29 -0
  51. package/src/scr_url_params.c +561 -0
  52. package/src/scr_watch.c +568 -0
  53. package/src/scr_web.c +1778 -0
  54. package/src/scr_win.c +76 -0
  55. package/src/scr_zlib.c +197 -0
  56. package/src/scr_zlib_island.c +15 -0
  57. package/vendor/README.md +52 -0
  58. package/vendor/curl/COPYRIGHT +534 -0
  59. package/vendor/curl/include/curl/curl.h +3214 -0
  60. package/vendor/curl/include/curl/curlver.h +79 -0
  61. package/vendor/curl/include/curl/easy.h +125 -0
  62. package/vendor/curl/include/curl/header.h +74 -0
  63. package/vendor/curl/include/curl/mprintf.h +52 -0
  64. package/vendor/curl/include/curl/multi.h +460 -0
  65. package/vendor/curl/include/curl/options.h +70 -0
  66. package/vendor/curl/include/curl/stdcheaders.h +35 -0
  67. package/vendor/curl/include/curl/system.h +508 -0
  68. package/vendor/curl/include/curl/typecheck-gcc.h +716 -0
  69. package/vendor/curl/include/curl/urlapi.h +149 -0
  70. package/vendor/curl/include/curl/websockets.h +84 -0
  71. package/vendor/mbedtls/LICENSE +553 -0
  72. package/vendor/mbedtls/include/CMakeLists.txt +22 -0
  73. package/vendor/mbedtls/include/mbedtls/aes.h +631 -0
  74. package/vendor/mbedtls/include/mbedtls/aria.h +343 -0
  75. package/vendor/mbedtls/include/mbedtls/asn1.h +642 -0
  76. package/vendor/mbedtls/include/mbedtls/asn1write.h +390 -0
  77. package/vendor/mbedtls/include/mbedtls/base64.h +82 -0
  78. package/vendor/mbedtls/include/mbedtls/bignum.h +1088 -0
  79. package/vendor/mbedtls/include/mbedtls/block_cipher.h +76 -0
  80. package/vendor/mbedtls/include/mbedtls/build_info.h +194 -0
  81. package/vendor/mbedtls/include/mbedtls/camellia.h +305 -0
  82. package/vendor/mbedtls/include/mbedtls/ccm.h +526 -0
  83. package/vendor/mbedtls/include/mbedtls/chacha20.h +209 -0
  84. package/vendor/mbedtls/include/mbedtls/chachapoly.h +351 -0
  85. package/vendor/mbedtls/include/mbedtls/check_config.h +1149 -0
  86. package/vendor/mbedtls/include/mbedtls/cipher.h +1250 -0
  87. package/vendor/mbedtls/include/mbedtls/cmac.h +246 -0
  88. package/vendor/mbedtls/include/mbedtls/compat-2.x.h +46 -0
  89. package/vendor/mbedtls/include/mbedtls/config_adjust_legacy_crypto.h +578 -0
  90. package/vendor/mbedtls/include/mbedtls/config_adjust_legacy_from_psa.h +873 -0
  91. package/vendor/mbedtls/include/mbedtls/config_adjust_psa_from_legacy.h +359 -0
  92. package/vendor/mbedtls/include/mbedtls/config_adjust_psa_superset_legacy.h +145 -0
  93. package/vendor/mbedtls/include/mbedtls/config_adjust_ssl.h +91 -0
  94. package/vendor/mbedtls/include/mbedtls/config_adjust_x509.h +35 -0
  95. package/vendor/mbedtls/include/mbedtls/config_psa.h +61 -0
  96. package/vendor/mbedtls/include/mbedtls/constant_time.h +36 -0
  97. package/vendor/mbedtls/include/mbedtls/ctr_drbg.h +596 -0
  98. package/vendor/mbedtls/include/mbedtls/debug.h +156 -0
  99. package/vendor/mbedtls/include/mbedtls/des.h +385 -0
  100. package/vendor/mbedtls/include/mbedtls/dhm.h +972 -0
  101. package/vendor/mbedtls/include/mbedtls/ecdh.h +455 -0
  102. package/vendor/mbedtls/include/mbedtls/ecdsa.h +674 -0
  103. package/vendor/mbedtls/include/mbedtls/ecjpake.h +298 -0
  104. package/vendor/mbedtls/include/mbedtls/ecp.h +1517 -0
  105. package/vendor/mbedtls/include/mbedtls/entropy.h +274 -0
  106. package/vendor/mbedtls/include/mbedtls/error.h +201 -0
  107. package/vendor/mbedtls/include/mbedtls/gcm.h +387 -0
  108. package/vendor/mbedtls/include/mbedtls/hkdf.h +124 -0
  109. package/vendor/mbedtls/include/mbedtls/hmac_drbg.h +434 -0
  110. package/vendor/mbedtls/include/mbedtls/lms.h +440 -0
  111. package/vendor/mbedtls/include/mbedtls/mbedtls_config.h +4446 -0
  112. package/vendor/mbedtls/include/mbedtls/md.h +526 -0
  113. package/vendor/mbedtls/include/mbedtls/md5.h +190 -0
  114. package/vendor/mbedtls/include/mbedtls/memory_buffer_alloc.h +142 -0
  115. package/vendor/mbedtls/include/mbedtls/net_sockets.h +299 -0
  116. package/vendor/mbedtls/include/mbedtls/nist_kw.h +166 -0
  117. package/vendor/mbedtls/include/mbedtls/oid.h +727 -0
  118. package/vendor/mbedtls/include/mbedtls/pem.h +160 -0
  119. package/vendor/mbedtls/include/mbedtls/pk.h +1303 -0
  120. package/vendor/mbedtls/include/mbedtls/pkcs12.h +186 -0
  121. package/vendor/mbedtls/include/mbedtls/pkcs5.h +198 -0
  122. package/vendor/mbedtls/include/mbedtls/pkcs7.h +252 -0
  123. package/vendor/mbedtls/include/mbedtls/platform.h +516 -0
  124. package/vendor/mbedtls/include/mbedtls/platform_time.h +79 -0
  125. package/vendor/mbedtls/include/mbedtls/platform_util.h +247 -0
  126. package/vendor/mbedtls/include/mbedtls/poly1305.h +168 -0
  127. package/vendor/mbedtls/include/mbedtls/private_access.h +20 -0
  128. package/vendor/mbedtls/include/mbedtls/psa_util.h +207 -0
  129. package/vendor/mbedtls/include/mbedtls/ripemd160.h +136 -0
  130. package/vendor/mbedtls/include/mbedtls/rsa.h +1170 -0
  131. package/vendor/mbedtls/include/mbedtls/sha1.h +219 -0
  132. package/vendor/mbedtls/include/mbedtls/sha256.h +200 -0
  133. package/vendor/mbedtls/include/mbedtls/sha3.h +172 -0
  134. package/vendor/mbedtls/include/mbedtls/sha512.h +208 -0
  135. package/vendor/mbedtls/include/mbedtls/ssl.h +5887 -0
  136. package/vendor/mbedtls/include/mbedtls/ssl_cache.h +187 -0
  137. package/vendor/mbedtls/include/mbedtls/ssl_ciphersuites.h +482 -0
  138. package/vendor/mbedtls/include/mbedtls/ssl_cookie.h +106 -0
  139. package/vendor/mbedtls/include/mbedtls/ssl_ticket.h +199 -0
  140. package/vendor/mbedtls/include/mbedtls/threading.h +167 -0
  141. package/vendor/mbedtls/include/mbedtls/timing.h +94 -0
  142. package/vendor/mbedtls/include/mbedtls/version.h +78 -0
  143. package/vendor/mbedtls/include/mbedtls/x509.h +500 -0
  144. package/vendor/mbedtls/include/mbedtls/x509_crl.h +184 -0
  145. package/vendor/mbedtls/include/mbedtls/x509_crt.h +1208 -0
  146. package/vendor/mbedtls/include/mbedtls/x509_csr.h +382 -0
  147. package/vendor/mbedtls/include/psa/build_info.h +20 -0
  148. package/vendor/mbedtls/include/psa/crypto.h +4998 -0
  149. package/vendor/mbedtls/include/psa/crypto_adjust_auto_enabled.h +31 -0
  150. package/vendor/mbedtls/include/psa/crypto_adjust_config_dependencies.h +51 -0
  151. package/vendor/mbedtls/include/psa/crypto_adjust_config_key_pair_types.h +101 -0
  152. package/vendor/mbedtls/include/psa/crypto_adjust_config_synonyms.h +49 -0
  153. package/vendor/mbedtls/include/psa/crypto_builtin_composites.h +214 -0
  154. package/vendor/mbedtls/include/psa/crypto_builtin_key_derivation.h +118 -0
  155. package/vendor/mbedtls/include/psa/crypto_builtin_primitives.h +114 -0
  156. package/vendor/mbedtls/include/psa/crypto_compat.h +230 -0
  157. package/vendor/mbedtls/include/psa/crypto_config.h +145 -0
  158. package/vendor/mbedtls/include/psa/crypto_driver_common.h +44 -0
  159. package/vendor/mbedtls/include/psa/crypto_driver_contexts_composites.h +151 -0
  160. package/vendor/mbedtls/include/psa/crypto_driver_contexts_key_derivation.h +52 -0
  161. package/vendor/mbedtls/include/psa/crypto_driver_contexts_primitives.h +105 -0
  162. package/vendor/mbedtls/include/psa/crypto_extra.h +2145 -0
  163. package/vendor/mbedtls/include/psa/crypto_legacy.h +88 -0
  164. package/vendor/mbedtls/include/psa/crypto_platform.h +102 -0
  165. package/vendor/mbedtls/include/psa/crypto_se_driver.h +1383 -0
  166. package/vendor/mbedtls/include/psa/crypto_sizes.h +1319 -0
  167. package/vendor/mbedtls/include/psa/crypto_struct.h +527 -0
  168. package/vendor/mbedtls/include/psa/crypto_types.h +508 -0
  169. package/vendor/mbedtls/include/psa/crypto_values.h +2782 -0
  170. package/vendor/mbedtls/library/aes.c +2294 -0
  171. package/vendor/mbedtls/library/aesce.c +624 -0
  172. package/vendor/mbedtls/library/aesce.h +136 -0
  173. package/vendor/mbedtls/library/aesni.c +846 -0
  174. package/vendor/mbedtls/library/aesni.h +162 -0
  175. package/vendor/mbedtls/library/alignment.h +704 -0
  176. package/vendor/mbedtls/library/aria.c +969 -0
  177. package/vendor/mbedtls/library/asn1parse.c +468 -0
  178. package/vendor/mbedtls/library/asn1write.c +440 -0
  179. package/vendor/mbedtls/library/base64.c +322 -0
  180. package/vendor/mbedtls/library/base64_internal.h +45 -0
  181. package/vendor/mbedtls/library/bignum.c +2583 -0
  182. package/vendor/mbedtls/library/bignum_core.c +1240 -0
  183. package/vendor/mbedtls/library/bignum_core.h +872 -0
  184. package/vendor/mbedtls/library/bignum_core_invasive.h +38 -0
  185. package/vendor/mbedtls/library/bignum_internal.h +122 -0
  186. package/vendor/mbedtls/library/bignum_mod.c +394 -0
  187. package/vendor/mbedtls/library/bignum_mod.h +452 -0
  188. package/vendor/mbedtls/library/bignum_mod_raw.c +276 -0
  189. package/vendor/mbedtls/library/bignum_mod_raw.h +416 -0
  190. package/vendor/mbedtls/library/bignum_mod_raw_invasive.h +34 -0
  191. package/vendor/mbedtls/library/block_cipher.c +207 -0
  192. package/vendor/mbedtls/library/block_cipher_internal.h +99 -0
  193. package/vendor/mbedtls/library/bn_mul.h +1094 -0
  194. package/vendor/mbedtls/library/camellia.c +1058 -0
  195. package/vendor/mbedtls/library/ccm.c +777 -0
  196. package/vendor/mbedtls/library/chacha20.c +563 -0
  197. package/vendor/mbedtls/library/chacha20_internal.h +23 -0
  198. package/vendor/mbedtls/library/chachapoly.c +487 -0
  199. package/vendor/mbedtls/library/check_crypto_config.h +136 -0
  200. package/vendor/mbedtls/library/cipher.c +1712 -0
  201. package/vendor/mbedtls/library/cipher_invasive.h +28 -0
  202. package/vendor/mbedtls/library/cipher_wrap.c +2482 -0
  203. package/vendor/mbedtls/library/cipher_wrap.h +178 -0
  204. package/vendor/mbedtls/library/cmac.c +1067 -0
  205. package/vendor/mbedtls/library/common.h +487 -0
  206. package/vendor/mbedtls/library/constant_time.c +247 -0
  207. package/vendor/mbedtls/library/constant_time_impl.h +541 -0
  208. package/vendor/mbedtls/library/constant_time_internal.h +579 -0
  209. package/vendor/mbedtls/library/ctr.h +35 -0
  210. package/vendor/mbedtls/library/ctr_drbg.c +1016 -0
  211. package/vendor/mbedtls/library/debug.c +475 -0
  212. package/vendor/mbedtls/library/debug_internal.h +185 -0
  213. package/vendor/mbedtls/library/des.c +1042 -0
  214. package/vendor/mbedtls/library/dhm.c +700 -0
  215. package/vendor/mbedtls/library/ecdh.c +696 -0
  216. package/vendor/mbedtls/library/ecdsa.c +858 -0
  217. package/vendor/mbedtls/library/ecjpake.c +1216 -0
  218. package/vendor/mbedtls/library/ecp.c +3674 -0
  219. package/vendor/mbedtls/library/ecp_curves.c +6125 -0
  220. package/vendor/mbedtls/library/ecp_curves_new.c +9 -0
  221. package/vendor/mbedtls/library/ecp_internal_alt.h +287 -0
  222. package/vendor/mbedtls/library/ecp_invasive.h +305 -0
  223. package/vendor/mbedtls/library/entropy.c +680 -0
  224. package/vendor/mbedtls/library/entropy_poll.c +233 -0
  225. package/vendor/mbedtls/library/entropy_poll.h +64 -0
  226. package/vendor/mbedtls/library/error.c +878 -0
  227. package/vendor/mbedtls/library/gcm.c +1330 -0
  228. package/vendor/mbedtls/library/hkdf.c +161 -0
  229. package/vendor/mbedtls/library/hmac_drbg.c +633 -0
  230. package/vendor/mbedtls/library/lmots.c +789 -0
  231. package/vendor/mbedtls/library/lmots.h +288 -0
  232. package/vendor/mbedtls/library/lms.c +778 -0
  233. package/vendor/mbedtls/library/md.c +1108 -0
  234. package/vendor/mbedtls/library/md5.c +426 -0
  235. package/vendor/mbedtls/library/md_psa.h +26 -0
  236. package/vendor/mbedtls/library/md_wrap.h +46 -0
  237. package/vendor/mbedtls/library/memory_buffer_alloc.c +751 -0
  238. package/vendor/mbedtls/library/mps_common.h +181 -0
  239. package/vendor/mbedtls/library/mps_error.h +89 -0
  240. package/vendor/mbedtls/library/mps_reader.c +538 -0
  241. package/vendor/mbedtls/library/mps_reader.h +366 -0
  242. package/vendor/mbedtls/library/mps_trace.c +112 -0
  243. package/vendor/mbedtls/library/mps_trace.h +154 -0
  244. package/vendor/mbedtls/library/net_sockets.c +694 -0
  245. package/vendor/mbedtls/library/nist_kw.c +729 -0
  246. package/vendor/mbedtls/library/oid.c +1166 -0
  247. package/vendor/mbedtls/library/padlock.c +157 -0
  248. package/vendor/mbedtls/library/padlock.h +111 -0
  249. package/vendor/mbedtls/library/pem.c +554 -0
  250. package/vendor/mbedtls/library/pk.c +1602 -0
  251. package/vendor/mbedtls/library/pk_ecc.c +261 -0
  252. package/vendor/mbedtls/library/pk_internal.h +241 -0
  253. package/vendor/mbedtls/library/pk_wrap.c +1618 -0
  254. package/vendor/mbedtls/library/pk_wrap.h +138 -0
  255. package/vendor/mbedtls/library/pkcs12.c +437 -0
  256. package/vendor/mbedtls/library/pkcs5.c +500 -0
  257. package/vendor/mbedtls/library/pkcs7.c +787 -0
  258. package/vendor/mbedtls/library/pkparse.c +1392 -0
  259. package/vendor/mbedtls/library/pkwrite.c +631 -0
  260. package/vendor/mbedtls/library/pkwrite.h +121 -0
  261. package/vendor/mbedtls/library/platform.c +402 -0
  262. package/vendor/mbedtls/library/platform_util.c +258 -0
  263. package/vendor/mbedtls/library/poly1305.c +492 -0
  264. package/vendor/mbedtls/library/psa_crypto.c +9532 -0
  265. package/vendor/mbedtls/library/psa_crypto_aead.c +646 -0
  266. package/vendor/mbedtls/library/psa_crypto_aead.h +499 -0
  267. package/vendor/mbedtls/library/psa_crypto_cipher.c +747 -0
  268. package/vendor/mbedtls/library/psa_crypto_cipher.h +316 -0
  269. package/vendor/mbedtls/library/psa_crypto_client.c +22 -0
  270. package/vendor/mbedtls/library/psa_crypto_core.h +983 -0
  271. package/vendor/mbedtls/library/psa_crypto_core_common.h +52 -0
  272. package/vendor/mbedtls/library/psa_crypto_driver_wrappers.h +2896 -0
  273. package/vendor/mbedtls/library/psa_crypto_driver_wrappers_no_static.c +256 -0
  274. package/vendor/mbedtls/library/psa_crypto_driver_wrappers_no_static.h +31 -0
  275. package/vendor/mbedtls/library/psa_crypto_ecp.c +594 -0
  276. package/vendor/mbedtls/library/psa_crypto_ecp.h +267 -0
  277. package/vendor/mbedtls/library/psa_crypto_ffdh.c +361 -0
  278. package/vendor/mbedtls/library/psa_crypto_ffdh.h +131 -0
  279. package/vendor/mbedtls/library/psa_crypto_hash.c +470 -0
  280. package/vendor/mbedtls/library/psa_crypto_hash.h +211 -0
  281. package/vendor/mbedtls/library/psa_crypto_invasive.h +92 -0
  282. package/vendor/mbedtls/library/psa_crypto_its.h +131 -0
  283. package/vendor/mbedtls/library/psa_crypto_mac.c +505 -0
  284. package/vendor/mbedtls/library/psa_crypto_mac.h +264 -0
  285. package/vendor/mbedtls/library/psa_crypto_pake.c +571 -0
  286. package/vendor/mbedtls/library/psa_crypto_pake.h +159 -0
  287. package/vendor/mbedtls/library/psa_crypto_random.c +181 -0
  288. package/vendor/mbedtls/library/psa_crypto_random.h +72 -0
  289. package/vendor/mbedtls/library/psa_crypto_random_impl.h +200 -0
  290. package/vendor/mbedtls/library/psa_crypto_rsa.c +714 -0
  291. package/vendor/mbedtls/library/psa_crypto_rsa.h +321 -0
  292. package/vendor/mbedtls/library/psa_crypto_se.c +373 -0
  293. package/vendor/mbedtls/library/psa_crypto_se.h +192 -0
  294. package/vendor/mbedtls/library/psa_crypto_slot_management.c +1137 -0
  295. package/vendor/mbedtls/library/psa_crypto_slot_management.h +344 -0
  296. package/vendor/mbedtls/library/psa_crypto_storage.c +481 -0
  297. package/vendor/mbedtls/library/psa_crypto_storage.h +392 -0
  298. package/vendor/mbedtls/library/psa_its_file.c +254 -0
  299. package/vendor/mbedtls/library/psa_util.c +614 -0
  300. package/vendor/mbedtls/library/psa_util_internal.h +100 -0
  301. package/vendor/mbedtls/library/ripemd160.c +490 -0
  302. package/vendor/mbedtls/library/rsa.c +3121 -0
  303. package/vendor/mbedtls/library/rsa_alt_helpers.c +455 -0
  304. package/vendor/mbedtls/library/rsa_alt_helpers.h +209 -0
  305. package/vendor/mbedtls/library/rsa_internal.h +188 -0
  306. package/vendor/mbedtls/library/sha1.c +480 -0
  307. package/vendor/mbedtls/library/sha256.c +983 -0
  308. package/vendor/mbedtls/library/sha3.c +721 -0
  309. package/vendor/mbedtls/library/sha512.c +1115 -0
  310. package/vendor/mbedtls/library/ssl_cache.c +410 -0
  311. package/vendor/mbedtls/library/ssl_ciphersuites.c +2050 -0
  312. package/vendor/mbedtls/library/ssl_ciphersuites_internal.h +154 -0
  313. package/vendor/mbedtls/library/ssl_client.c +1023 -0
  314. package/vendor/mbedtls/library/ssl_client.h +22 -0
  315. package/vendor/mbedtls/library/ssl_cookie.c +384 -0
  316. package/vendor/mbedtls/library/ssl_debug_helpers.h +85 -0
  317. package/vendor/mbedtls/library/ssl_debug_helpers_generated.c +251 -0
  318. package/vendor/mbedtls/library/ssl_misc.h +3198 -0
  319. package/vendor/mbedtls/library/ssl_msg.c +6619 -0
  320. package/vendor/mbedtls/library/ssl_ticket.c +556 -0
  321. package/vendor/mbedtls/library/ssl_tls.c +10234 -0
  322. package/vendor/mbedtls/library/ssl_tls12_client.c +3688 -0
  323. package/vendor/mbedtls/library/ssl_tls12_server.c +4311 -0
  324. package/vendor/mbedtls/library/ssl_tls13_client.c +3208 -0
  325. package/vendor/mbedtls/library/ssl_tls13_generic.c +1793 -0
  326. package/vendor/mbedtls/library/ssl_tls13_invasive.h +23 -0
  327. package/vendor/mbedtls/library/ssl_tls13_keys.c +1918 -0
  328. package/vendor/mbedtls/library/ssl_tls13_keys.h +668 -0
  329. package/vendor/mbedtls/library/ssl_tls13_server.c +3624 -0
  330. package/vendor/mbedtls/library/threading.c +193 -0
  331. package/vendor/mbedtls/library/threading_internal.h +28 -0
  332. package/vendor/mbedtls/library/timing.c +152 -0
  333. package/vendor/mbedtls/library/version.c +32 -0
  334. package/vendor/mbedtls/library/version_features.c +856 -0
  335. package/vendor/mbedtls/library/x509.c +1776 -0
  336. package/vendor/mbedtls/library/x509_create.c +570 -0
  337. package/vendor/mbedtls/library/x509_crl.c +708 -0
  338. package/vendor/mbedtls/library/x509_crt.c +3311 -0
  339. package/vendor/mbedtls/library/x509_csr.c +648 -0
  340. package/vendor/mbedtls/library/x509_internal.h +101 -0
  341. package/vendor/mbedtls/library/x509write.c +174 -0
  342. package/vendor/mbedtls/library/x509write_crt.c +688 -0
  343. package/vendor/mbedtls/library/x509write_csr.c +336 -0
  344. package/vendor/quickjs-ng/CMakeLists.txt +566 -0
  345. package/vendor/quickjs-ng/LICENSE +24 -0
  346. package/vendor/quickjs-ng/README.md +24 -0
  347. package/vendor/quickjs-ng/api-test.c +1195 -0
  348. package/vendor/quickjs-ng/builtin-array-fromasync.h +119 -0
  349. package/vendor/quickjs-ng/builtin-iterator-zip-keyed.h +332 -0
  350. package/vendor/quickjs-ng/builtin-iterator-zip.h +337 -0
  351. package/vendor/quickjs-ng/cutils.h +1998 -0
  352. package/vendor/quickjs-ng/dtoa.c +1619 -0
  353. package/vendor/quickjs-ng/dtoa.h +87 -0
  354. package/vendor/quickjs-ng/gen/function_source.c +81 -0
  355. package/vendor/quickjs-ng/gen/hello.c +53 -0
  356. package/vendor/quickjs-ng/gen/hello_module.c +106 -0
  357. package/vendor/quickjs-ng/gen/repl.c +3036 -0
  358. package/vendor/quickjs-ng/gen/standalone.c +323 -0
  359. package/vendor/quickjs-ng/gen/test_fib.c +81 -0
  360. package/vendor/quickjs-ng/libregexp-opcode.h +73 -0
  361. package/vendor/quickjs-ng/libregexp.c +3474 -0
  362. package/vendor/quickjs-ng/libregexp.h +101 -0
  363. package/vendor/quickjs-ng/libunicode-table.h +5173 -0
  364. package/vendor/quickjs-ng/libunicode.c +2069 -0
  365. package/vendor/quickjs-ng/libunicode.h +172 -0
  366. package/vendor/quickjs-ng/list.h +107 -0
  367. package/vendor/quickjs-ng/lre-test.c +52 -0
  368. package/vendor/quickjs-ng/qjs.c +762 -0
  369. package/vendor/quickjs-ng/qjsc.c +673 -0
  370. package/vendor/quickjs-ng/quickjs-atom.h +280 -0
  371. package/vendor/quickjs-ng/quickjs-c-atomics.h +54 -0
  372. package/vendor/quickjs-ng/quickjs-libc.c +5037 -0
  373. package/vendor/quickjs-ng/quickjs-libc.h +87 -0
  374. package/vendor/quickjs-ng/quickjs-opcode.h +377 -0
  375. package/vendor/quickjs-ng/quickjs.c +64041 -0
  376. package/vendor/quickjs-ng/quickjs.h +1447 -0
  377. package/vendor/quickjs-ng/run-test262.c +2374 -0
  378. package/vendor/quickjs-ng/unicode_gen.c +3121 -0
  379. package/vendor/quickjs-ng/unicode_gen_def.h +310 -0
  380. package/vendor/ryu/LICENSE-Boost +23 -0
  381. package/vendor/ryu/common.h +114 -0
  382. package/vendor/ryu/d2s.c +509 -0
  383. package/vendor/ryu/d2s_full_table.h +367 -0
  384. package/vendor/ryu/d2s_intrinsics.h +357 -0
  385. package/vendor/ryu/d2s_small_table.h +186 -0
  386. package/vendor/ryu/digit_table.h +35 -0
  387. package/vendor/ryu/ryu.h +46 -0
  388. package/vendor/zlib/LICENSE +22 -0
  389. package/vendor/zlib/adler32.c +164 -0
  390. package/vendor/zlib/compress.c +75 -0
  391. package/vendor/zlib/crc32.c +1049 -0
  392. package/vendor/zlib/crc32.h +9446 -0
  393. package/vendor/zlib/deflate.c +2139 -0
  394. package/vendor/zlib/deflate.h +377 -0
  395. package/vendor/zlib/gzclose.c +23 -0
  396. package/vendor/zlib/gzguts.h +214 -0
  397. package/vendor/zlib/gzlib.c +582 -0
  398. package/vendor/zlib/gzread.c +602 -0
  399. package/vendor/zlib/gzwrite.c +631 -0
  400. package/vendor/zlib/infback.c +628 -0
  401. package/vendor/zlib/inffast.c +320 -0
  402. package/vendor/zlib/inffast.h +11 -0
  403. package/vendor/zlib/inffixed.h +94 -0
  404. package/vendor/zlib/inflate.c +1526 -0
  405. package/vendor/zlib/inflate.h +126 -0
  406. package/vendor/zlib/inftrees.c +299 -0
  407. package/vendor/zlib/inftrees.h +62 -0
  408. package/vendor/zlib/trees.c +1117 -0
  409. package/vendor/zlib/trees.h +128 -0
  410. package/vendor/zlib/uncompr.c +85 -0
  411. package/vendor/zlib/zconf.h +543 -0
  412. package/vendor/zlib/zlib.h +1938 -0
  413. package/vendor/zlib/zutil.c +299 -0
  414. package/vendor/zlib/zutil.h +254 -0
  415. package/README.md +0 -3
  416. package/index.js +0 -2
@@ -0,0 +1,241 @@
1
+ /* The Linux backend of the platform readiness contract (scr_platform.h):
2
+ * epoll for fd readiness, one timerfd per armed one-shot timer. This is
3
+ * the LIVE Linux poller behind scr_net.c and scr_dgram.c (cc.ts links it
4
+ * alongside scr_loop_kqueue.c whenever those units compile; each TU is
5
+ * empty off its platform). Child-exit wakeups are NOT here: scr_child.c
6
+ * keeps its narrow seam inline (kqueue EVFILT_PROC on BSD, pidfd_open +
7
+ * a dedicated epoll on Linux) because that unit links into every binary
8
+ * and its plumbing never matched the fd/timer poller shape.
9
+ *
10
+ * Design notes:
11
+ * - Interest is keyed by fd with ONE mask under epoll, so the poller keeps
12
+ * a linear fd -> (mask, udata) table and merges read/write interest into
13
+ * EPOLL_CTL_MOD. Linear scan is fine at the units' scale (dozens of fds,
14
+ * drained in 64-event batches today); swap for a hash if profiles say so.
15
+ * - EPOLLHUP/EPOLLERR/EPOLLRDHUP report as READABLE (plus WRITABLE when
16
+ * write interest is armed): the units learn EOF/errors from read()==0 or
17
+ * errno exactly as they do from kqueue's EV_EOF today. Note an fd is in
18
+ * the epoll set ONLY while some interest is armed, so a consumer-less
19
+ * socket can never busy-report HUP.
20
+ * - Timers: EVFILT_TIMER has no epoll analogue, so each armed key owns a
21
+ * TFD_NONBLOCK timerfd registered EPOLLIN in the same epoll set, tagged
22
+ * through the same table (mask=TIMER). Fired timers are disarmed and
23
+ * their timerfd closed at delivery (kqueue's EV_ONESHOT semantics).
24
+ * - Units must scrp_forget a watched fd before close(2) (the contract's
25
+ * epoll obligation). As a second line of defense against a missed
26
+ * forget followed by fd-number reuse, watch self-heals: a MOD that
27
+ * reports ENOENT retries as ADD, an ADD that reports EEXIST retries as
28
+ * MOD — the table entry then matches reality again. */
29
+ #if defined(__linux__)
30
+
31
+ #define _GNU_SOURCE 1
32
+ #include "scr_platform.h"
33
+
34
+ #include <errno.h>
35
+ #include <stdint.h>
36
+ #include <stdlib.h>
37
+ #include <string.h>
38
+ #include <sys/epoll.h>
39
+ #include <sys/timerfd.h>
40
+ #include <unistd.h>
41
+
42
+ /* ── fd/timer poller ─────────────────────────────────────────────────── */
43
+
44
+ typedef struct {
45
+ int fd; /* watched fd, or the timer's timerfd */
46
+ unsigned mask; /* SCRP_READABLE|SCRP_WRITABLE, or SCRP_TIMER */
47
+ void *udata; /* delivery tag; for timers: the arm-time udata */
48
+ void *timer_key; /* timers only: the caller's key */
49
+ } ScrpEntry;
50
+
51
+ struct ScrPoller {
52
+ int ep;
53
+ ScrpEntry *entries;
54
+ size_t n, cap;
55
+ };
56
+
57
+ static ScrpEntry *scrp_find_fd(ScrPoller *p, int fd) {
58
+ for (size_t i = 0; i < p->n; i++)
59
+ if (p->entries[i].fd == fd) return &p->entries[i];
60
+ return NULL;
61
+ }
62
+
63
+ static ScrpEntry *scrp_find_key(ScrPoller *p, void *key) {
64
+ for (size_t i = 0; i < p->n; i++)
65
+ if ((p->entries[i].mask & SCRP_TIMER) != 0 && p->entries[i].timer_key == key) return &p->entries[i];
66
+ return NULL;
67
+ }
68
+
69
+ static void scrp_remove(ScrPoller *p, ScrpEntry *e) {
70
+ size_t i = (size_t)(e - p->entries);
71
+ p->entries[i] = p->entries[p->n - 1];
72
+ p->n--;
73
+ }
74
+
75
+ static bool scrp_push(ScrPoller *p, ScrpEntry e) {
76
+ if (p->n == p->cap) {
77
+ size_t cap = p->cap == 0 ? 16 : p->cap * 2;
78
+ ScrpEntry *grown = realloc(p->entries, cap * sizeof *grown);
79
+ if (grown == NULL) return false;
80
+ p->entries = grown;
81
+ p->cap = cap;
82
+ }
83
+ p->entries[p->n++] = e;
84
+ return true;
85
+ }
86
+
87
+ ScrPoller *scrp_poller_new(void) {
88
+ ScrPoller *p = calloc(1, sizeof *p);
89
+ if (p == NULL) return NULL;
90
+ p->ep = epoll_create1(EPOLL_CLOEXEC);
91
+ if (p->ep < 0) {
92
+ free(p);
93
+ return NULL;
94
+ }
95
+ return p;
96
+ }
97
+
98
+ void scrp_poller_free(ScrPoller *p) {
99
+ if (p == NULL) return;
100
+ for (size_t i = 0; i < p->n; i++)
101
+ if ((p->entries[i].mask & SCRP_TIMER) != 0) close(p->entries[i].fd);
102
+ close(p->ep);
103
+ free(p->entries);
104
+ free(p);
105
+ }
106
+
107
+ int scrp_poller_fd(const ScrPoller *p) { return p->ep; }
108
+
109
+ static uint32_t scrp_epoll_mask(unsigned mask) {
110
+ uint32_t ev = 0;
111
+ if ((mask & SCRP_READABLE) != 0) ev |= EPOLLIN;
112
+ if ((mask & SCRP_WRITABLE) != 0) ev |= EPOLLOUT;
113
+ return ev;
114
+ }
115
+
116
+ static bool scrp_watch(ScrPoller *p, int fd, void *udata, bool on, unsigned bit) {
117
+ ScrpEntry *e = scrp_find_fd(p, fd);
118
+ unsigned mask = e != NULL ? e->mask : 0u;
119
+ unsigned next = on ? (mask | bit) : (mask & ~bit);
120
+ if (next == mask && (e == NULL || e->udata == udata)) {
121
+ if (e != NULL) e->udata = udata;
122
+ return true;
123
+ }
124
+ struct epoll_event ev = {.events = scrp_epoll_mask(next), .data = {.fd = fd}};
125
+ if (e == NULL) {
126
+ if (next == 0) return true; /* unwatch of an unwatched fd: no-op */
127
+ if (!scrp_push(p, (ScrpEntry){fd, next, udata, NULL})) return false;
128
+ int rc = epoll_ctl(p->ep, EPOLL_CTL_ADD, fd, &ev);
129
+ if (rc != 0 && errno == EEXIST) rc = epoll_ctl(p->ep, EPOLL_CTL_MOD, fd, &ev);
130
+ if (rc != 0) {
131
+ scrp_remove(p, &p->entries[p->n - 1]);
132
+ return false;
133
+ }
134
+ return true;
135
+ }
136
+ if (next == 0) {
137
+ (void)epoll_ctl(p->ep, EPOLL_CTL_DEL, fd, NULL);
138
+ scrp_remove(p, e);
139
+ return true;
140
+ }
141
+ int rc = epoll_ctl(p->ep, EPOLL_CTL_MOD, fd, &ev);
142
+ if (rc != 0 && errno == ENOENT) rc = epoll_ctl(p->ep, EPOLL_CTL_ADD, fd, &ev);
143
+ if (rc != 0) return false;
144
+ e->mask = next;
145
+ e->udata = udata; /* last registration wins, both directions */
146
+ return true;
147
+ }
148
+
149
+ bool scrp_watch_read(ScrPoller *p, int fd, void *udata, bool on) {
150
+ return scrp_watch(p, fd, udata, on, SCRP_READABLE);
151
+ }
152
+
153
+ bool scrp_watch_write(ScrPoller *p, int fd, void *udata, bool on) {
154
+ return scrp_watch(p, fd, udata, on, SCRP_WRITABLE);
155
+ }
156
+
157
+ void scrp_forget(ScrPoller *p, int fd) {
158
+ ScrpEntry *e = scrp_find_fd(p, fd);
159
+ if (e == NULL) return;
160
+ (void)epoll_ctl(p->ep, EPOLL_CTL_DEL, fd, NULL);
161
+ scrp_remove(p, e);
162
+ }
163
+
164
+ bool scrp_timer_arm(ScrPoller *p, void *key, double ms, void *udata) {
165
+ if (!(ms >= 0)) ms = 0;
166
+ ScrpEntry *e = scrp_find_key(p, key);
167
+ int tfd = e != NULL ? e->fd : timerfd_create(CLOCK_MONOTONIC, TFD_NONBLOCK | TFD_CLOEXEC);
168
+ if (tfd < 0) return false;
169
+ struct itimerspec its;
170
+ memset(&its, 0, sizeof its);
171
+ its.it_value.tv_sec = (time_t)(ms / 1000.0);
172
+ its.it_value.tv_nsec = (long)((ms - (double)its.it_value.tv_sec * 1000.0) * 1e6);
173
+ if (its.it_value.tv_sec == 0 && its.it_value.tv_nsec == 0) its.it_value.tv_nsec = 1; /* 0 disarms timerfd */
174
+ if (timerfd_settime(tfd, 0, &its, NULL) != 0) {
175
+ if (e == NULL) close(tfd);
176
+ return false;
177
+ }
178
+ if (e != NULL) {
179
+ e->udata = udata;
180
+ return true; /* re-arm replaces the deadline */
181
+ }
182
+ if (!scrp_push(p, (ScrpEntry){tfd, SCRP_TIMER, udata, key})) {
183
+ close(tfd);
184
+ return false;
185
+ }
186
+ struct epoll_event ev = {.events = EPOLLIN, .data = {.fd = tfd}};
187
+ if (epoll_ctl(p->ep, EPOLL_CTL_ADD, tfd, &ev) != 0) {
188
+ scrp_remove(p, &p->entries[p->n - 1]);
189
+ close(tfd);
190
+ return false;
191
+ }
192
+ return true;
193
+ }
194
+
195
+ void scrp_timer_cancel(ScrPoller *p, void *key) {
196
+ ScrpEntry *e = scrp_find_key(p, key);
197
+ if (e == NULL) return; /* unarmed or already fired: no-op */
198
+ (void)epoll_ctl(p->ep, EPOLL_CTL_DEL, e->fd, NULL);
199
+ close(e->fd);
200
+ scrp_remove(p, e);
201
+ }
202
+
203
+ int scrp_drain(ScrPoller *p, ScrPollerEvent *out, int max) {
204
+ if (max <= 0) return 0;
205
+ struct epoll_event evs[64];
206
+ int want = max < 64 ? max : 64;
207
+ int n = epoll_wait(p->ep, evs, want, 0);
208
+ if (n <= 0) return 0; /* EINTR/none: a spurious pass */
209
+ int filled = 0;
210
+ for (int i = 0; i < n; i++) {
211
+ ScrpEntry *e = scrp_find_fd(p, evs[i].data.fd);
212
+ if (e == NULL) continue; /* raced with forget */
213
+ if ((e->mask & SCRP_TIMER) != 0) {
214
+ out[filled].udata = e->udata;
215
+ out[filled++].events = SCRP_TIMER;
216
+ /* one-shot: disarm at delivery, EV_ONESHOT semantics */
217
+ (void)epoll_ctl(p->ep, EPOLL_CTL_DEL, e->fd, NULL);
218
+ close(e->fd);
219
+ scrp_remove(p, e);
220
+ continue;
221
+ }
222
+ unsigned got = 0;
223
+ uint32_t ep = evs[i].events;
224
+ if ((ep & (EPOLLIN | EPOLLHUP | EPOLLERR | EPOLLRDHUP)) != 0) got |= SCRP_READABLE;
225
+ if ((ep & EPOLLOUT) != 0 || ((ep & (EPOLLHUP | EPOLLERR)) != 0 && (e->mask & SCRP_WRITABLE) != 0))
226
+ got |= SCRP_WRITABLE;
227
+ got &= e->mask | SCRP_READABLE; /* EOF/err always reads; writes only if armed */
228
+ if (got == 0) continue;
229
+ out[filled].udata = e->udata;
230
+ out[filled++].events = got;
231
+ }
232
+ return filled;
233
+ }
234
+
235
+ #else /* !__linux__ */
236
+
237
+ /* Empty TU off-Linux: the kqueue backend (scr_loop_kqueue.c) carries the
238
+ * macOS/BSD implementation; linking both everywhere is harmless. */
239
+ typedef int scr_loop_epoll_unused;
240
+
241
+ #endif
@@ -0,0 +1,121 @@
1
+ /* The macOS/BSD backend of the platform readiness contract
2
+ * (scr_platform.h): a thin spelling over the exact kqueue syscall
3
+ * sequences scr_net.c and scr_dgram.c inlined historically — the corpus
4
+ * pins those units' behavior byte-for-byte, so this backend adds NO state
5
+ * and NO extra syscalls beyond what the inline code issued:
6
+ *
7
+ * - watch read/write EV_SET(fd, EVFILT_READ/WRITE, EV_ADD/EV_DELETE,
8
+ * 0, 0, udata) + a zero-timeout kevent, failures
9
+ * ignored exactly as the units always ignored them
10
+ * (EV_DELETE of a missing filter included).
11
+ * - one-shot timer(key) EVFILT_TIMER ident=(uintptr_t)key, EV_ADD|
12
+ * EV_ONESHOT, data in milliseconds (the default
13
+ * unit) — scr_net's idle-timer spelling; EV_ADD on
14
+ * an armed ident re-arms, EV_DELETE of a fired one
15
+ * is the ignored "may already have fired" case.
16
+ * - forget(fd) a NO-OP: kqueue drops an fd's filters when the
17
+ * fd closes, and the historical code relied on
18
+ * exactly that. The call exists for the epoll
19
+ * backend, where a watched fd MUST be deregistered
20
+ * before close(2) (see scr_platform.h).
21
+ * - drain kevent(NULL, 0, evs, N, {0,0}); each kevent maps
22
+ * to ONE ScrPollerEvent with a single SCRP_* bit
23
+ * (kqueue's separate filters never coalesce), so
24
+ * dispatch order through the contract is the
25
+ * kernel's delivery order, unchanged.
26
+ *
27
+ * No fd table lives here: kqueue keys interest by (ident, filter) and
28
+ * carries udata per filter, so the kernel IS the table. The epoll backend
29
+ * (scr_loop_epoll.c) is the stateful one. */
30
+ #if defined(__APPLE__) || defined(__FreeBSD__) || defined(__NetBSD__) || \
31
+ defined(__OpenBSD__) || defined(__DragonFly__)
32
+
33
+ #include "scr_platform.h"
34
+
35
+ #include <stdint.h>
36
+ #include <stdlib.h>
37
+ #include <sys/event.h>
38
+ #include <sys/time.h>
39
+ #include <unistd.h>
40
+
41
+ struct ScrPoller {
42
+ int kq;
43
+ };
44
+
45
+ ScrPoller *scrp_poller_new(void) {
46
+ ScrPoller *p = malloc(sizeof *p);
47
+ if (p == NULL) return NULL;
48
+ p->kq = kqueue();
49
+ if (p->kq < 0) {
50
+ free(p);
51
+ return NULL;
52
+ }
53
+ return p;
54
+ }
55
+
56
+ void scrp_poller_free(ScrPoller *p) {
57
+ if (p == NULL) return;
58
+ close(p->kq);
59
+ free(p);
60
+ }
61
+
62
+ int scrp_poller_fd(const ScrPoller *p) { return p->kq; }
63
+
64
+ static bool scrp_kev(ScrPoller *p, uintptr_t ident, int16_t filter, uint16_t flags,
65
+ int64_t data, void *udata) {
66
+ struct kevent ev;
67
+ EV_SET(&ev, ident, filter, flags, 0, data, udata);
68
+ struct timespec zero = {0, 0};
69
+ return kevent(p->kq, &ev, 1, NULL, 0, &zero) == 0;
70
+ }
71
+
72
+ bool scrp_watch_read(ScrPoller *p, int fd, void *udata, bool on) {
73
+ if (fd < 0) return true; /* the historical guard in scr_net_filter */
74
+ return scrp_kev(p, (uintptr_t)fd, EVFILT_READ, on ? EV_ADD : EV_DELETE, 0, udata);
75
+ }
76
+
77
+ bool scrp_watch_write(ScrPoller *p, int fd, void *udata, bool on) {
78
+ if (fd < 0) return true;
79
+ return scrp_kev(p, (uintptr_t)fd, EVFILT_WRITE, on ? EV_ADD : EV_DELETE, 0, udata);
80
+ }
81
+
82
+ void scrp_forget(ScrPoller *p, int fd) {
83
+ /* Deliberately nothing: close(2) drops the fd's filters, which is what
84
+ * the inline code always relied on. Removing them here would ADD
85
+ * syscalls the historical sequence never issued. */
86
+ (void)p;
87
+ (void)fd;
88
+ }
89
+
90
+ bool scrp_timer_arm(ScrPoller *p, void *key, double ms, void *udata) {
91
+ return scrp_kev(p, (uintptr_t)key, EVFILT_TIMER, EV_ADD | EV_ONESHOT, (int64_t)ms, udata);
92
+ }
93
+
94
+ void scrp_timer_cancel(ScrPoller *p, void *key) {
95
+ /* May already have fired — the failure is ignored, as always. */
96
+ (void)scrp_kev(p, (uintptr_t)key, EVFILT_TIMER, EV_DELETE, 0, NULL);
97
+ }
98
+
99
+ int scrp_drain(ScrPoller *p, ScrPollerEvent *out, int max) {
100
+ if (max <= 0) return 0;
101
+ struct kevent evs[64];
102
+ int want = max < 64 ? max : 64;
103
+ struct timespec zero = {0, 0};
104
+ int n = kevent(p->kq, NULL, 0, evs, want, &zero);
105
+ if (n <= 0) return 0; /* EINTR/none: a spurious pass, as today */
106
+ for (int i = 0; i < n; i++) {
107
+ out[i].udata = evs[i].udata;
108
+ out[i].events = evs[i].filter == EVFILT_TIMER ? SCRP_TIMER
109
+ : evs[i].filter == EVFILT_WRITE ? SCRP_WRITABLE
110
+ : SCRP_READABLE;
111
+ }
112
+ return n;
113
+ }
114
+
115
+ #else /* !BSD */
116
+
117
+ /* Empty TU off-BSD: the epoll backend (scr_loop_epoll.c) carries the
118
+ * Linux implementation; linking both everywhere is harmless. */
119
+ typedef int scr_loop_kqueue_unused;
120
+
121
+ #endif
@@ -0,0 +1,208 @@
1
+ /* The Windows backend of the platform readiness contract (scr_platform.h):
2
+ * WSAPoll for socket readiness, deadline bookkeeping for the one-shot
3
+ * timers (no timerfd analogue — scrp_drain expires due keys against the
4
+ * loop's scr_now_ms clock). cc.ts links this TU alongside the kqueue and
5
+ * epoll backends whenever a poller-using unit compiles; each is empty off
6
+ * its platform.
7
+ *
8
+ * Design notes:
9
+ * - Interest lives in the same linear fd -> (mask, udata) table the epoll
10
+ * backend keeps, but there is no kernel registration at all: every
11
+ * scrp_drain builds a WSAPOLLFD array from the table and polls it with
12
+ * a zero timeout. At the units' scale (dozens of sockets) the rebuild
13
+ * is noise, and it makes forget/close ordering unable to go stale by
14
+ * construction — an entry gone from the table is gone from the poll.
15
+ * - There is NO pollable poller fd to hand the loop (WSAPoll has no
16
+ * waitable handle shape): scrp_poller_fd answers -1 and the loop's
17
+ * win32 idle sleep runs capped (scr_async.c), dispatching at the next
18
+ * turn's top — readiness latency is bounded by the cap instead of
19
+ * eliminated by a wake fd. When that cap ever shows up in a profile,
20
+ * the upgrade path is WSAEventSelect + WaitForMultipleObjects (or
21
+ * IOCP), which needs a loop-side seam, not a contract change.
22
+ * - POLLHUP/POLLERR report as READABLE (plus WRITABLE when write interest
23
+ * is armed) exactly like the epoll backend: units learn the truth from
24
+ * recv()==0 / the socket error. A failed nonblocking connect() reports
25
+ * through POLLERR/POLLHUP here (WSAPoll delivers those on Win10 19041+;
26
+ * the box class this lane targets).
27
+ * - fds are winsock SOCKETs narrowed through the units' int fd contract
28
+ * and widened back here; Windows socket handles fit (kernel handle
29
+ * space), the same narrowing scr_child.c's stdio plumbing relies on.
30
+ * - WSAStartup: the owning unit (scr_net.c/scr_dgram.c) initializes
31
+ * winsock before it creates sockets; poller_new also calls it (ref-
32
+ * counted by the OS) so a poller created first still works. */
33
+ #ifdef _WIN32
34
+
35
+ #include "scr_platform.h"
36
+ #include "scr_runtime.h"
37
+
38
+ #include <stdlib.h>
39
+ #include <string.h>
40
+ #include <winsock2.h>
41
+
42
+ typedef struct {
43
+ int fd; /* watched SOCKET (narrowed), or -1 for a timer entry */
44
+ unsigned mask; /* SCRP_READABLE|SCRP_WRITABLE, or SCRP_TIMER */
45
+ void *udata; /* delivery tag; for timers: the arm-time udata */
46
+ void *timer_key; /* timers only: the caller's key */
47
+ double deadline; /* timers only: scr_now_ms deadline */
48
+ } ScrpEntry;
49
+
50
+ struct ScrPoller {
51
+ ScrpEntry *entries;
52
+ size_t n, cap;
53
+ };
54
+
55
+ static ScrpEntry *scrp_find_fd(ScrPoller *p, int fd) {
56
+ for (size_t i = 0; i < p->n; i++)
57
+ if ((p->entries[i].mask & SCRP_TIMER) == 0 && p->entries[i].fd == fd) return &p->entries[i];
58
+ return NULL;
59
+ }
60
+
61
+ static ScrpEntry *scrp_find_key(ScrPoller *p, void *key) {
62
+ for (size_t i = 0; i < p->n; i++)
63
+ if ((p->entries[i].mask & SCRP_TIMER) != 0 && p->entries[i].timer_key == key) return &p->entries[i];
64
+ return NULL;
65
+ }
66
+
67
+ static void scrp_remove(ScrPoller *p, ScrpEntry *e) {
68
+ size_t i = (size_t)(e - p->entries);
69
+ p->entries[i] = p->entries[p->n - 1];
70
+ p->n--;
71
+ }
72
+
73
+ static bool scrp_push(ScrPoller *p, ScrpEntry e) {
74
+ if (p->n == p->cap) {
75
+ size_t cap = p->cap == 0 ? 16 : p->cap * 2;
76
+ ScrpEntry *grown = realloc(p->entries, cap * sizeof *grown);
77
+ if (grown == NULL) return false;
78
+ p->entries = grown;
79
+ p->cap = cap;
80
+ }
81
+ p->entries[p->n++] = e;
82
+ return true;
83
+ }
84
+
85
+ ScrPoller *scrp_poller_new(void) {
86
+ WSADATA wsa;
87
+ if (WSAStartup(MAKEWORD(2, 2), &wsa) != 0) return NULL;
88
+ ScrPoller *p = calloc(1, sizeof *p);
89
+ if (p == NULL) WSACleanup();
90
+ return p;
91
+ }
92
+
93
+ void scrp_poller_free(ScrPoller *p) {
94
+ if (p == NULL) return;
95
+ free(p->entries);
96
+ free(p);
97
+ WSACleanup();
98
+ }
99
+
100
+ int scrp_poller_fd(const ScrPoller *p) {
101
+ (void)p;
102
+ return -1; /* nothing waitable — the loop's capped win32 sleep serves us */
103
+ }
104
+
105
+ static bool scrp_watch(ScrPoller *p, int fd, void *udata, bool on, unsigned bit) {
106
+ ScrpEntry *e = scrp_find_fd(p, fd);
107
+ unsigned mask = e != NULL ? e->mask : 0u;
108
+ unsigned next = on ? (mask | bit) : (mask & ~bit);
109
+ if (e == NULL) {
110
+ if (next == 0) return true; /* unwatch of an unwatched fd: no-op */
111
+ return scrp_push(p, (ScrpEntry){fd, next, udata, NULL, 0});
112
+ }
113
+ if (next == 0) {
114
+ scrp_remove(p, e);
115
+ return true;
116
+ }
117
+ e->mask = next;
118
+ e->udata = udata; /* last registration wins, both directions */
119
+ return true;
120
+ }
121
+
122
+ bool scrp_watch_read(ScrPoller *p, int fd, void *udata, bool on) {
123
+ return scrp_watch(p, fd, udata, on, SCRP_READABLE);
124
+ }
125
+
126
+ bool scrp_watch_write(ScrPoller *p, int fd, void *udata, bool on) {
127
+ return scrp_watch(p, fd, udata, on, SCRP_WRITABLE);
128
+ }
129
+
130
+ void scrp_forget(ScrPoller *p, int fd) {
131
+ ScrpEntry *e = scrp_find_fd(p, fd);
132
+ if (e != NULL) scrp_remove(p, e);
133
+ }
134
+
135
+ bool scrp_timer_arm(ScrPoller *p, void *key, double ms, void *udata) {
136
+ if (!(ms >= 0)) ms = 0;
137
+ double deadline = scr_now_ms() + ms;
138
+ ScrpEntry *e = scrp_find_key(p, key);
139
+ if (e != NULL) {
140
+ e->deadline = deadline; /* re-arm replaces the deadline */
141
+ e->udata = udata;
142
+ return true;
143
+ }
144
+ return scrp_push(p, (ScrpEntry){-1, SCRP_TIMER, udata, key, deadline});
145
+ }
146
+
147
+ void scrp_timer_cancel(ScrPoller *p, void *key) {
148
+ ScrpEntry *e = scrp_find_key(p, key);
149
+ if (e != NULL) scrp_remove(p, e); /* unarmed or already fired: no-op */
150
+ }
151
+
152
+ int scrp_drain(ScrPoller *p, ScrPollerEvent *out, int max) {
153
+ if (max <= 0) return 0;
154
+ int filled = 0;
155
+ /* Due timers first (kqueue delivers EVFILT_TIMER through the same
156
+ * drain); one-shot — the entry leaves the table at delivery. */
157
+ double now = scr_now_ms();
158
+ for (size_t i = 0; i < p->n && filled < max;) {
159
+ ScrpEntry *e = &p->entries[i];
160
+ if ((e->mask & SCRP_TIMER) != 0 && e->deadline <= now) {
161
+ out[filled].udata = e->udata;
162
+ out[filled++].events = SCRP_TIMER;
163
+ scrp_remove(p, e); /* swaps the tail in — revisit index i */
164
+ continue;
165
+ }
166
+ i++;
167
+ }
168
+ /* Socket readiness: poll the whole table with a zero timeout. */
169
+ enum { SCRP_BATCH = 64 };
170
+ WSAPOLLFD pfds[SCRP_BATCH];
171
+ ScrpEntry *owners[SCRP_BATCH];
172
+ ULONG npfds = 0;
173
+ for (size_t i = 0; i < p->n && npfds < SCRP_BATCH; i++) {
174
+ ScrpEntry *e = &p->entries[i];
175
+ if ((e->mask & SCRP_TIMER) != 0) continue;
176
+ pfds[npfds].fd = (SOCKET)e->fd;
177
+ pfds[npfds].events = 0;
178
+ if ((e->mask & SCRP_READABLE) != 0) pfds[npfds].events |= POLLRDNORM;
179
+ if ((e->mask & SCRP_WRITABLE) != 0) pfds[npfds].events |= POLLWRNORM;
180
+ pfds[npfds].revents = 0;
181
+ owners[npfds++] = e;
182
+ }
183
+ if (npfds == 0 || filled >= max) return filled;
184
+ int n = WSAPoll(pfds, npfds, 0);
185
+ if (n <= 0) return filled; /* none/failed: a spurious pass */
186
+ for (ULONG i = 0; i < npfds && filled < max; i++) {
187
+ SHORT re = pfds[i].revents;
188
+ if (re == 0) continue;
189
+ ScrpEntry *e = owners[i];
190
+ unsigned got = 0;
191
+ if ((re & (POLLRDNORM | POLLHUP | POLLERR | POLLNVAL)) != 0) got |= SCRP_READABLE;
192
+ if ((re & POLLWRNORM) != 0 || ((re & (POLLHUP | POLLERR | POLLNVAL)) != 0 && (e->mask & SCRP_WRITABLE) != 0))
193
+ got |= SCRP_WRITABLE;
194
+ got &= e->mask | SCRP_READABLE; /* EOF/err always reads; writes only if armed */
195
+ if (got == 0) continue;
196
+ out[filled].udata = e->udata;
197
+ out[filled++].events = got;
198
+ }
199
+ return filled;
200
+ }
201
+
202
+ #else /* !_WIN32 */
203
+
204
+ /* Empty TU off-Windows: the kqueue and epoll backends carry the POSIX
205
+ * platforms; linking all three everywhere is harmless. */
206
+ typedef int scr_loop_wsapoll_unused;
207
+
208
+ #endif