static int monitorWindowsPipeConnect (NamedPipeObject *obj) { if (ResetEvent(obj->windows.connect.event)) { ZeroMemory(&obj->windows.connect.overlapped, sizeof(obj->windows.connect.overlapped)); obj->windows.connect.overlapped.hEvent = obj->windows.connect.event; if (ConnectNamedPipe(obj->input.descriptor, &obj->windows.connect.overlapped)) { if (doWindowsPipeConnected(obj)) { return 1; } } else { DWORD error = GetLastError(); if (error == ERROR_PIPE_CONNECTED) { if (doWindowsPipeConnected(obj)) { return 1; } } else if (error == ERROR_IO_PENDING) { if (asyncMonitorFileInput(&obj->windows.connect.monitor, obj->windows.connect.event, handleWindowsPipeConnected, obj)) { return 1; } } else { logWindowsError(error, "ConnectNamedPipe"); } } } else { logWindowsSystemError("ResetEvent"); } return 0; }
static void bthSetErrno (DWORD error, const char *action, const DWORD *exceptions) { if (exceptions) { const DWORD *exception = exceptions; while (*exception != NO_ERROR) { if (error == *exception) goto isException; exception += 1; } } logWindowsError(error, action); isException: setErrno(error); }