koffi 2.14.1 → 2.15.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 (102) hide show
  1. package/CHANGELOG.md +19 -0
  2. package/build/koffi/darwin_arm64/koffi.node +0 -0
  3. package/build/koffi/darwin_x64/koffi.node +0 -0
  4. package/build/koffi/freebsd_arm64/koffi.node +0 -0
  5. package/build/koffi/freebsd_ia32/koffi.node +0 -0
  6. package/build/koffi/freebsd_x64/koffi.node +0 -0
  7. package/build/koffi/linux_arm64/koffi.node +0 -0
  8. package/build/koffi/linux_armhf/koffi.node +0 -0
  9. package/build/koffi/linux_ia32/koffi.node +0 -0
  10. package/build/koffi/linux_loong64/koffi.node +0 -0
  11. package/build/koffi/linux_riscv64d/koffi.node +0 -0
  12. package/build/koffi/linux_x64/koffi.node +0 -0
  13. package/build/koffi/musl_arm64/koffi.node +0 -0
  14. package/build/koffi/musl_x64/koffi.node +0 -0
  15. package/build/koffi/openbsd_ia32/koffi.node +0 -0
  16. package/build/koffi/openbsd_x64/koffi.node +0 -0
  17. package/build/koffi/win32_arm64/koffi.node +0 -0
  18. package/build/koffi/win32_ia32/koffi.node +0 -0
  19. package/build/koffi/win32_x64/koffi.node +0 -0
  20. package/doc/assets.ini +2 -1
  21. package/doc/build.sh +9 -0
  22. package/doc/pages/404.md +17 -0
  23. package/doc/pages/index.md +1 -1
  24. package/doc/pages/misc.md +16 -11
  25. package/doc/pages.ini +4 -0
  26. package/doc/static/highlight.js +2 -14
  27. package/doc/static/koffi.css +3 -15
  28. package/doc/static/print.css +2 -14
  29. package/index.d.ts +29 -24
  30. package/index.js +8 -8
  31. package/indirect.js +8 -8
  32. package/{src/core → lib/native}/base/base.cc +1058 -630
  33. package/{src/core → lib/native}/base/base.hh +334 -165
  34. package/{src/core → lib/native}/base/crc.inc +2 -20
  35. package/lib/native/base/crc_gen.py +72 -0
  36. package/{src/core → lib/native}/base/mimetypes.inc +2 -20
  37. package/{src/core → lib/native}/base/mimetypes_gen.py +2 -21
  38. package/lib/native/base/tower.cc +821 -0
  39. package/lib/native/base/tower.hh +81 -0
  40. package/{src/core → lib/native}/base/unicode.inc +2 -20
  41. package/{src/core → lib/native}/base/unicode_gen.py +4 -41
  42. package/package.json +1 -1
  43. package/src/cnoke/assets/FindCNoke.cmake +8 -20
  44. package/src/cnoke/assets/win_delay_hook.c +2 -20
  45. package/src/cnoke/cnoke.js +2 -21
  46. package/src/cnoke/src/builder.js +2 -20
  47. package/src/cnoke/src/index.js +2 -20
  48. package/src/cnoke/src/tools.js +2 -20
  49. package/src/koffi/CMakeLists.txt +19 -22
  50. package/src/koffi/cmake/raylib.cmake +5 -22
  51. package/src/koffi/cmake/sqlite3.cmake +2 -20
  52. package/src/koffi/src/abi_arm32.cc +7 -25
  53. package/src/koffi/src/abi_arm32_asm.S +2 -20
  54. package/src/koffi/src/abi_arm64.cc +7 -25
  55. package/src/koffi/src/abi_arm64_asm.S +2 -20
  56. package/src/koffi/src/abi_arm64_asm.asm +2 -20
  57. package/src/koffi/src/abi_loong64.cc +2 -20
  58. package/src/koffi/src/abi_loong64_asm.S +2 -20
  59. package/src/koffi/src/abi_riscv64.cc +7 -25
  60. package/src/koffi/src/abi_riscv64_asm.S +2 -20
  61. package/src/koffi/src/abi_x64_sysv.cc +7 -25
  62. package/src/koffi/src/abi_x64_sysv_asm.S +2 -20
  63. package/src/koffi/src/abi_x64_win.cc +12 -30
  64. package/src/koffi/src/abi_x64_win_asm.asm +2 -20
  65. package/src/koffi/src/abi_x86.cc +7 -25
  66. package/src/koffi/src/abi_x86_asm.S +2 -20
  67. package/src/koffi/src/abi_x86_asm.asm +2 -20
  68. package/src/koffi/src/call.cc +25 -45
  69. package/src/koffi/src/call.hh +3 -21
  70. package/src/koffi/src/errno.inc +2 -20
  71. package/src/koffi/src/ffi.cc +62 -62
  72. package/src/koffi/src/ffi.hh +14 -29
  73. package/src/koffi/src/init.js +2 -20
  74. package/src/koffi/src/parser.cc +13 -27
  75. package/src/koffi/src/parser.hh +3 -21
  76. package/src/koffi/src/trampolines/armasm.inc +0 -21
  77. package/src/koffi/src/trampolines/gnu.inc +0 -21
  78. package/src/koffi/src/trampolines/masm32.inc +0 -21
  79. package/src/koffi/src/trampolines/masm64.inc +0 -21
  80. package/src/koffi/src/trampolines/prototypes.inc +0 -21
  81. package/src/koffi/src/util.cc +44 -59
  82. package/src/koffi/src/util.hh +6 -24
  83. package/src/koffi/src/uv.cc +193 -0
  84. package/src/koffi/src/uv.def +10 -0
  85. package/src/koffi/src/uv.hh +40 -0
  86. package/src/koffi/src/win32.cc +2 -20
  87. package/src/koffi/src/win32.hh +3 -21
  88. package/vendor/node-api-headers/include/uv/aix.h +32 -0
  89. package/vendor/node-api-headers/include/uv/bsd.h +34 -0
  90. package/vendor/node-api-headers/include/uv/darwin.h +61 -0
  91. package/vendor/node-api-headers/include/uv/errno.h +483 -0
  92. package/vendor/node-api-headers/include/uv/linux.h +34 -0
  93. package/vendor/node-api-headers/include/uv/os390.h +33 -0
  94. package/vendor/node-api-headers/include/uv/posix.h +31 -0
  95. package/vendor/node-api-headers/include/uv/sunos.h +44 -0
  96. package/vendor/node-api-headers/include/uv/threadpool.h +37 -0
  97. package/vendor/node-api-headers/include/uv/tree.h +521 -0
  98. package/vendor/node-api-headers/include/uv/unix.h +512 -0
  99. package/vendor/node-api-headers/include/uv/version.h +43 -0
  100. package/vendor/node-api-headers/include/uv/win.h +698 -0
  101. package/vendor/node-api-headers/include/uv.h +1990 -0
  102. package/src/core/base/crc_gen.py +0 -109
