void vboxClipboardWriteData (VBOXCLIPBOARDCLIENTDATA *pClient, void *pv, uint32_t cb, uint32_t u32Format)
{
    LogFlow(("vboxClipboardWriteData\n"));

    /*
     * The guest returns data that was requested in the WM_RENDERFORMAT handler.
     */
    Assert(pClient->data.pv == NULL && pClient->data.cb == 0 && pClient->data.u32Format == 0);

    vboxClipboardDump(pv, cb, u32Format);

    if (cb > 0)
    {
        pClient->data.pv = RTMemAlloc (cb);

        if (pClient->data.pv)
        {
            memcpy (pClient->data.pv, pv, cb);
            pClient->data.cb = cb;
            pClient->data.u32Format = u32Format;
        }
    }

    SetEvent(pClient->pCtx->hRenderEvent);
}
Beispiel #2
0
void vboxClipboardWriteData (VBOXCLIPBOARDCLIENTDATA *pClient, void *pv, uint32_t cb, uint32_t u32Format)
{
    LogFlow(("vboxClipboardWriteData\n"));

    /*
     * The guest returns data that was requested in the WM_RENDERFORMAT handler.
     */
    Assert(pClient->data.pv == NULL && pClient->data.cb == 0 && pClient->data.u32Format == 0);

    vboxClipboardDump(pv, cb, u32Format);

    if (cb > 0)
    {
        char* pszResult = NULL;
        size_t cch;

        if(u32Format == VBOX_SHARED_CLIPBOARD_FMT_HTML && 
            !IsWindowsHTML((const char*)pv))
        {
            /* check that this is not already CF_HTML */
            int rc = ConvertMimeToCFHTML((const char*)pv, cb, &pszResult, &cch);
            if (RT_SUCCESS(rc))
            {
                if (pszResult != NULL && cch != 0)
                {
                    pClient->data.pv = pszResult;
                    pClient->data.cb = cch;
                    pClient->data.u32Format = u32Format;
                }
            }
        }
        else
        {
            pClient->data.pv = RTMemAlloc (cb);
            if (pClient->data.pv)
            {
                memcpy (pClient->data.pv, pv, cb);
                pClient->data.cb = cb;
                pClient->data.u32Format = u32Format;
            }
        }
    }

    SetEvent(pClient->pCtx->hRenderEvent);
}
static void vboxClipboardGetData (uint32_t u32Format, const void *pvSrc, uint32_t cbSrc,
                                  void *pvDst, uint32_t cbDst, uint32_t *pcbActualDst)
{
    dprintf (("vboxClipboardGetData.\n"));

    *pcbActualDst = cbSrc;

    LogFlow(("vboxClipboardGetData cbSrc = %d, cbDst = %d\n", cbSrc, cbDst));

    if (cbSrc > cbDst)
    {
        /* Do not copy data. The dst buffer is not enough. */
        return;
    }

    memcpy (pvDst, pvSrc, cbSrc);

    vboxClipboardDump(pvDst, cbSrc, u32Format);

    return;
}
Beispiel #4
0
static void vboxClipboardGetData (uint32_t u32Format, const void *pvSrc, uint32_t cbSrc,
                                  void *pvDst, uint32_t cbDst, uint32_t *pcbActualDst)
{
    dprintf (("vboxClipboardGetData.\n"));

    *pcbActualDst = cbSrc;

    LogFlow(("vboxClipboardGetData cbSrc = %d, cbDst = %d\n", cbSrc, cbDst));

    if (cbSrc > cbDst)
    {
        /* Do not copy data. The dst buffer is not enough. */
        return;
    }

    if (u32Format == VBOX_SHARED_CLIPBOARD_FMT_HTML &&
                            IsWindowsHTML((const char*)pvSrc))
    {
        char* buffer = NULL;
        size_t cbuf = 0;
        ConvertCFHtmlToMime((const char*)pvSrc, cbSrc, (char**)&buffer, &cbuf);
        if (cbuf > cbDst)
        {
            /* Do not copy data. The dst buffer is not enough. */
            return;
        }
        memcpy(pvDst, buffer, cbuf);
        *pcbActualDst = cbuf;
        RTMemFree(buffer);
    }
    else
    {
        memcpy(pvDst, pvSrc, cbSrc);
    }

    vboxClipboardDump(pvDst, cbSrc, u32Format);

    return;
}