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