@@ -0,0 +1,698 @@
1
+ /* Copyright Joyent, Inc. and other Node contributors. All rights reserved.
2
+ *
3
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
4
+ * of this software and associated documentation files (the "Software"), to
5
+ * deal in the Software without restriction, including without limitation the
6
+ * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
7
+ * sell copies of the Software, and to permit persons to whom the Software is
8
+ * furnished to do so, subject to the following conditions:
9
+ *
10
+ * The above copyright notice and this permission notice shall be included in
11
+ * all copies or substantial portions of the Software.
12
+ *
13
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
18
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
19
+ * IN THE SOFTWARE.
20
+ */
21
+
22
+ #ifndef _WIN32_WINNT
23
+ # define _WIN32_WINNT 0x0A00
24
+ #endif
25
+
26
+ #if !defined(_SSIZE_T_) && !defined(_SSIZE_T_DEFINED)
27
+ typedef intptr_t ssize_t;
28
+ # define SSIZE_MAX INTPTR_MAX
29
+ # define _SSIZE_T_
30
+ # define _SSIZE_T_DEFINED
31
+ #endif
32
+
33
+ #include <winsock2.h>
34
+
35
+ #ifndef LOCALE_INVARIANT
36
+ # define LOCALE_INVARIANT 0x007f
37
+ #endif
38
+
39
+ #include <mswsock.h>
40
+ /* Disable the typedef in mstcpip.h of MinGW. */
41
+ #define _TCP_INITIAL_RTO_PARAMETERS _TCP_INITIAL_RTO_PARAMETERS__AVOID
42
+ #define TCP_INITIAL_RTO_PARAMETERS TCP_INITIAL_RTO_PARAMETERS__AVOID
43
+ #define PTCP_INITIAL_RTO_PARAMETERS PTCP_INITIAL_RTO_PARAMETERS__AVOID
44
+ #include <ws2tcpip.h>
45
+ #undef _TCP_INITIAL_RTO_PARAMETERS
46
+ #undef TCP_INITIAL_RTO_PARAMETERS
47
+ #undef PTCP_INITIAL_RTO_PARAMETERS
48
+ #include <windows.h>
49
+
50
+ #include <process.h>
51
+ #include <signal.h>
52
+ #include <fcntl.h>
53
+ #include <sys/stat.h>
54
+ #include <stdint.h>
55
+
56
+ #include "uv/tree.h"
57
+ #include "uv/threadpool.h"
58
+
59
+ #define MAX_PIPENAME_LEN 256
60
+
61
+ #ifndef S_IFLNK
62
+ # define S_IFLNK 0xA000
63
+ #endif
64
+
65
+ /* Define missing in Windows Kit Include\{VERSION}\ucrt\sys\stat.h */
66
+ #if defined(_CRT_INTERNAL_NONSTDC_NAMES) && _CRT_INTERNAL_NONSTDC_NAMES && !defined(S_IFIFO)
67
+ # define S_IFIFO _S_IFIFO
68
+ #endif
69
+
70
+ /* Additional signals supported by uv_signal and or uv_kill. The CRT defines
71
+ * the following signals already:
72
+ *
73
+ * #define SIGINT 2
74
+ * #define SIGILL 4
75
+ * #define SIGABRT_COMPAT 6
76
+ * #define SIGFPE 8
77
+ * #define SIGSEGV 11
78
+ * #define SIGTERM 15
79
+ * #define SIGBREAK 21
80
+ * #define SIGABRT 22
81
+ *
82
+ * The additional signals have values that are common on other Unix
83
+ * variants (Linux and Darwin)
84
+ */
85
+ #define SIGHUP 1
86
+ #define SIGQUIT 3
87
+ #define SIGKILL 9
88
+ #define SIGWINCH 28
89
+
90
+ /* Redefine NSIG to take SIGWINCH into consideration */
91
+ #if defined(NSIG) && NSIG <= SIGWINCH
92
+ # undef NSIG
93
+ #endif
94
+ #ifndef NSIG
95
+ # define NSIG SIGWINCH + 1
96
+ #endif
97
+
98
+ /* The CRT defines SIGABRT_COMPAT as 6, which equals SIGABRT on many unix-like
99
+ * platforms. However MinGW doesn't define it, so we do. */
100
+ #ifndef SIGABRT_COMPAT
101
+ # define SIGABRT_COMPAT 6
102
+ #endif
103
+
104
+ /*
105
+ * Guids and typedefs for winsock extension functions
106
+ * Mingw32 doesn't have these :-(
107
+ */
108
+ #ifndef WSAID_ACCEPTEX
109
+ # define WSAID_ACCEPTEX \
110
+ {0xb5367df1, 0xcbac, 0x11cf, \
111
+ {0x95, 0xca, 0x00, 0x80, 0x5f, 0x48, 0xa1, 0x92}}
112
+
113
+ # define WSAID_CONNECTEX \
114
+ {0x25a207b9, 0xddf3, 0x4660, \
115
+ {0x8e, 0xe9, 0x76, 0xe5, 0x8c, 0x74, 0x06, 0x3e}}
116
+
117
+ # define WSAID_GETACCEPTEXSOCKADDRS \
118
+ {0xb5367df2, 0xcbac, 0x11cf, \
119
+ {0x95, 0xca, 0x00, 0x80, 0x5f, 0x48, 0xa1, 0x92}}
120
+
121
+ # define WSAID_DISCONNECTEX \
122
+ {0x7fda2e11, 0x8630, 0x436f, \
123
+ {0xa0, 0x31, 0xf5, 0x36, 0xa6, 0xee, 0xc1, 0x57}}
124
+
125
+ # define WSAID_TRANSMITFILE \
126
+ {0xb5367df0, 0xcbac, 0x11cf, \
127
+ {0x95, 0xca, 0x00, 0x80, 0x5f, 0x48, 0xa1, 0x92}}
128
+
129
+ typedef BOOL (PASCAL *LPFN_ACCEPTEX)
130
+ (SOCKET sListenSocket,
131
+ SOCKET sAcceptSocket,
132
+ PVOID lpOutputBuffer,
133
+ DWORD dwReceiveDataLength,
134
+ DWORD dwLocalAddressLength,
135
+ DWORD dwRemoteAddressLength,
136
+ LPDWORD lpdwBytesReceived,
137
+ LPOVERLAPPED lpOverlapped);
138
+
139
+ typedef BOOL (PASCAL *LPFN_CONNECTEX)
140
+ (SOCKET s,
141
+ const struct sockaddr* name,
142
+ int namelen,
143
+ PVOID lpSendBuffer,
144
+ DWORD dwSendDataLength,
145
+ LPDWORD lpdwBytesSent,
146
+ LPOVERLAPPED lpOverlapped);
147
+
148
+ typedef void (PASCAL *LPFN_GETACCEPTEXSOCKADDRS)
149
+ (PVOID lpOutputBuffer,
150
+ DWORD dwReceiveDataLength,
151
+ DWORD dwLocalAddressLength,
152
+ DWORD dwRemoteAddressLength,
153
+ LPSOCKADDR* LocalSockaddr,
154
+ LPINT LocalSockaddrLength,
155
+ LPSOCKADDR* RemoteSockaddr,
156
+ LPINT RemoteSockaddrLength);
157
+
158
+ typedef BOOL (PASCAL *LPFN_DISCONNECTEX)
159
+ (SOCKET hSocket,
160
+ LPOVERLAPPED lpOverlapped,
161
+ DWORD dwFlags,
162
+ DWORD reserved);
163
+
164
+ typedef BOOL (PASCAL *LPFN_TRANSMITFILE)
165
+ (SOCKET hSocket,
166
+ HANDLE hFile,
167
+ DWORD nNumberOfBytesToWrite,
168
+ DWORD nNumberOfBytesPerSend,
169
+ LPOVERLAPPED lpOverlapped,
170
+ LPTRANSMIT_FILE_BUFFERS lpTransmitBuffers,
171
+ DWORD dwFlags);
172
+
173
+ typedef PVOID RTL_SRWLOCK;
174
+ typedef RTL_SRWLOCK SRWLOCK, *PSRWLOCK;
175
+ #endif
176
+
177
+ typedef int (WSAAPI* LPFN_WSARECV)
178
+ (SOCKET socket,
179
+ LPWSABUF buffers,
180
+ DWORD buffer_count,
181
+ LPDWORD bytes,
182
+ LPDWORD flags,
183
+ LPWSAOVERLAPPED overlapped,
184
+ LPWSAOVERLAPPED_COMPLETION_ROUTINE completion_routine);
185
+
186
+ typedef int (WSAAPI* LPFN_WSARECVFROM)
187
+ (SOCKET socket,
188
+ LPWSABUF buffers,
189
+ DWORD buffer_count,
190
+ LPDWORD bytes,
191
+ LPDWORD flags,
192
+ struct sockaddr* addr,
193
+ LPINT addr_len,
194
+ LPWSAOVERLAPPED overlapped,
195
+ LPWSAOVERLAPPED_COMPLETION_ROUTINE completion_routine);
196
+
197
+ #ifndef _NTDEF_
198
+ typedef LONG NTSTATUS;
199
+ typedef NTSTATUS *PNTSTATUS;
200
+ #endif
201
+
202
+ #ifndef RTL_CONDITION_VARIABLE_INIT
203
+ typedef PVOID CONDITION_VARIABLE, *PCONDITION_VARIABLE;
204
+ #endif
205
+
206
+ typedef struct _AFD_POLL_HANDLE_INFO {
207
+ HANDLE Handle;
208
+ ULONG Events;
209
+ NTSTATUS Status;
210
+ } AFD_POLL_HANDLE_INFO, *PAFD_POLL_HANDLE_INFO;
211
+
212
+ typedef struct _AFD_POLL_INFO {
213
+ LARGE_INTEGER Timeout;
214
+ ULONG NumberOfHandles;
215
+ ULONG Exclusive;
216
+ AFD_POLL_HANDLE_INFO Handles[1];
217
+ } AFD_POLL_INFO, *PAFD_POLL_INFO;
218
+
219
+ #define UV_MSAFD_PROVIDER_COUNT 4
220
+
221
+
222
+ /**
223
+ * It should be possible to cast uv_buf_t[] to WSABUF[]
224
+ * see http://msdn.microsoft.com/en-us/library/ms741542(v=vs.85).aspx
225
+ */
226
+ typedef struct uv_buf_t {
227
+ ULONG len;
228
+ char* base;
229
+ } uv_buf_t;
230
+
231
+ typedef int uv_file;
232
+ typedef SOCKET uv_os_sock_t;
233
+ typedef HANDLE uv_os_fd_t;
234
+ typedef int uv_pid_t;
235
+
236
+ typedef HANDLE uv_thread_t;
237
+
238
+ typedef HANDLE uv_sem_t;
239
+
240
+ typedef CRITICAL_SECTION uv_mutex_t;
241
+
242
+ /* This condition variable implementation is based on the SetEvent solution
243
+ * (section 3.2) at http://www.cs.wustl.edu/~schmidt/win32-cv-1.html
244
+ * We could not use the SignalObjectAndWait solution (section 3.4) because
245
+ * it want the 2nd argument (type uv_mutex_t) of uv_cond_wait() and
246
+ * uv_cond_timedwait() to be HANDLEs, but we use CRITICAL_SECTIONs.
247
+ */
248
+
249
+ typedef union {
250
+ CONDITION_VARIABLE cond_var;
251
+ struct {
252
+ unsigned int waiters_count;
253
+ CRITICAL_SECTION waiters_count_lock;
254
+ HANDLE signal_event;
255
+ HANDLE broadcast_event;
256
+ } unused_; /* TODO: retained for ABI compatibility; remove me in v2.x. */
257
+ } uv_cond_t;
258
+
259
+ typedef struct {
260
+ SRWLOCK read_write_lock_;
261
+ /* TODO: retained for ABI compatibility; remove me in v2.x */
262
+ #ifdef _WIN64
263
+ unsigned char padding_[72];
264
+ #else
265
+ unsigned char padding_[44];
266
+ #endif
267
+ } uv_rwlock_t;
268
+
269
+ typedef struct {
270
+ unsigned threshold;
271
+ unsigned in;
272
+ uv_mutex_t mutex;
273
+ /* TODO: in v2 make this a uv_cond_t, without unused_ */
274
+ CONDITION_VARIABLE cond;
275
+ unsigned out;
276
+ } uv_barrier_t;
277
+
278
+ typedef struct {
279
+ DWORD tls_index;
280
+ } uv_key_t;
281
+
282
+ #define UV_ONCE_INIT { 0, NULL }
283
+
284
+ typedef struct uv_once_s {
285
+ unsigned char unused;
286
+ INIT_ONCE init_once;
287
+ } uv_once_t;
288
+
289
+ /* Platform-specific definitions for uv_spawn support. */
290
+ typedef unsigned char uv_uid_t;
291
+ typedef unsigned char uv_gid_t;
292
+
293
+ typedef struct uv__dirent_s {
294
+ int d_type;
295
+ char d_name[1];
296
+ } uv__dirent_t;
297
+
298
+ #define UV_DIR_PRIVATE_FIELDS \
299
+ HANDLE dir_handle; \
300
+ WIN32_FIND_DATAW find_data; \
301
+ BOOL need_find_call;
302
+
303
+ #define HAVE_DIRENT_TYPES
304
+ #define UV__DT_DIR UV_DIRENT_DIR
305
+ #define UV__DT_FILE UV_DIRENT_FILE
306
+ #define UV__DT_LINK UV_DIRENT_LINK
307
+ #define UV__DT_FIFO UV_DIRENT_FIFO
308
+ #define UV__DT_SOCKET UV_DIRENT_SOCKET
309
+ #define UV__DT_CHAR UV_DIRENT_CHAR
310
+ #define UV__DT_BLOCK UV_DIRENT_BLOCK
311
+
312
+ /* Platform-specific definitions for uv_dlopen support. */
313
+ #define UV_DYNAMIC FAR WINAPI
314
+ typedef struct {
315
+ HMODULE handle;
316
+ char* errmsg;
317
+ } uv_lib_t;
318
+
319
+ #define UV_LOOP_PRIVATE_FIELDS \
320
+ /* The loop's I/O completion port */ \
321
+ HANDLE iocp; \
322
+ /* The current time according to the event loop. in msecs. */ \
323
+ uint64_t time; \
324
+ /* Tail of a single-linked circular queue of pending reqs. If the queue */ \
325
+ /* is empty, tail_ is NULL. If there is only one item, */ \
326
+ /* tail_->next_req == tail_ */ \
327
+ uv_req_t* pending_reqs_tail; \
328
+ /* Head of a single-linked list of closed handles */ \
329
+ uv_handle_t* endgame_handles; \
330
+ /* TODO(bnoordhuis) Stop heap-allocating |timer_heap| in libuv v2.x. */ \
331
+ void* timer_heap; \
332
+ /* Lists of active loop (prepare / check / idle) watchers */ \
333
+ uv_prepare_t* prepare_handles; \
334
+ uv_check_t* check_handles; \
335
+ uv_idle_t* idle_handles; \
336
+ /* This pointer will refer to the prepare/check/idle handle whose */ \
337
+ /* callback is scheduled to be called next. This is needed to allow */ \
338
+ /* safe removal from one of the lists above while that list being */ \
339
+ /* iterated over. */ \
340
+ uv_prepare_t* next_prepare_handle; \
341
+ uv_check_t* next_check_handle; \
342
+ uv_idle_t* next_idle_handle; \
343
+ /* This handle holds the peer sockets for the fast variant of uv_poll_t */ \
344
+ SOCKET poll_peer_sockets[UV_MSAFD_PROVIDER_COUNT]; \
345
+ /* No longer used. */ \
346
+ unsigned int active_tcp_streams; \
347
+ /* No longer used. */ \
348
+ unsigned int active_udp_streams; \
349
+ /* Counter to started timer */ \
350
+ uint64_t timer_counter; \
351
+ /* Threadpool */ \
352
+ struct uv__queue wq; \
353
+ uv_mutex_t wq_mutex; \
354
+ uv_async_t wq_async;
355
+
356
+ #define UV_REQ_TYPE_PRIVATE \
357
+ /* TODO: remove the req suffix */ \
358
+ UV_ACCEPT, \
359
+ UV_FS_EVENT_REQ, \
360
+ UV_POLL_REQ, \
361
+ UV_PROCESS_EXIT, \
362
+ UV_READ, \
363
+ UV_UDP_RECV, \
364
+ UV_WAKEUP, \
365
+ UV_SIGNAL_REQ,
366
+
367
+ #define UV_REQ_PRIVATE_FIELDS \
368
+ union { \
369
+ /* Used by I/O operations */ \
370
+ struct { \
371
+ OVERLAPPED overlapped; \
372
+ size_t queued_bytes; \
373
+ } io; \
374
+ /* in v2, we can move these to the UV_CONNECT_PRIVATE_FIELDS */ \
375
+ struct { \
376
+ ULONG_PTR result; /* overlapped.Internal is reused to hold the result */\
377
+ HANDLE pipeHandle; \
378
+ DWORD duplex_flags; \
379
+ WCHAR* name; \
380
+ } connect; \
381
+ } u; \
382
+ struct uv_req_s* next_req;
383
+
384
+ #define UV_WRITE_PRIVATE_FIELDS \
385
+ int coalesced; \
386
+ uv_buf_t write_buffer; \
387
+ HANDLE event_handle; \
388
+ HANDLE wait_handle;
389
+
390
+ #define UV_CONNECT_PRIVATE_FIELDS \
391
+ /* empty */
392
+
393
+ #define UV_SHUTDOWN_PRIVATE_FIELDS \
394
+ /* empty */
395
+
396
+ #define UV_UDP_SEND_PRIVATE_FIELDS \
397
+ /* empty */
398
+
399
+ #define UV_PRIVATE_REQ_TYPES \
400
+ typedef struct uv_pipe_accept_s { \
401
+ UV_REQ_FIELDS \
402
+ HANDLE pipeHandle; \
403
+ struct uv_pipe_accept_s* next_pending; \
404
+ } uv_pipe_accept_t; \
405
+ \
406
+ typedef struct uv_tcp_accept_s { \
407
+ UV_REQ_FIELDS \
408
+ SOCKET accept_socket; \
409
+ char accept_buffer[sizeof(struct sockaddr_storage) * 2 + 32]; \
410
+ HANDLE event_handle; \
411
+ HANDLE wait_handle; \
412
+ struct uv_tcp_accept_s* next_pending; \
413
+ } uv_tcp_accept_t; \
414
+ \
415
+ typedef struct uv_read_s { \
416
+ UV_REQ_FIELDS \
417
+ HANDLE event_handle; \
418
+ HANDLE wait_handle; \
419
+ } uv_read_t;
420
+
421
+ #define uv_stream_connection_fields \
422
+ unsigned int write_reqs_pending; \
423
+ uv_shutdown_t* shutdown_req;
424
+
425
+ #define uv_stream_server_fields \
426
+ uv_connection_cb connection_cb;
427
+
428
+ #define UV_STREAM_PRIVATE_FIELDS \
429
+ unsigned int reqs_pending; \
430
+ int activecnt; \
431
+ uv_read_t read_req; \
432
+ union { \
433
+ struct { uv_stream_connection_fields } conn; \
434
+ struct { uv_stream_server_fields } serv; \
435
+ } stream;
436
+
437
+ #define uv_tcp_server_fields \
438
+ uv_tcp_accept_t* accept_reqs; \
439
+ unsigned int processed_accepts; \
440
+ uv_tcp_accept_t* pending_accepts; \
441
+ LPFN_ACCEPTEX func_acceptex;
442
+
443
+ #define uv_tcp_connection_fields \
444
+ uv_buf_t read_buffer; \
445
+ LPFN_CONNECTEX func_connectex;
446
+
447
+ #define UV_TCP_PRIVATE_FIELDS \
448
+ SOCKET socket; \
449
+ int delayed_error; \
450
+ union { \
451
+ struct { uv_tcp_server_fields } serv; \
452
+ struct { uv_tcp_connection_fields } conn; \
453
+ } tcp;
454
+
455
+ #define UV_UDP_PRIVATE_FIELDS \
456
+ SOCKET socket; \
457
+ unsigned int reqs_pending; \
458
+ int activecnt; \
459
+ uv_req_t recv_req; \
460
+ uv_buf_t recv_buffer; \
461
+ struct sockaddr_storage recv_from; \
462
+ int recv_from_len; \
463
+ uv_udp_recv_cb recv_cb; \
464
+ uv_alloc_cb alloc_cb; \
465
+ LPFN_WSARECV func_wsarecv; \
466
+ LPFN_WSARECVFROM func_wsarecvfrom;
467
+
468
+ #define uv_pipe_server_fields \
469
+ int pending_instances; \
470
+ uv_pipe_accept_t* accept_reqs; \
471
+ uv_pipe_accept_t* pending_accepts;
472
+
473
+ #define uv_pipe_connection_fields \
474
+ uv_timer_t* eof_timer; \
475
+ uv_write_t dummy; /* TODO: retained for ABI compat; remove this in v2.x. */ \
476
+ DWORD ipc_remote_pid; \
477
+ union { \
478
+ uint32_t payload_remaining; \
479
+ uint64_t dummy; /* TODO: retained for ABI compat; remove this in v2.x. */ \
480
+ } ipc_data_frame; \
481
+ struct uv__queue ipc_xfer_queue; \
482
+ int ipc_xfer_queue_length; \
483
+ uv_write_t* non_overlapped_writes_tail; \
484
+ CRITICAL_SECTION readfile_thread_lock; \
485
+ volatile HANDLE readfile_thread_handle;
486
+
487
+ #define UV_PIPE_PRIVATE_FIELDS \
488
+ HANDLE handle; \
489
+ WCHAR* name; \
490
+ union { \
491
+ struct { uv_pipe_server_fields } serv; \
492
+ struct { uv_pipe_connection_fields } conn; \
493
+ } pipe;
494
+
495
+ /* TODO: put the parser states in a union - TTY handles are always half-duplex
496
+ * so read-state can safely overlap write-state. */
497
+ #define UV_TTY_PRIVATE_FIELDS \
498
+ HANDLE handle; \
499
+ union { \
500
+ struct { \
501
+ /* Used for readable TTY handles */ \
502
+ union { \
503
+ /* TODO: remove me in v2.x. */ \
504
+ HANDLE unused_; \
505
+ int mode; \
506
+ } mode; \
507
+ uv_buf_t read_line_buffer; \
508
+ HANDLE read_raw_wait; \
509
+ /* Fields used for translating win keystrokes into vt100 characters */ \
510
+ char last_key[8]; \
511
+ unsigned char last_key_offset; \
512
+ unsigned char last_key_len; \
513
+ WCHAR last_utf16_high_surrogate; \
514
+ INPUT_RECORD last_input_record; \
515
+ } rd; \
516
+ struct { \
517
+ /* Used for writable TTY handles */ \
518
+ /* utf8-to-utf16 conversion state */ \
519
+ unsigned int utf8_codepoint; \
520
+ unsigned char utf8_bytes_left; \
521
+ /* eol conversion state */ \
522
+ unsigned char previous_eol; \
523
+ /* ansi parser state */ \
524
+ unsigned short ansi_parser_state; \
525
+ unsigned char ansi_csi_argc; \
526
+ unsigned short ansi_csi_argv[4]; \
527
+ COORD saved_position; \
528
+ WORD saved_attributes; \
529
+ } wr; \
530
+ } tty;
531
+
532
+ #define UV_POLL_PRIVATE_FIELDS \
533
+ SOCKET socket; \
534
+ /* Used in fast mode */ \
535
+ SOCKET peer_socket; \
536
+ AFD_POLL_INFO afd_poll_info_1; \
537
+ AFD_POLL_INFO afd_poll_info_2; \
538
+ /* Used in fast and slow mode. */ \
539
+ uv_req_t poll_req_1; \
540
+ uv_req_t poll_req_2; \
541
+ unsigned char submitted_events_1; \
542
+ unsigned char submitted_events_2; \
543
+ unsigned char mask_events_1; \
544
+ unsigned char mask_events_2; \
545
+ unsigned char events;
546
+
547
+ #define UV_TIMER_PRIVATE_FIELDS \
548
+ union { \
549
+ void* heap[3]; \
550
+ struct uv__queue queue; \
551
+ } node; \
552
+ int unused; \
553
+ uint64_t timeout; \
554
+ uint64_t repeat; \
555
+ uint64_t start_id; \
556
+ uv_timer_cb timer_cb;
557
+
558
+ #define UV_ASYNC_PRIVATE_FIELDS \
559
+ struct uv_req_s async_req; \
560
+ uv_async_cb async_cb; \
561
+ /* char to avoid alignment issues */ \
562
+ char volatile async_sent;
563
+
564
+ #define UV_PREPARE_PRIVATE_FIELDS \
565
+ uv_prepare_t* prepare_prev; \
566
+ uv_prepare_t* prepare_next; \
567
+ uv_prepare_cb prepare_cb;
568
+
569
+ #define UV_CHECK_PRIVATE_FIELDS \
570
+ uv_check_t* check_prev; \
571
+ uv_check_t* check_next; \
572
+ uv_check_cb check_cb;
573
+
574
+ #define UV_IDLE_PRIVATE_FIELDS \
575
+ uv_idle_t* idle_prev; \
576
+ uv_idle_t* idle_next; \
577
+ uv_idle_cb idle_cb;
578
+
579
+ #define UV_HANDLE_PRIVATE_FIELDS \
580
+ uv_handle_t* endgame_next; \
581
+ unsigned int flags;
582
+
583
+ #define UV_GETADDRINFO_PRIVATE_FIELDS \
584
+ struct uv__work work_req; \
585
+ uv_getaddrinfo_cb getaddrinfo_cb; \
586
+ void* alloc; \
587
+ WCHAR* node; \
588
+ WCHAR* service; \
589
+ /* The addrinfoW field is used to store a pointer to the hints, and */ \
590
+ /* later on to store the result of GetAddrInfoW. The final result will */ \
591
+ /* be converted to struct addrinfo* and stored in the addrinfo field. */ \
592
+ struct addrinfoW* addrinfow; \
593
+ struct addrinfo* addrinfo; \
594
+ int retcode;
595
+
596
+ #define UV_GETNAMEINFO_PRIVATE_FIELDS \
597
+ struct uv__work work_req; \
598
+ uv_getnameinfo_cb getnameinfo_cb; \
599
+ struct sockaddr_storage storage; \
600
+ int flags; \
601
+ char host[NI_MAXHOST]; \
602
+ char service[NI_MAXSERV]; \
603
+ int retcode;
604
+
605
+ #define UV_PROCESS_PRIVATE_FIELDS \
606
+ struct uv_process_exit_s { \
607
+ UV_REQ_FIELDS \
608
+ } exit_req; \
609
+ void* unused; /* TODO: retained for ABI compat; remove this in v2.x. */ \
610
+ int exit_signal; \
611
+ HANDLE wait_handle; \
612
+ HANDLE process_handle; \
613
+ volatile char exit_cb_pending;
614
+
615
+ #define UV_FS_PRIVATE_FIELDS \
616
+ struct uv__work work_req; \
617
+ int flags; \
618
+ DWORD sys_errno_; \
619
+ union { \
620
+ /* TODO: remove me in 0.9. */ \
621
+ WCHAR* pathw; \
622
+ int fd; \
623
+ } file; \
624
+ union { \
625
+ struct { \
626
+ int mode; \
627
+ WCHAR* new_pathw; \
628
+ int file_flags; \
629
+ int fd_out; \
630
+ unsigned int nbufs; \
631
+ uv_buf_t* bufs; \
632
+ int64_t offset; \
633
+ uv_buf_t bufsml[4]; \
634
+ } info; \
635
+ struct { \
636
+ double atime; \
637
+ double mtime; \
638
+ } time; \
639
+ } fs;
640
+
641
+ #define UV_WORK_PRIVATE_FIELDS \
642
+ struct uv__work work_req;
643
+
644
+ #define UV_FS_EVENT_PRIVATE_FIELDS \
645
+ struct uv_fs_event_req_s { \
646
+ UV_REQ_FIELDS \
647
+ } req; \
648
+ HANDLE dir_handle; \
649
+ int req_pending; \
650
+ uv_fs_event_cb cb; \
651
+ WCHAR* filew; \
652
+ WCHAR* short_filew; \
653
+ WCHAR* dirw; \
654
+ char* buffer;
655
+
656
+ #define UV_SIGNAL_PRIVATE_FIELDS \
657
+ RB_ENTRY(uv_signal_s) tree_entry; \
658
+ struct uv_req_s signal_req; \
659
+ unsigned long pending_signum;
660
+
661
+ #ifndef F_OK
662
+ #define F_OK 0
663
+ #endif
664
+ #ifndef R_OK
665
+ #define R_OK 4
666
+ #endif
667
+ #ifndef W_OK
668
+ #define W_OK 2
669
+ #endif
670
+ #ifndef X_OK
671
+ #define X_OK 1
672
+ #endif
673
+
674
+ /* fs open() flags supported on this platform: */
675
+ #define UV_FS_O_APPEND _O_APPEND
676
+ #define UV_FS_O_CREAT _O_CREAT
677
+ #define UV_FS_O_EXCL _O_EXCL
678
+ #define UV_FS_O_FILEMAP 0x20000000
679
+ #define UV_FS_O_RANDOM _O_RANDOM
680
+ #define UV_FS_O_RDONLY _O_RDONLY
681
+ #define UV_FS_O_RDWR _O_RDWR
682
+ #define UV_FS_O_SEQUENTIAL _O_SEQUENTIAL
683
+ #define UV_FS_O_SHORT_LIVED _O_SHORT_LIVED
684
+ #define UV_FS_O_TEMPORARY _O_TEMPORARY
685
+ #define UV_FS_O_TRUNC _O_TRUNC
686
+ #define UV_FS_O_WRONLY _O_WRONLY
687
+
688
+ /* fs open() flags supported on other platforms (or mapped on this platform): */
689
+ #define UV_FS_O_DIRECT 0x02000000 /* FILE_FLAG_NO_BUFFERING */
690
+ #define UV_FS_O_DIRECTORY 0
691
+ #define UV_FS_O_DSYNC 0x04000000 /* FILE_FLAG_WRITE_THROUGH */
692
+ #define UV_FS_O_EXLOCK 0x10000000 /* EXCLUSIVE SHARING MODE */
693
+ #define UV_FS_O_NOATIME 0
694
+ #define UV_FS_O_NOCTTY 0
695
+ #define UV_FS_O_NOFOLLOW 0
696
+ #define UV_FS_O_NONBLOCK 0
697
+ #define UV_FS_O_SYMLINK 0
698
+ #define UV_FS_O_SYNC 0x08000000 /* FILE_FLAG_WRITE_THROUGH */