23 # define _WIN32_WINNT 0x0600
26 #if !defined(_SSIZE_T_) && !defined(_SSIZE_T_DEFINED)
27 typedef intptr_t ssize_t;
29 # define _SSIZE_T_DEFINED
34 #if defined(__MINGW32__) && !defined(__MINGW64_VERSION_MAJOR)
35 typedef struct pollfd {
39 } WSAPOLLFD, *PWSAPOLLFD, *LPWSAPOLLFD;
42 #ifndef LOCALE_INVARIANT
43 # define LOCALE_INVARIANT 0x007f
58 #include "uv/threadpool.h"
60 #define MAX_PIPENAME_LEN 256
63 # define S_IFLNK 0xA000
87 #ifndef SIGABRT_COMPAT
88 # define SIGABRT_COMPAT 6
95 #ifndef WSAID_ACCEPTEX
96 # define WSAID_ACCEPTEX \
97 {0xb5367df1, 0xcbac, 0x11cf, \
98 {0x95, 0xca, 0x00, 0x80, 0x5f, 0x48, 0xa1, 0x92}}
100 # define WSAID_CONNECTEX \
101 {0x25a207b9, 0xddf3, 0x4660, \
102 {0x8e, 0xe9, 0x76, 0xe5, 0x8c, 0x74, 0x06, 0x3e}}
104 # define WSAID_GETACCEPTEXSOCKADDRS \
105 {0xb5367df2, 0xcbac, 0x11cf, \
106 {0x95, 0xca, 0x00, 0x80, 0x5f, 0x48, 0xa1, 0x92}}
108 # define WSAID_DISCONNECTEX \
109 {0x7fda2e11, 0x8630, 0x436f, \
110 {0xa0, 0x31, 0xf5, 0x36, 0xa6, 0xee, 0xc1, 0x57}}
112 # define WSAID_TRANSMITFILE \
113 {0xb5367df0, 0xcbac, 0x11cf, \
114 {0x95, 0xca, 0x00, 0x80, 0x5f, 0x48, 0xa1, 0x92}}
116 typedef BOOL (PASCAL *LPFN_ACCEPTEX)
117 (SOCKET sListenSocket,
118 SOCKET sAcceptSocket,
119 PVOID lpOutputBuffer,
120 DWORD dwReceiveDataLength,
121 DWORD dwLocalAddressLength,
122 DWORD dwRemoteAddressLength,
123 LPDWORD lpdwBytesReceived,
124 LPOVERLAPPED lpOverlapped);
126 typedef BOOL (PASCAL *LPFN_CONNECTEX)
128 const struct sockaddr* name,
131 DWORD dwSendDataLength,
132 LPDWORD lpdwBytesSent,
133 LPOVERLAPPED lpOverlapped);
135 typedef void (PASCAL *LPFN_GETACCEPTEXSOCKADDRS)
136 (PVOID lpOutputBuffer,
137 DWORD dwReceiveDataLength,
138 DWORD dwLocalAddressLength,
139 DWORD dwRemoteAddressLength,
140 LPSOCKADDR* LocalSockaddr,
141 LPINT LocalSockaddrLength,
142 LPSOCKADDR* RemoteSockaddr,
143 LPINT RemoteSockaddrLength);
145 typedef BOOL (PASCAL *LPFN_DISCONNECTEX)
147 LPOVERLAPPED lpOverlapped,
151 typedef BOOL (PASCAL *LPFN_TRANSMITFILE)
154 DWORD nNumberOfBytesToWrite,
155 DWORD nNumberOfBytesPerSend,
156 LPOVERLAPPED lpOverlapped,
157 LPTRANSMIT_FILE_BUFFERS lpTransmitBuffers,
160 typedef PVOID RTL_SRWLOCK;
161 typedef RTL_SRWLOCK SRWLOCK, *PSRWLOCK;
164 typedef int (WSAAPI* LPFN_WSARECV)
170 LPWSAOVERLAPPED overlapped,
171 LPWSAOVERLAPPED_COMPLETION_ROUTINE completion_routine);
173 typedef int (WSAAPI* LPFN_WSARECVFROM)
179 struct sockaddr* addr,
181 LPWSAOVERLAPPED overlapped,
182 LPWSAOVERLAPPED_COMPLETION_ROUTINE completion_routine);
185 typedef LONG NTSTATUS;
186 typedef NTSTATUS *PNTSTATUS;
189 #ifndef RTL_CONDITION_VARIABLE_INIT
190 typedef PVOID CONDITION_VARIABLE, *PCONDITION_VARIABLE;
200 LARGE_INTEGER Timeout;
201 ULONG NumberOfHandles;
206 #define UV_MSAFD_PROVIDER_COUNT 3
219 typedef SOCKET uv_os_sock_t;
220 typedef HANDLE uv_os_fd_t;
221 typedef int uv_pid_t;
223 typedef HANDLE uv_thread_t;
225 typedef HANDLE uv_sem_t;
227 typedef CRITICAL_SECTION uv_mutex_t;
237 CONDITION_VARIABLE cond_var;
239 unsigned int waiters_count;
240 CRITICAL_SECTION waiters_count_lock;
242 HANDLE broadcast_event;
248 unsigned int num_readers_;
249 CRITICAL_SECTION num_readers_lock_;
250 HANDLE write_semaphore_;
275 #define UV_ONCE_INIT { 0, NULL }
283 typedef unsigned char uv_uid_t;
284 typedef unsigned char uv_gid_t;
291 #define HAVE_DIRENT_TYPES
292 #define UV__DT_DIR UV_DIRENT_DIR
293 #define UV__DT_FILE UV_DIRENT_FILE
294 #define UV__DT_LINK UV_DIRENT_LINK
295 #define UV__DT_FIFO UV_DIRENT_FIFO
296 #define UV__DT_SOCKET UV_DIRENT_SOCKET
297 #define UV__DT_CHAR UV_DIRENT_CHAR
298 #define UV__DT_BLOCK UV_DIRENT_BLOCK
301 #define UV_DYNAMIC FAR WINAPI
309 #define UV_LOOP_PRIVATE_FIELDS \
317 uv_req_t* pending_reqs_tail; \
319 uv_handle_t* endgame_handles; \
321 struct uv_timer_tree_s timers; \
323 uv_prepare_t* prepare_handles; \
324 uv_check_t* check_handles; \
325 uv_idle_t* idle_handles; \
330 uv_prepare_t* next_prepare_handle; \
331 uv_check_t* next_check_handle; \
332 uv_idle_t* next_idle_handle; \
334 SOCKET poll_peer_sockets[UV_MSAFD_PROVIDER_COUNT]; \
336 unsigned int active_tcp_streams; \
338 unsigned int active_udp_streams; \
340 uint64_t timer_counter; \
343 uv_mutex_t wq_mutex; \
346 #define UV_REQ_TYPE_PRIVATE \
357 #define UV_REQ_PRIVATE_FIELDS \
361 OVERLAPPED overlapped; \
362 size_t queued_bytes; \
365 struct uv_req_s* next_req;
367 #define UV_WRITE_PRIVATE_FIELDS \
369 uv_buf_t write_buffer; \
370 HANDLE event_handle; \
373 #define UV_CONNECT_PRIVATE_FIELDS \
376 #define UV_SHUTDOWN_PRIVATE_FIELDS \
379 #define UV_UDP_SEND_PRIVATE_FIELDS \
382 #define UV_PRIVATE_REQ_TYPES \
383 typedef struct uv_pipe_accept_s { \
386 struct uv_pipe_accept_s* next_pending; \
387 } uv_pipe_accept_t; \
389 typedef struct uv_tcp_accept_s { \
391 SOCKET accept_socket; \
392 char accept_buffer[sizeof(struct sockaddr_storage) * 2 + 32]; \
393 HANDLE event_handle; \
394 HANDLE wait_handle; \
395 struct uv_tcp_accept_s* next_pending; \
398 typedef struct uv_read_s { \
400 HANDLE event_handle; \
401 HANDLE wait_handle; \
404 #define uv_stream_connection_fields \
405 unsigned int write_reqs_pending; \
406 uv_shutdown_t* shutdown_req;
408 #define uv_stream_server_fields \
409 uv_connection_cb connection_cb;
411 #define UV_STREAM_PRIVATE_FIELDS \
412 unsigned int reqs_pending; \
414 uv_read_t read_req; \
416 struct { uv_stream_connection_fields } conn; \
417 struct { uv_stream_server_fields } serv; \
420 #define uv_tcp_server_fields \
421 uv_tcp_accept_t* accept_reqs; \
422 unsigned int processed_accepts; \
423 uv_tcp_accept_t* pending_accepts; \
424 LPFN_ACCEPTEX func_acceptex;
426 #define uv_tcp_connection_fields \
427 uv_buf_t read_buffer; \
428 LPFN_CONNECTEX func_connectex;
430 #define UV_TCP_PRIVATE_FIELDS \
434 struct { uv_tcp_server_fields } serv; \
435 struct { uv_tcp_connection_fields } conn; \
438 #define UV_UDP_PRIVATE_FIELDS \
440 unsigned int reqs_pending; \
443 uv_buf_t recv_buffer; \
444 struct sockaddr_storage recv_from; \
446 uv_udp_recv_cb recv_cb; \
447 uv_alloc_cb alloc_cb; \
448 LPFN_WSARECV func_wsarecv; \
449 LPFN_WSARECVFROM func_wsarecvfrom;
451 #define uv_pipe_server_fields \
452 int pending_instances; \
453 uv_pipe_accept_t* accept_reqs; \
454 uv_pipe_accept_t* pending_accepts;
456 #define uv_pipe_connection_fields \
457 uv_timer_t* eof_timer; \
459 DWORD ipc_remote_pid; \
461 uint32_t payload_remaining; \
464 void* ipc_xfer_queue[2]; \
465 int ipc_xfer_queue_length; \
466 uv_write_t* non_overlapped_writes_tail; \
467 CRITICAL_SECTION readfile_thread_lock; \
468 volatile HANDLE readfile_thread_handle;
470 #define UV_PIPE_PRIVATE_FIELDS \
474 struct { uv_pipe_server_fields } serv; \
475 struct { uv_pipe_connection_fields } conn; \
480 #define UV_TTY_PRIVATE_FIELDS \
487 uv_buf_t read_line_buffer; \
488 HANDLE read_raw_wait; \
491 unsigned char last_key_offset; \
492 unsigned char last_key_len; \
493 WCHAR last_utf16_high_surrogate; \
494 INPUT_RECORD last_input_record; \
499 unsigned int utf8_codepoint; \
500 unsigned char utf8_bytes_left; \
502 unsigned char previous_eol; \
504 unsigned char ansi_parser_state; \
505 unsigned char ansi_csi_argc; \
506 unsigned short ansi_csi_argv[4]; \
507 COORD saved_position; \
508 WORD saved_attributes; \
512 #define UV_POLL_PRIVATE_FIELDS \
515 SOCKET peer_socket; \
516 AFD_POLL_INFO afd_poll_info_1; \
517 AFD_POLL_INFO afd_poll_info_2; \
519 uv_req_t poll_req_1; \
520 uv_req_t poll_req_2; \
521 unsigned char submitted_events_1; \
522 unsigned char submitted_events_2; \
523 unsigned char mask_events_1; \
524 unsigned char mask_events_2; \
525 unsigned char events;
527 #define UV_TIMER_PRIVATE_FIELDS \
528 RB_ENTRY(uv_timer_s) tree_entry; \
532 uv_timer_cb timer_cb;
534 #define UV_ASYNC_PRIVATE_FIELDS \
535 struct uv_req_s async_req; \
536 uv_async_cb async_cb; \
538 char volatile async_sent;
540 #define UV_PREPARE_PRIVATE_FIELDS \
541 uv_prepare_t* prepare_prev; \
542 uv_prepare_t* prepare_next; \
543 uv_prepare_cb prepare_cb;
545 #define UV_CHECK_PRIVATE_FIELDS \
546 uv_check_t* check_prev; \
547 uv_check_t* check_next; \
548 uv_check_cb check_cb;
550 #define UV_IDLE_PRIVATE_FIELDS \
551 uv_idle_t* idle_prev; \
552 uv_idle_t* idle_next; \
555 #define UV_HANDLE_PRIVATE_FIELDS \
556 uv_handle_t* endgame_next; \
559 #define UV_GETADDRINFO_PRIVATE_FIELDS \
560 struct uv__work work_req; \
561 uv_getaddrinfo_cb getaddrinfo_cb; \
568 struct addrinfoW* addrinfow; \
569 struct addrinfo* addrinfo; \
572 #define UV_GETNAMEINFO_PRIVATE_FIELDS \
573 struct uv__work work_req; \
574 uv_getnameinfo_cb getnameinfo_cb; \
575 struct sockaddr_storage storage; \
577 char host[NI_MAXHOST]; \
578 char service[NI_MAXSERV]; \
581 #define UV_PROCESS_PRIVATE_FIELDS \
582 struct uv_process_exit_s { \
585 BYTE* child_stdio_buffer; \
587 HANDLE wait_handle; \
588 HANDLE process_handle; \
589 volatile char exit_cb_pending;
591 #define UV_FS_PRIVATE_FIELDS \
592 struct uv__work work_req; \
606 unsigned int nbufs; \
609 uv_buf_t bufsml[4]; \
617 #define UV_WORK_PRIVATE_FIELDS \
618 struct uv__work work_req;
620 #define UV_FS_EVENT_PRIVATE_FIELDS \
621 struct uv_fs_event_req_s { \
628 WCHAR* short_filew; \
632 #define UV_SIGNAL_PRIVATE_FIELDS \
633 RB_ENTRY(uv_signal_s) tree_entry; \
634 struct uv_req_s signal_req; \
635 unsigned long pending_signum;
651 #define UV_FS_O_APPEND _O_APPEND
652 #define UV_FS_O_CREAT _O_CREAT
653 #define UV_FS_O_EXCL _O_EXCL
654 #define UV_FS_O_RANDOM _O_RANDOM
655 #define UV_FS_O_RDONLY _O_RDONLY
656 #define UV_FS_O_RDWR _O_RDWR
657 #define UV_FS_O_SEQUENTIAL _O_SEQUENTIAL
658 #define UV_FS_O_SHORT_LIVED _O_SHORT_LIVED
659 #define UV_FS_O_TEMPORARY _O_TEMPORARY
660 #define UV_FS_O_TRUNC _O_TRUNC
661 #define UV_FS_O_WRONLY _O_WRONLY
664 #define UV_FS_O_DIRECT 0x02000000
665 #define UV_FS_O_DIRECTORY 0
666 #define UV_FS_O_DSYNC 0x04000000
667 #define UV_FS_O_EXLOCK 0x10000000
668 #define UV_FS_O_NOATIME 0
669 #define UV_FS_O_NOCTTY 0
670 #define UV_FS_O_NOFOLLOW 0
671 #define UV_FS_O_NONBLOCK 0
672 #define UV_FS_O_SYMLINK 0
673 #define UV_FS_O_SYNC 0x08000000
It should be possible to cast uv_buf_t[] to WSABUF[] see http://msdn.microsoft.com/en-us/library/ms74...
Definition: win.h:213