visaljs 0.0.10 → 0.0.11

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 (221) hide show
  1. package/README.md +12 -4
  2. package/THIRD_PARTY_LICENSES +31 -1
  3. package/cli.js +962 -68
  4. package/node/include/js_node.h +11 -1
  5. package/node/prelude/_http_common.js +29 -0
  6. package/node/prelude/async_hooks.js +50 -11
  7. package/node/prelude/child_process.js +31 -4
  8. package/node/prelude/console.js +311 -143
  9. package/node/prelude/crypto.js +6 -4
  10. package/node/prelude/dgram.js +1169 -0
  11. package/node/prelude/diagnostics_channel.js +3 -1
  12. package/node/prelude/dns.js +250 -45
  13. package/node/prelude/dns_promises.js +8 -2
  14. package/node/prelude/fs_promises.js +9 -1
  15. package/node/prelude/http.js +395 -86
  16. package/node/prelude/https.js +13 -4
  17. package/node/prelude/internal/console_class.js +7 -0
  18. package/node/prelude/internal/console_global.js +25 -0
  19. package/node/prelude/internal/crypto/key_encryption.js +217 -0
  20. package/node/prelude/internal/crypto/keys.js +161 -26
  21. package/node/prelude/internal/crypto/random.js +24 -0
  22. package/node/prelude/internal/crypto/util.js +2 -1
  23. package/node/prelude/internal/crypto_x509.js +161 -0
  24. package/node/prelude/internal/dns_classes.js +6 -0
  25. package/node/prelude/internal/dns_resolver.js +371 -0
  26. package/node/prelude/internal/errors.js +9 -0
  27. package/node/prelude/internal/events_on.js +82 -37
  28. package/node/prelude/internal/features.js +8 -4
  29. package/node/prelude/internal/fs_filehandle.js +10 -4
  30. package/node/prelude/internal/perf_histogram.js +1 -1
  31. package/node/prelude/internal/process_more.js +32 -17
  32. package/node/prelude/internal/process_signals.js +8 -2
  33. package/node/prelude/internal/punycode.ts +163 -0
  34. package/node/prelude/internal/readline.js +648 -274
  35. package/node/prelude/internal/readline_editor.js +1240 -0
  36. package/node/prelude/internal/string_width.js +43 -0
  37. package/node/prelude/internal/tls/common.js +145 -33
  38. package/node/prelude/internal/tls/wrap.js +182 -49
  39. package/node/prelude/internal/tls/x509.js +4 -1
  40. package/node/prelude/internal/udp.js +177 -0
  41. package/node/prelude/net.js +13 -1
  42. package/node/prelude/os.js +24 -6
  43. package/node/prelude/perf_hooks.js +37 -2
  44. package/node/prelude/punycode.js +2 -130
  45. package/node/prelude/readline.js +113 -4
  46. package/node/prelude/readline_promises.js +56 -32
  47. package/node/prelude/tls.js +21 -4
  48. package/node/prelude/util.js +3 -16
  49. package/node/src/host_dns.c +623 -0
  50. package/node/src/host_http.c +12 -0
  51. package/node/src/host_net.c +46 -0
  52. package/node/src/host_os.c +1 -6
  53. package/node/src/host_sys.c +70 -0
  54. package/node/src/host_udp.c +418 -0
  55. package/node/third_party/c-ares/LICENSE.md +24 -0
  56. package/node/third_party/c-ares/config/darwin/ares_config.h +573 -0
  57. package/node/third_party/c-ares/config/freebsd/ares_config.h +573 -0
  58. package/node/third_party/c-ares/config/linux/ares_config.h +573 -0
  59. package/node/third_party/c-ares/config/openbsd/ares_config.h +583 -0
  60. package/node/third_party/c-ares/include/ares.h +1237 -0
  61. package/node/third_party/c-ares/include/ares_build.h +202 -0
  62. package/node/third_party/c-ares/include/ares_dns.h +127 -0
  63. package/node/third_party/c-ares/include/ares_dns_record.h +1119 -0
  64. package/node/third_party/c-ares/include/ares_nameser.h +510 -0
  65. package/node/third_party/c-ares/include/ares_version.h +47 -0
  66. package/node/third_party/c-ares/src/lib/ares_addrinfo2hostent.c +305 -0
  67. package/node/third_party/c-ares/src/lib/ares_addrinfo_localhost.c +245 -0
  68. package/node/third_party/c-ares/src/lib/ares_android.c +496 -0
  69. package/node/third_party/c-ares/src/lib/ares_android.h +38 -0
  70. package/node/third_party/c-ares/src/lib/ares_cancel.c +87 -0
  71. package/node/third_party/c-ares/src/lib/ares_close_sockets.c +137 -0
  72. package/node/third_party/c-ares/src/lib/ares_conn.c +511 -0
  73. package/node/third_party/c-ares/src/lib/ares_conn.h +202 -0
  74. package/node/third_party/c-ares/src/lib/ares_cookie.c +461 -0
  75. package/node/third_party/c-ares/src/lib/ares_data.c +168 -0
  76. package/node/third_party/c-ares/src/lib/ares_data.h +92 -0
  77. package/node/third_party/c-ares/src/lib/ares_destroy.c +159 -0
  78. package/node/third_party/c-ares/src/lib/ares_free_hostent.c +54 -0
  79. package/node/third_party/c-ares/src/lib/ares_free_string.c +33 -0
  80. package/node/third_party/c-ares/src/lib/ares_freeaddrinfo.c +67 -0
  81. package/node/third_party/c-ares/src/lib/ares_getaddrinfo.c +806 -0
  82. package/node/third_party/c-ares/src/lib/ares_getenv.c +38 -0
  83. package/node/third_party/c-ares/src/lib/ares_getenv.h +34 -0
  84. package/node/third_party/c-ares/src/lib/ares_gethostbyaddr.c +229 -0
  85. package/node/third_party/c-ares/src/lib/ares_gethostbyname.c +341 -0
  86. package/node/third_party/c-ares/src/lib/ares_getnameinfo.c +437 -0
  87. package/node/third_party/c-ares/src/lib/ares_hosts_file.c +960 -0
  88. package/node/third_party/c-ares/src/lib/ares_inet_net_pton.h +31 -0
  89. package/node/third_party/c-ares/src/lib/ares_init.c +631 -0
  90. package/node/third_party/c-ares/src/lib/ares_ipv6.h +115 -0
  91. package/node/third_party/c-ares/src/lib/ares_library_init.c +190 -0
  92. package/node/third_party/c-ares/src/lib/ares_metrics.c +261 -0
  93. package/node/third_party/c-ares/src/lib/ares_options.c +492 -0
  94. package/node/third_party/c-ares/src/lib/ares_parse_into_addrinfo.c +179 -0
  95. package/node/third_party/c-ares/src/lib/ares_private.h +648 -0
  96. package/node/third_party/c-ares/src/lib/ares_process.c +1649 -0
  97. package/node/third_party/c-ares/src/lib/ares_qcache.c +442 -0
  98. package/node/third_party/c-ares/src/lib/ares_query.c +151 -0
  99. package/node/third_party/c-ares/src/lib/ares_search.c +623 -0
  100. package/node/third_party/c-ares/src/lib/ares_send.c +300 -0
  101. package/node/third_party/c-ares/src/lib/ares_set_socket_functions.c +590 -0
  102. package/node/third_party/c-ares/src/lib/ares_setup.h +224 -0
  103. package/node/third_party/c-ares/src/lib/ares_socket.c +427 -0
  104. package/node/third_party/c-ares/src/lib/ares_socket.h +163 -0
  105. package/node/third_party/c-ares/src/lib/ares_sortaddrinfo.c +447 -0
  106. package/node/third_party/c-ares/src/lib/ares_strerror.c +91 -0
  107. package/node/third_party/c-ares/src/lib/ares_sysconfig.c +642 -0
  108. package/node/third_party/c-ares/src/lib/ares_sysconfig_files.c +851 -0
  109. package/node/third_party/c-ares/src/lib/ares_sysconfig_mac.c +373 -0
  110. package/node/third_party/c-ares/src/lib/ares_sysconfig_win.c +673 -0
  111. package/node/third_party/c-ares/src/lib/ares_timeout.c +162 -0
  112. package/node/third_party/c-ares/src/lib/ares_update_servers.c +1376 -0
  113. package/node/third_party/c-ares/src/lib/ares_version.c +36 -0
  114. package/node/third_party/c-ares/src/lib/config-dos.h +114 -0
  115. package/node/third_party/c-ares/src/lib/config-win32.h +396 -0
  116. package/node/third_party/c-ares/src/lib/dsa/ares_array.c +409 -0
  117. package/node/third_party/c-ares/src/lib/dsa/ares_htable.c +451 -0
  118. package/node/third_party/c-ares/src/lib/dsa/ares_htable.h +174 -0
  119. package/node/third_party/c-ares/src/lib/dsa/ares_htable_asvp.c +224 -0
  120. package/node/third_party/c-ares/src/lib/dsa/ares_htable_dict.c +230 -0
  121. package/node/third_party/c-ares/src/lib/dsa/ares_htable_strvp.c +210 -0
  122. package/node/third_party/c-ares/src/lib/dsa/ares_htable_szvp.c +188 -0
  123. package/node/third_party/c-ares/src/lib/dsa/ares_htable_vpstr.c +186 -0
  124. package/node/third_party/c-ares/src/lib/dsa/ares_htable_vpvp.c +194 -0
  125. package/node/third_party/c-ares/src/lib/dsa/ares_llist.c +385 -0
  126. package/node/third_party/c-ares/src/lib/dsa/ares_slist.c +479 -0
  127. package/node/third_party/c-ares/src/lib/dsa/ares_slist.h +207 -0
  128. package/node/third_party/c-ares/src/lib/event/ares_event.h +191 -0
  129. package/node/third_party/c-ares/src/lib/event/ares_event_configchg.c +746 -0
  130. package/node/third_party/c-ares/src/lib/event/ares_event_epoll.c +192 -0
  131. package/node/third_party/c-ares/src/lib/event/ares_event_kqueue.c +248 -0
  132. package/node/third_party/c-ares/src/lib/event/ares_event_poll.c +140 -0
  133. package/node/third_party/c-ares/src/lib/event/ares_event_select.c +159 -0
  134. package/node/third_party/c-ares/src/lib/event/ares_event_thread.c +575 -0
  135. package/node/third_party/c-ares/src/lib/event/ares_event_wake_pipe.c +172 -0
  136. package/node/third_party/c-ares/src/lib/event/ares_event_win32.c +981 -0
  137. package/node/third_party/c-ares/src/lib/event/ares_event_win32.h +161 -0
  138. package/node/third_party/c-ares/src/lib/include/ares_array.h +276 -0
  139. package/node/third_party/c-ares/src/lib/include/ares_buf.h +732 -0
  140. package/node/third_party/c-ares/src/lib/include/ares_htable_asvp.h +130 -0
  141. package/node/third_party/c-ares/src/lib/include/ares_htable_dict.h +123 -0
  142. package/node/third_party/c-ares/src/lib/include/ares_htable_strvp.h +130 -0
  143. package/node/third_party/c-ares/src/lib/include/ares_htable_szvp.h +118 -0
  144. package/node/third_party/c-ares/src/lib/include/ares_htable_vpstr.h +111 -0
  145. package/node/third_party/c-ares/src/lib/include/ares_htable_vpvp.h +128 -0
  146. package/node/third_party/c-ares/src/lib/include/ares_llist.h +239 -0
  147. package/node/third_party/c-ares/src/lib/include/ares_mem.h +41 -0
  148. package/node/third_party/c-ares/src/lib/include/ares_str.h +261 -0
  149. package/node/third_party/c-ares/src/lib/inet_net_pton.c +451 -0
  150. package/node/third_party/c-ares/src/lib/inet_ntop.c +219 -0
  151. package/node/third_party/c-ares/src/lib/legacy/ares_create_query.c +78 -0
  152. package/node/third_party/c-ares/src/lib/legacy/ares_expand_name.c +99 -0
  153. package/node/third_party/c-ares/src/lib/legacy/ares_expand_string.c +107 -0
  154. package/node/third_party/c-ares/src/lib/legacy/ares_fds.c +80 -0
  155. package/node/third_party/c-ares/src/lib/legacy/ares_getsock.c +85 -0
  156. package/node/third_party/c-ares/src/lib/legacy/ares_parse_a_reply.c +107 -0
  157. package/node/third_party/c-ares/src/lib/legacy/ares_parse_aaaa_reply.c +109 -0
  158. package/node/third_party/c-ares/src/lib/legacy/ares_parse_caa_reply.c +137 -0
  159. package/node/third_party/c-ares/src/lib/legacy/ares_parse_mx_reply.c +110 -0
  160. package/node/third_party/c-ares/src/lib/legacy/ares_parse_naptr_reply.c +132 -0
  161. package/node/third_party/c-ares/src/lib/legacy/ares_parse_ns_reply.c +154 -0
  162. package/node/third_party/c-ares/src/lib/legacy/ares_parse_ptr_reply.c +213 -0
  163. package/node/third_party/c-ares/src/lib/legacy/ares_parse_soa_reply.c +115 -0
  164. package/node/third_party/c-ares/src/lib/legacy/ares_parse_srv_reply.c +114 -0
  165. package/node/third_party/c-ares/src/lib/legacy/ares_parse_txt_reply.c +144 -0
  166. package/node/third_party/c-ares/src/lib/legacy/ares_parse_uri_reply.c +113 -0
  167. package/node/third_party/c-ares/src/lib/record/ares_dns_mapping.c +982 -0
  168. package/node/third_party/c-ares/src/lib/record/ares_dns_multistring.c +309 -0
  169. package/node/third_party/c-ares/src/lib/record/ares_dns_multistring.h +72 -0
  170. package/node/third_party/c-ares/src/lib/record/ares_dns_name.c +736 -0
  171. package/node/third_party/c-ares/src/lib/record/ares_dns_parse.c +1360 -0
  172. package/node/third_party/c-ares/src/lib/record/ares_dns_private.h +273 -0
  173. package/node/third_party/c-ares/src/lib/record/ares_dns_record.c +1701 -0
  174. package/node/third_party/c-ares/src/lib/record/ares_dns_write.c +1229 -0
  175. package/node/third_party/c-ares/src/lib/str/ares_buf.c +1510 -0
  176. package/node/third_party/c-ares/src/lib/str/ares_str.c +562 -0
  177. package/node/third_party/c-ares/src/lib/str/ares_strsplit.c +90 -0
  178. package/node/third_party/c-ares/src/lib/str/ares_strsplit.h +51 -0
  179. package/node/third_party/c-ares/src/lib/thirdparty/apple/dnsinfo.h +122 -0
  180. package/node/third_party/c-ares/src/lib/util/ares_iface_ips.c +640 -0
  181. package/node/third_party/c-ares/src/lib/util/ares_iface_ips.h +140 -0
  182. package/node/third_party/c-ares/src/lib/util/ares_math.c +167 -0
  183. package/node/third_party/c-ares/src/lib/util/ares_math.h +58 -0
  184. package/node/third_party/c-ares/src/lib/util/ares_rand.c +389 -0
  185. package/node/third_party/c-ares/src/lib/util/ares_rand.h +36 -0
  186. package/node/third_party/c-ares/src/lib/util/ares_threads.c +613 -0
  187. package/node/third_party/c-ares/src/lib/util/ares_threads.h +60 -0
  188. package/node/third_party/c-ares/src/lib/util/ares_time.h +49 -0
  189. package/node/third_party/c-ares/src/lib/util/ares_timeval.c +95 -0
  190. package/node/third_party/c-ares/src/lib/util/ares_uri.c +1627 -0
  191. package/node/third_party/c-ares/src/lib/util/ares_uri.h +252 -0
  192. package/node/third_party/c-ares/src/lib/windows_port.c +29 -0
  193. package/package.json +1 -1
  194. package/prebuilt/darwin-arm64/cares-a6286c65ca9374a3.a +0 -0
  195. package/prebuilt/darwin-x64/cares-a6286c65ca9374a3.a +0 -0
  196. package/prebuilt/linux-arm64/cares-4ba05ac8e948af8e.a +0 -0
  197. package/prebuilt/linux-arm64-musl/cares-4ba05ac8e948af8e.a +0 -0
  198. package/prebuilt/linux-x64/cares-4ba05ac8e948af8e.a +0 -0
  199. package/prebuilt/linux-x64-musl/cares-4ba05ac8e948af8e.a +0 -0
  200. package/prebuilt/win32-x64/boringssl-ce573858472b7fc9.a +0 -0
  201. package/prebuilt/win32-x64/brotli-20d86a61f30baeb3.a +0 -0
  202. package/prebuilt/win32-x64/cares-49c9ec95162b912d.a +0 -0
  203. package/prebuilt/win32-x64/uv-b11bae65d7fced82.a +0 -0
  204. package/prebuilt/win32-x64/zlib-4ce2317a4c3f5fb5.a +0 -0
  205. package/prebuilt/win32-x64/zstd-015315ac7c784c73.a +0 -0
  206. package/runtime/include/js_builtins.h +5 -0
  207. package/runtime/include/js_crypto.h +11 -0
  208. package/runtime/include/js_gc.h +13 -10
  209. package/runtime/include/js_jobs.h +2 -0
  210. package/runtime/include/js_object.h +58 -0
  211. package/runtime/include/jscontext.h +1 -0
  212. package/runtime/src/crypto_internal.h +1 -0
  213. package/runtime/src/crypto_subtle.c +66 -7
  214. package/runtime/src/crypto_tls.c +265 -19
  215. package/runtime/src/gc.c +73 -92
  216. package/runtime/src/inspect.c +18 -1
  217. package/runtime/src/jobs.c +37 -22
  218. package/runtime/src/object.c +49 -2
  219. package/runtime/src/os.c +16 -6
  220. package/runtime/src/os.h +2 -0
  221. package/runtime/src/process.c +97 -10
