コード例 #1
0
static int send_command_to_daemon(qdb_handle_t h, struct qdb_hdr *hdr, void *data) {
    /* if commands needs additional data, the last parameter must not be NULL
     */
    assert(data || hdr->data_len == 0);
    /* This function writes at most QDB_MAX_DATA bytes (3k) at once,
     * which is atomic on Linux */

    if (!QioWriteBuffer(h->write_pipe, hdr, sizeof(*hdr))) {
        /* some fatal error on previous command (and daemon closed connection)
         * perhaps? or daemon has restarted */
        if (GetLastError() == ERROR_BROKEN_PIPE) {
            /* try to reconnect */
            CloseHandle(h->read_pipe);
            CloseHandle(h->write_pipe);
            if (!connect_to_daemon(h))
            /* FIXME: register watches again */
                /* reconnect failed */
                return 0;
            else {
                /* try again */
                if (!QioWriteBuffer(h->write_pipe, hdr, sizeof(*hdr))) {
                    perror("write to daemon");
                    return 0;
                }
                else
                    return 1;
            }
        } else {
            /* other write error */
            perror("write to daemon");
            return 0;
        }
    }
    if (data && !QioWriteBuffer(h->write_pipe, data, hdr->data_len)) {
        /* no recovery after header send, daemon most likely closed connection
         * in reaction to our data */
        perror("write to daemon");
        return 0;
    }
    return 1;
}
コード例 #2
0
BOOL WriteClipboardText(IN HWND window, OUT HANDLE outputFile)
{
    HANDLE clipData;
    WCHAR *clipText;
    UCHAR *clipTextUtf8;
    size_t cbTextUtf8;

    if (!IsClipboardFormatAvailable(CLIPBOARD_FORMAT))
        return FALSE;

    if (!OpenClipboard(window))
    {
        perror("OpenClipboard");
        return FALSE;
    }

    clipData = GetClipboardData(CLIPBOARD_FORMAT);
    if (!clipData)
    {
        perror("GetClipboardData");
        CloseClipboard();
        return FALSE;
    }

    clipText = GlobalLock(clipData);
    if (!clipText)
    {
        perror("GlobalLock");
        CloseClipboard();
        return FALSE;
    }

    if (FAILED(ConvertUTF16ToUTF8(clipText, &clipTextUtf8, &cbTextUtf8)))
    {
        perror("ConvertUTF16ToUTF8");
        GlobalUnlock(clipData);
        CloseClipboard();
        return FALSE;
    }

    if (!QioWriteBuffer(outputFile, clipTextUtf8, (DWORD)cbTextUtf8))
    {
        perror("QioWriteBuffer");
        GlobalUnlock(clipData);
        CloseClipboard();
        return FALSE;
    }

    GlobalUnlock(clipData);
    CloseClipboard();
    return TRUE;
}