@@ -0,0 +1,140 @@
1
+ /* MIT License
2
+ *
3
+ * Copyright (c) 2023 Brad House
4
+ *
5
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ * of this software and associated documentation files (the "Software"), to deal
7
+ * in the Software without restriction, including without limitation the rights
8
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ * copies of the Software, and to permit persons to whom the Software is
10
+ * furnished to do so, subject to the following conditions:
11
+ *
12
+ * The above copyright notice and this permission notice (including the next
13
+ * paragraph) shall be included in all copies or substantial portions of the
14
+ * Software.
15
+ *
16
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22
+ * SOFTWARE.
23
+ *
24
+ * SPDX-License-Identifier: MIT
25
+ */
26
+ #ifndef __ARES__IFACE_IPS_H
27
+ #define __ARES__IFACE_IPS_H
28
+
29
+ /*! Flags for interface ip addresses. */
30
+ typedef enum {
31
+ ARES_IFACE_IP_NONE = 0, /*!< No flags set / unspecified */
32
+ ARES_IFACE_IP_V4 = 1 << 0, /*!< IPv4 address. During enumeration if
33
+ * this flag is set ARES_IFACE_IP_V6
34
+ * is not, will only enumerate v4
35
+ * addresses. */
36
+ ARES_IFACE_IP_V6 = 1 << 1, /*!< IPv6 address. During enumeration if
37
+ * this flag is set ARES_IFACE_IP_V4
38
+ * is not, will only enumerate v6
39
+ * addresses. */
40
+ ARES_IFACE_IP_LOOPBACK = 1 << 2, /*!< Loopback adapter */
41
+ ARES_IFACE_IP_OFFLINE = 1 << 3, /*!< Adapter offline */
42
+ ARES_IFACE_IP_LINKLOCAL = 1 << 4, /*!< Link-local ip address */
43
+ /*! Default, enumerate all ips for online interfaces, including loopback */
44
+ ARES_IFACE_IP_DEFAULT = (ARES_IFACE_IP_V4 | ARES_IFACE_IP_V6 |
45
+ ARES_IFACE_IP_LOOPBACK | ARES_IFACE_IP_LINKLOCAL)
46
+ } ares_iface_ip_flags_t;
47
+
48
+ struct ares_iface_ips;
49
+
50
+ /*! Opaque pointer for holding enumerated interface ip addresses */
51
+ typedef struct ares_iface_ips ares_iface_ips_t;
52
+
53
+ /*! Destroy ip address enumeration created by ares_iface_ips().
54
+ *
55
+ * \param[in] ips Initialized IP address enumeration structure
56
+ */
57
+ void ares_iface_ips_destroy(ares_iface_ips_t *ips);
58
+
59
+ /*! Enumerate ip addresses on interfaces
60
+ *
61
+ * \param[out] ips Returns initialized ip address structure
62
+ * \param[in] flags Flags for enumeration
63
+ * \param[in] name Interface name to enumerate, or NULL to enumerate all
64
+ * \return ARES_ENOMEM on out of memory, ARES_ENOTIMP if not supported on
65
+ * the system, ARES_SUCCESS on success
66
+ */
67
+ ares_status_t ares_iface_ips(ares_iface_ips_t **ips,
68
+ ares_iface_ip_flags_t flags, const char *name);
69
+
70
+ /*! Count of ips enumerated
71
+ *
72
+ * \param[in] ips Initialized IP address enumeration structure
73
+ * \return count
74
+ */
75
+ size_t ares_iface_ips_cnt(const ares_iface_ips_t *ips);
76
+
77
+ /*! Retrieve interface name
78
+ *
79
+ * \param[in] ips Initialized IP address enumeration structure
80
+ * \param[in] idx Index of entry to pull
81
+ * \return interface name
82
+ */
83
+ const char *ares_iface_ips_get_name(const ares_iface_ips_t *ips, size_t idx);
84
+
85
+ /*! Retrieve interface address
86
+ *
87
+ * \param[in] ips Initialized IP address enumeration structure
88
+ * \param[in] idx Index of entry to pull
89
+ * \return interface address
90
+ */
91
+ const struct ares_addr *ares_iface_ips_get_addr(const ares_iface_ips_t *ips,
92
+ size_t idx);
93
+
94
+ /*! Retrieve interface address flags
95
+ *
96
+ * \param[in] ips Initialized IP address enumeration structure
97
+ * \param[in] idx Index of entry to pull
98
+ * \return interface address flags
99
+ */
100
+ ares_iface_ip_flags_t ares_iface_ips_get_flags(const ares_iface_ips_t *ips,
101
+ size_t idx);
102
+
103
+ /*! Retrieve interface address netmask
104
+ *
105
+ * \param[in] ips Initialized IP address enumeration structure
106
+ * \param[in] idx Index of entry to pull
107
+ * \return interface address netmask
108
+ */
109
+ unsigned char ares_iface_ips_get_netmask(const ares_iface_ips_t *ips,
110
+ size_t idx);
111
+
112
+ /*! Retrieve interface ipv6 link local scope
113
+ *
114
+ * \param[in] ips Initialized IP address enumeration structure
115
+ * \param[in] idx Index of entry to pull
116
+ * \return interface ipv6 link local scope
117
+ */
118
+ unsigned int ares_iface_ips_get_ll_scope(const ares_iface_ips_t *ips,
119
+ size_t idx);
120
+
121
+
122
+ /*! Retrieve the interface index (aka link local scope) from the interface
123
+ * name.
124
+ *
125
+ * \param[in] name Interface name
126
+ * \return 0 on failure, index otherwise
127
+ */
128
+ unsigned int ares_os_if_nametoindex(const char *name);
129
+
130
+ /*! Retrieves the interface name from the index (aka link local scope)
131
+ *
132
+ * \param[in] index Interface index (> 0)
133
+ * \param[in] name Buffer to hold name
134
+ * \param[in] name_len Length of provided buffer, must be at least IF_NAMESIZE
135
+ * \return NULL on failure, or pointer to name on success
136
+ */
137
+ const char *ares_os_if_indextoname(unsigned int index, char *name,
138
+ size_t name_len);
139
+
140
+ #endif
@@ -0,0 +1,167 @@
1
+ /* MIT License
2
+ *
3
+ * Copyright (c) 2023 Brad House
4
+ *
5
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ * of this software and associated documentation files (the "Software"), to deal
7
+ * in the Software without restriction, including without limitation the rights
8
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ * copies of the Software, and to permit persons to whom the Software is
10
+ * furnished to do so, subject to the following conditions:
11
+ *
12
+ * The above copyright notice and this permission notice (including the next
13
+ * paragraph) shall be included in all copies or substantial portions of the
14
+ * Software.
15
+ *
16
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22
+ * SOFTWARE.
23
+ *
24
+ * SPDX-License-Identifier: MIT
25
+ */
26
+
27
+ #include "ares_private.h"
28
+
29
+ /* Uses public domain code snippets from
30
+ * http://graphics.stanford.edu/~seander/bithacks.html */
31
+
32
+ static unsigned int ares_round_up_pow2_u32(unsigned int n)
33
+ {
34
+ /* NOTE: if already a power of 2, will return itself, not the next */
35
+ n--;
36
+ n |= n >> 1;
37
+ n |= n >> 2;
38
+ n |= n >> 4;
39
+ n |= n >> 8;
40
+ n |= n >> 16;
41
+ n++;
42
+ return n;
43
+ }
44
+
45
+ static ares_uint64_t ares_round_up_pow2_u64(ares_uint64_t n)
46
+ {
47
+ /* NOTE: if already a power of 2, will return itself, not the next */
48
+ n--;
49
+ n |= n >> 1;
50
+ n |= n >> 2;
51
+ n |= n >> 4;
52
+ n |= n >> 8;
53
+ n |= n >> 16;
54
+ n |= n >> 32;
55
+ n++;
56
+ return n;
57
+ }
58
+
59
+ ares_bool_t ares_is_64bit(void)
60
+ {
61
+ #ifdef _MSC_VER
62
+ # pragma warning(push)
63
+ # pragma warning(disable : 4127)
64
+ #endif
65
+
66
+ return (sizeof(size_t) == 4) ? ARES_FALSE : ARES_TRUE;
67
+
68
+ #ifdef _MSC_VER
69
+ # pragma warning(pop)
70
+ #endif
71
+ }
72
+
73
+ size_t ares_round_up_pow2(size_t n)
74
+ {
75
+ if (ares_is_64bit()) {
76
+ return (size_t)ares_round_up_pow2_u64((ares_uint64_t)n);
77
+ }
78
+
79
+ return (size_t)ares_round_up_pow2_u32((unsigned int)n);
80
+ }
81
+
82
+ size_t ares_log2(size_t n)
83
+ {
84
+ static const unsigned char tab32[32] = { 0, 1, 28, 2, 29, 14, 24, 3,
85
+ 30, 22, 20, 15, 25, 17, 4, 8,
86
+ 31, 27, 13, 23, 21, 19, 16, 7,
87
+ 26, 12, 18, 6, 11, 5, 10, 9 };
88
+ static const unsigned char tab64[64] = {
89
+ 63, 0, 58, 1, 59, 47, 53, 2, 60, 39, 48, 27, 54, 33, 42, 3,
90
+ 61, 51, 37, 40, 49, 18, 28, 20, 55, 30, 34, 11, 43, 14, 22, 4,
91
+ 62, 57, 46, 52, 38, 26, 32, 41, 50, 36, 17, 19, 29, 10, 13, 21,
92
+ 56, 45, 25, 31, 35, 16, 9, 12, 44, 24, 15, 8, 23, 7, 6, 5
93
+ };
94
+
95
+ if (!ares_is_64bit()) {
96
+ return tab32[(n * 0x077CB531) >> 27];
97
+ }
98
+
99
+ return tab64[(n * 0x07EDD5E59A4E28C2) >> 58];
100
+ }
101
+
102
+ /* x^y */
103
+ size_t ares_pow(size_t x, size_t y)
104
+ {
105
+ size_t res = 1;
106
+
107
+ while (y > 0) {
108
+ /* If y is odd, multiply x with result */
109
+ if (y & 1) {
110
+ res = res * x;
111
+ }
112
+
113
+ /* y must be even now */
114
+ y = y >> 1; /* y /= 2; */
115
+ x = x * x; /* x^2 */
116
+ }
117
+
118
+ return res;
119
+ }
120
+
121
+ size_t ares_count_digits(size_t n)
122
+ {
123
+ size_t digits;
124
+
125
+ for (digits = 0; n > 0; digits++) {
126
+ n /= 10;
127
+ }
128
+ if (digits == 0) {
129
+ digits = 1;
130
+ }
131
+
132
+ return digits;
133
+ }
134
+
135
+ size_t ares_count_hexdigits(size_t n)
136
+ {
137
+ size_t digits;
138
+
139
+ for (digits = 0; n > 0; digits++) {
140
+ n /= 16;
141
+ }
142
+ if (digits == 0) {
143
+ digits = 1;
144
+ }
145
+
146
+ return digits;
147
+ }
148
+
149
+ unsigned char ares_count_bits_u8(unsigned char x)
150
+ {
151
+ /* Implementation obtained from:
152
+ * http://graphics.stanford.edu/~seander/bithacks.html#CountBitsSetTable */
153
+ #define B2(n) n, n + 1, n + 1, n + 2
154
+ #define B4(n) B2(n), B2(n + 1), B2(n + 1), B2(n + 2)
155
+ #define B6(n) B4(n), B4(n + 1), B4(n + 1), B4(n + 2)
156
+ static const unsigned char lookup[256] = { B6(0), B6(1), B6(1), B6(2) };
157
+ return lookup[x];
158
+ }
159
+
160
+ ares_bool_t ares_size_t_mul_overflow(size_t a, size_t b, size_t *res)
161
+ {
162
+ if (a > 0 && b > SIZE_MAX / a) {
163
+ return ARES_TRUE;
164
+ }
165
+ *res = a * b;
166
+ return ARES_FALSE;
167
+ }
@@ -0,0 +1,58 @@
1
+ /* MIT License
2
+ *
3
+ * Copyright (c) 2024 Brad House
4
+ *
5
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ * of this software and associated documentation files (the "Software"), to deal
7
+ * in the Software without restriction, including without limitation the rights
8
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ * copies of the Software, and to permit persons to whom the Software is
10
+ * furnished to do so, subject to the following conditions:
11
+ *
12
+ * The above copyright notice and this permission notice (including the next
13
+ * paragraph) shall be included in all copies or substantial portions of the
14
+ * Software.
15
+ *
16
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22
+ * SOFTWARE.
23
+ *
24
+ * SPDX-License-Identifier: MIT
25
+ */
26
+ #ifndef __ARES_MATH_H
27
+ #define __ARES_MATH_H
28
+
29
+ #include "ares_setup.h"
30
+
31
+ #ifdef HAVE_STDINT_H
32
+ # include <stdint.h>
33
+ typedef int64_t ares_int64_t;
34
+ typedef uint64_t ares_uint64_t;
35
+ #else /* HAVE_STDINT_H */
36
+ # ifdef _MSC_VER
37
+ typedef __int64 ares_int64_t;
38
+ typedef unsigned __int64 ares_uint64_t;
39
+ # else
40
+ typedef long long ares_int64_t;
41
+ typedef unsigned long long ares_uint64_t;
42
+ # endif /* _MSC_VER */
43
+ #endif /* HAVE_STDINT_H */
44
+
45
+ ares_bool_t ares_is_64bit(void);
46
+ size_t ares_round_up_pow2(size_t n);
47
+ size_t ares_log2(size_t n);
48
+ size_t ares_pow(size_t x, size_t y);
49
+ size_t ares_count_digits(size_t n);
50
+ size_t ares_count_hexdigits(size_t n);
51
+ unsigned char ares_count_bits_u8(unsigned char x);
52
+
53
+ /*! Multiply two size_t values, checking for overflow. On success writes the
54
+ * product to *res and returns ARES_FALSE. On overflow returns ARES_TRUE and
55
+ * leaves *res untouched. */
56
+ ares_bool_t ares_size_t_mul_overflow(size_t a, size_t b, size_t *res);
57
+
58
+ #endif