VirtualBox

Changeset 82880 in vbox for trunk/src/VBox


Ignore:
Timestamp:
Jan 27, 2020 5:52:41 PM (5 years ago)
Author:
vboxsync
Message:

Shared Clipboard: Ditched SHCLDATABLOCK.

Location:
trunk/src/VBox
Files:
9 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Additions/WINNT/VBoxTray/VBoxClipboard.cpp

    r82870 r82880  
    362362                    if (pMem)
    363363                    {
    364                         SHCLDATABLOCK dataBlock;
    365                         RT_ZERO(dataBlock);
    366 
    367                         dataBlock.cbData  = cbPrealloc;
    368                         dataBlock.pvData  = pMem;
    369                         dataBlock.uFormat = fFormat;
    370 
    371364                        /* Read the host data to the preallocated buffer. */
    372                         int rc = VbglR3ClipboardReadDataEx(&pCtx->CmdCtx, &dataBlock, &cb);
     365                        int rc = VbglR3ClipboardReadDataEx(&pCtx->CmdCtx, fFormat, pMem, cbPrealloc, &cb);
    373366                        if (RT_SUCCESS(rc))
    374367                        {
     
    395388                                    if (pMem)
    396389                                    {
    397                                         dataBlock.cbData  = cb;
    398                                         dataBlock.pvData  = pMem;
    399 
    400390                                        /* Read the host data to the preallocated buffer. */
    401391                                        uint32_t cbNew = 0;
    402                                         rc = VbglR3ClipboardReadDataEx(&pCtx->CmdCtx, &dataBlock, &cbNew);
     392                                        rc = VbglR3ClipboardReadDataEx(&pCtx->CmdCtx, fFormat, pMem, cb, &cbNew);
    403393                                        if (   RT_SUCCESS(rc)
    404394                                            && cbNew <= cb)
     
    580570                        if (lp != NULL)
    581571                        {
    582                             SHCLDATABLOCK dataBlock;
    583                             RT_ZERO(dataBlock);
    584 
    585                             dataBlock.uFormat = fFormat;
    586                             dataBlock.pvData  = lp;
    587                             dataBlock.cbData  = (uint32_t)GlobalSize(hClip);
    588 
    589                             rc = VbglR3ClipboardWriteDataEx(&pEvent->cmdCtx, &dataBlock);
     572                            rc = VbglR3ClipboardWriteDataEx(&pEvent->cmdCtx, fFormat, lp, (uint32_t)GlobalSize(hClip));
    590573
    591574                            GlobalUnlock(hClip);
     
    605588                        if (uniString != NULL)
    606589                        {
    607                             SHCLDATABLOCK dataBlock;
    608                             RT_ZERO(dataBlock);
    609 
    610                             dataBlock.uFormat = fFormat;
    611                             dataBlock.pvData  = uniString;
    612                             dataBlock.cbData  = ((uint32_t)lstrlenW(uniString) + 1) * 2;
    613 
    614                             rc = VbglR3ClipboardWriteDataEx(&pEvent->cmdCtx, &dataBlock);
     590                            rc = VbglR3ClipboardWriteDataEx(&pEvent->cmdCtx,
     591                                                            fFormat, uniString, ((uint32_t)lstrlenW(uniString) + 1) * 2);
    615592
    616593                            GlobalUnlock(hClip);
     
    631608                        {
    632609                            LPVOID lp = GlobalLock(hClip);
    633 
    634610                            if (lp != NULL)
    635611                            {
    636                                 SHCLDATABLOCK dataBlock;
    637                                 RT_ZERO(dataBlock);
    638 
    639                                 dataBlock.uFormat = fFormat;
    640                                 dataBlock.pvData  = lp;
    641                                 dataBlock.cbData  = (uint32_t)GlobalSize(hClip);
    642 
    643                                 rc = VbglR3ClipboardWriteDataEx(&pEvent->cmdCtx, &dataBlock);
     612                                rc = VbglR3ClipboardWriteDataEx(&pEvent->cmdCtx, fFormat, lp, (uint32_t)GlobalSize(hClip));
    644613
    645614                                GlobalUnlock(hClip);
  • trunk/src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR3LibClipboard.cpp

    r82852 r82880  
    453453 *
    454454 * @returns VBox status code.
    455  * @retval  VINF_BUFFER_OVERFLOW    If there is more data available than the caller provided buffer space for.
     455 * @retval  VINF_BUFFER_OVERFLOW If there is more data available than the caller provided buffer space for.
    456456 *
    457457 * @param   pCtx                The command context returned by VbglR3ClipboardConnectEx().
    458  * @param   pData               Where to store the clipboard data read.
     458 * @param   uFormat             Clipboard format of clipboard data to be read.
     459 * @param   pvData              Buffer where to store the read data.
     460 * @param   cbData              Size (in bytes) of data buffer where to store the read data.
    459461 * @param   pcbRead             The actual size of the host clipboard data.
    460462 */
    461 VBGLR3DECL(int) VbglR3ClipboardReadDataEx(PVBGLR3SHCLCMDCTX pCtx, PSHCLDATABLOCK pData, uint32_t *pcbRead)
    462 {
    463     AssertPtrReturn(pCtx,  VERR_INVALID_POINTER);
    464     AssertPtrReturn(pData, VERR_INVALID_POINTER);
    465     return VbglR3ClipboardReadData(pCtx->idClient, pData->uFormat, pData->pvData, pData->cbData, pcbRead);
     463VBGLR3DECL(int) VbglR3ClipboardReadDataEx(PVBGLR3SHCLCMDCTX pCtx,
     464                                          SHCLFORMAT uFormat, void *pvData, uint32_t cbData, uint32_t *pcbRead)
     465{
     466    AssertPtrReturn(pCtx,   VERR_INVALID_POINTER);
     467    AssertPtrReturn(pvData, VERR_INVALID_POINTER);
     468    return VbglR3ClipboardReadData(pCtx->idClient, uFormat, pvData, cbData, pcbRead);
    466469}
    467470
     
    25432546 * @returns VBox status code.
    25442547 * @param   pCtx                The command context returned by VbglR3ClipboardConnectEx().
    2545  * @param   pData               Clipboard data to send.
    2546  */
    2547 VBGLR3DECL(int) VbglR3ClipboardWriteDataEx(PVBGLR3SHCLCMDCTX pCtx, PSHCLDATABLOCK pData)
    2548 {
    2549     AssertPtrReturn(pCtx,  VERR_INVALID_POINTER);
    2550     AssertPtrReturn(pData, VERR_INVALID_POINTER);
     2548 * @param   uFormat             Clipboard format to send.
     2549 * @param   pvData              Pointer to data to send.
     2550 * @param   cbData              Size (in bytes) of data to send.
     2551 */
     2552VBGLR3DECL(int) VbglR3ClipboardWriteDataEx(PVBGLR3SHCLCMDCTX pCtx, SHCLFORMAT uFormat, void *pvData, uint32_t cbData)
     2553{
     2554    AssertPtrReturn(pCtx,   VERR_INVALID_POINTER);
     2555    AssertPtrReturn(pvData, VERR_INVALID_POINTER);
    25512556
    25522557    int rc;
     
    25562561    if (pCtx->fUseLegacyProtocol)
    25572562    {
    2558         rc = VbglR3ClipboardWriteData(pCtx->idClient, pData->uFormat, pData->pvData, pData->cbData);
     2563        rc = VbglR3ClipboardWriteData(pCtx->idClient, uFormat, pvData, cbData);
    25592564    }
    25602565    else
     
    25682573        VBGL_HGCM_HDR_INIT(&Msg.Hdr, pCtx->idClient, VBOX_SHCL_GUEST_FN_DATA_WRITE, VBOX_SHCL_CPARMS_DATA_WRITE);
    25692574        Msg.Parms.id64Context.SetUInt64(pCtx->idContext);
    2570         Msg.Parms.f32Format.SetUInt32(pData->uFormat);
    2571         Msg.Parms.pData.SetPtr(pData->pvData, pData->cbData);
     2575        Msg.Parms.f32Format.SetUInt32(uFormat);
     2576        Msg.Parms.pData.SetPtr(pvData, cbData);
    25722577
    25732578        LogFlowFunc(("CID=%RU32\n", pCtx->idContext));
  • trunk/src/VBox/HostServices/SharedClipboard/VBoxSharedClipboardSvc-darwin.cpp

    r82846 r82880  
    212212
    213213int ShClSvcImplReadData(PSHCLCLIENT pClient, PSHCLCLIENTCMDCTX pCmdCtx,
    214                         PSHCLDATABLOCK pData, uint32_t *pcbActual)
     214                        SHCLFORMAT uFormat, uint32_t cbData, void *pvData, uint32_t *pcbActual)
    215215{
    216216    RT_NOREF(pCmdCtx);
     
    222222
    223223    int rc = readFromPasteboard(pClient->State.pCtx->pasteboard,
    224                                 pData->uFormat, pData->pvData, pData->cbData, pcbActual);
     224                                uFormat, pvData, cbData, pcbActual);
    225225
    226226    ShClSvcUnlock();
     
    230230
    231231int ShClSvcImplWriteData(PSHCLCLIENT pClient,
    232                          PSHCLCLIENTCMDCTX pCmdCtx, PSHCLDATABLOCK pData)
     232                         PSHCLCLIENTCMDCTX pCmdCtx, SHCLFORMAT uFormat, uint32_t cbData, void *pvData)
    233233{
    234234    RT_NOREF(pCmdCtx);
     
    236236    ShClSvcLock();
    237237
    238     writeToPasteboard(pClient->State.pCtx->pasteboard, pData->pvData, pData->cbData, pData->uFormat);
     238    writeToPasteboard(pClient->State.pCtx->pasteboard, pvData, cbData, uFormat);
    239239
    240240    ShClSvcUnlock();
  • trunk/src/VBox/HostServices/SharedClipboard/VBoxSharedClipboardSvc-internal.h

    r82872 r82880  
    242242 */
    243243int ShClSvcDataReadRequest(PSHCLCLIENT pClient, SHCLFORMAT fFormat, PSHCLEVENTID pidEvent);
    244 int ShClSvcDataReadSignal(PSHCLCLIENT pClient, PSHCLCLIENTCMDCTX pCmdCtx, PSHCLDATABLOCK pData);
     244int ShClSvcDataReadSignal(PSHCLCLIENT pClient, PSHCLCLIENTCMDCTX pCmdCtx, SHCLFORMAT uFormat, void *pvData, uint32_t cbData);
    245245int ShClSvcHostReportFormats(PSHCLCLIENT pClient, SHCLFORMATS fFormats);
    246246uint32_t ShClSvcGetMode(void);
     
    293293 * @param   pClient             Shared Clipboard client context.
    294294 * @param   pCmdCtx             Shared Clipboard command context.
    295  * @param   pData               Where to return the read clipboard data.
     295 * @param   uFormat             Clipboard format to read.
     296 * @param   pvData              Where to return the read clipboard data.
     297 * @param   cbData              Size (in bytes) of buffer where to return the clipboard data.
    296298 * @param   pcbActual           Where to return the amount of bytes read.
    297299 */
    298 int ShClSvcImplReadData(PSHCLCLIENT pClient, PSHCLCLIENTCMDCTX pCmdCtx, PSHCLDATABLOCK pData, uint32_t *pcbActual);
     300int ShClSvcImplReadData(PSHCLCLIENT pClient, PSHCLCLIENTCMDCTX pCmdCtx, SHCLFORMAT uFormat, void *pvData, uint32_t cbData, uint32_t *pcbActual);
    299301/**
    300302 * Called when the guest writes clipboard data to the host.
     
    303305 * @param   pClient             Shared Clipboard client context.
    304306 * @param   pCmdCtx             Shared Clipboard command context.
    305  * @param   pData               Clipboard data from the guest.
    306  */
    307 int ShClSvcImplWriteData(PSHCLCLIENT pClient, PSHCLCLIENTCMDCTX pCmdCtx, PSHCLDATABLOCK pData);
     307 * @param   uFormat             Clipboard format to write.
     308 * @param   pvData              Clipboard data to write.
     309 * @param   cbData              Size (in bytes) of buffer clipboard data to write.
     310 */
     311int ShClSvcImplWriteData(PSHCLCLIENT pClient, PSHCLCLIENTCMDCTX pCmdCtx, SHCLFORMAT uFormat, void *pvData, uint32_t cbData);
    308312/**
    309313 * Called when synchronization of the clipboard contents of the host clipboard with the guest is needed.
  • trunk/src/VBox/HostServices/SharedClipboard/VBoxSharedClipboardSvc-win.cpp

    r82851 r82880  
    729729
    730730int ShClSvcImplReadData(PSHCLCLIENT pClient, PSHCLCLIENTCMDCTX pCmdCtx,
    731                         PSHCLDATABLOCK pData, uint32_t *pcbActual)
     731                        SHCLFORMAT uFormat, uint32_t cbData, void *pvData, uint32_t *pcbActual)
    732732{
    733733    AssertPtrReturn(pClient,             VERR_INVALID_POINTER);
    734734    RT_NOREF(pCmdCtx);
     735    AssertPtrReturn(pvData,              VERR_INVALID_POINTER);
    735736    AssertPtrReturn(pClient->State.pCtx, VERR_INVALID_POINTER);
    736737
    737     LogFlowFunc(("uFormat=%02X\n", pData->uFormat));
     738    LogFlowFunc(("uFormat=%02X\n", uFormat));
    738739
    739740    HANDLE hClip = NULL;
     
    749750        LogFunc(("Clipboard opened\n"));
    750751
    751         if (pData->uFormat & VBOX_SHCL_FMT_BITMAP)
     752        if (uFormat & VBOX_SHCL_FMT_BITMAP)
    752753        {
    753754            hClip = GetClipboardData(CF_DIB);
     
    761762
    762763                    vboxClipboardSvcWinGetData(VBOX_SHCL_FMT_BITMAP, lp, GlobalSize(hClip),
    763                                                pData->pvData, pData->cbData, pcbActual);
     764                                               pvData, cbData, pcbActual);
    764765
    765766                    GlobalUnlock(hClip);
     
    771772            }
    772773        }
    773         else if (pData->uFormat & VBOX_SHCL_FMT_UNICODETEXT)
     774        else if (uFormat & VBOX_SHCL_FMT_UNICODETEXT)
    774775        {
    775776            hClip = GetClipboardData(CF_UNICODETEXT);
     
    783784
    784785                    vboxClipboardSvcWinGetData(VBOX_SHCL_FMT_UNICODETEXT, uniString, (lstrlenW(uniString) + 1) * 2,
    785                                                pData->pvData, pData->cbData, pcbActual);
     786                                               pvData, cbData, pcbActual);
    786787
    787788                    GlobalUnlock(hClip);
     
    793794            }
    794795        }
    795         else if (pData->uFormat & VBOX_SHCL_FMT_HTML)
     796        else if (uFormat & VBOX_SHCL_FMT_HTML)
    796797        {
    797798            UINT format = RegisterClipboardFormat(SHCL_WIN_REGFMT_HTML);
     
    806807                        /** @todo r=andy Add data overflow handling. */
    807808                        vboxClipboardSvcWinGetData(VBOX_SHCL_FMT_HTML, lp, GlobalSize(hClip),
    808                                                    pData->pvData, pData->cbData, pcbActual);
     809                                                   pvData, cbData, pcbActual);
    809810#ifdef VBOX_STRICT
    810811                        LogFlowFunc(("Raw HTML clipboard data from host:"));
    811                         ShClDbgDumpHtml((char *)pData->pvData, pData->cbData);
     812                        ShClDbgDumpHtml((char *)pvData, cbData);
    812813#endif
    813814                        GlobalUnlock(hClip);
     
    821822        }
    822823#ifdef VBOX_WITH_SHARED_CLIPBOARD_TRANSFERS
    823         else if (pData->uFormat & VBOX_SHCL_FMT_URI_LIST)
     824        else if (uFormat & VBOX_SHCL_FMT_URI_LIST)
    824825        {
    825826            AssertFailed(); /** @todo */
     
    832833    {
    833834        /* Reply with empty data. */
    834         vboxClipboardSvcWinGetData(0, NULL, 0, pData->pvData, pData->cbData, pcbActual);
     835        vboxClipboardSvcWinGetData(0, NULL, 0, pvData, cbData, pcbActual);
    835836    }
    836837
     
    840841
    841842int ShClSvcImplWriteData(PSHCLCLIENT pClient, PSHCLCLIENTCMDCTX pCmdCtx,
    842                          PSHCLDATABLOCK pData)
     843                         SHCLFORMAT uFormat, uint32_t cbData, void *pvData)
    843844{
    844845    LogFlowFuncEnter();
    845846
    846     int rc = ShClSvcDataReadSignal(pClient, pCmdCtx, pData);
     847    int rc = ShClSvcDataReadSignal(pClient, pCmdCtx, uFormat, cbData, pvData);
    847848
    848849    LogFlowFuncLeaveRC(rc);
  • trunk/src/VBox/HostServices/SharedClipboard/VBoxSharedClipboardSvc-x11-stubs.cpp

    r81820 r82880  
    107107 * @param pClient       Context information about the guest VM
    108108 * @param pCmdCtx       Command context to use.
    109  * @param pData         Data block to put read data into.
     109 * @param uFormat       Clipboard format to read.
     110 * @param pvData        Where to return the read clipboard data.
     111 * @param cbData        Size (in bytes) of buffer where to return the clipboard data.
    110112 * @param pcbActual     Where to store the actual amount of data available.
    111113 */
    112114int SharedClipboardSvcImplReadData(PSHCLCLIENT pClient, PSHCLCLIENTCMDCTX pCmdCtx,
    113                                    PSHCLDATABLOCK pData, uint32_t *pcbActual)
     115                                   SHCLFORMAT uFormat, void *pvData, uint32_t cbData, uint32_t *pcbActual)
    114116{
    115     RT_NOREF(pClient, pCmdCtx, pData);
     117    RT_NOREF(pClient, pCmdCtx, uFormat, pvData, cbData);
    116118
    117119    /* No data available. */
     
    122124
    123125int SharedClipboardSvcImplWriteData(PSHCLCLIENT pClient, PSHCLCLIENTCMDCTX pCmdCtx,
    124                                     PSHCLDATABLOCK pData)
     126                                    SHCLFORMAT uFormat, void *pvData, uint32_t cbData)
    125127{
    126     RT_NOREF(pClient, pCmdCtx, pData);
     128    RT_NOREF(pClient, pCmdCtx, uFormat, pvData, cbData);
    127129    return VERR_NOT_IMPLEMENTED;
    128130}
  • trunk/src/VBox/HostServices/SharedClipboard/VBoxSharedClipboardSvc-x11.cpp

    r82875 r82880  
    177177 */
    178178int ShClSvcImplReadData(PSHCLCLIENT pClient,
    179                         PSHCLCLIENTCMDCTX pCmdCtx, PSHCLDATABLOCK pData, uint32_t *pcbActual)
    180 {
     179                        PSHCLCLIENTCMDCTX pCmdCtx, SHCLFORMAT uFormat, void *pvData, uint32_t cbData, uint32_t *pcbActual)
     180{
     181    AssertPtrReturn(pClient, VERR_INVALID_POINTER);
     182    AssertPtrReturn(pCmdCtx, VERR_INVALID_POINTER);
     183    AssertPtrReturn(pvData,  VERR_INVALID_POINTER);
     184
    181185    RT_NOREF(pCmdCtx);
    182186
    183187    LogFlowFunc(("pClient=%p, uFormat=%02X, pv=%p, cb=%u, pcbActual=%p\n",
    184                  pClient, pData->uFormat, pData->pvData, pData->cbData, pcbActual));
     188                 pClient, uFormat, pvData, cbData, pcbActual));
    185189
    186190    int rc = VINF_SUCCESS;
     
    189193    if (pReq)
    190194    {
    191         pReq->pv        = pData->pvData;
    192         pReq->cb        = pData->cbData;
     195        pReq->pv        = pvData;
     196        pReq->cb        = cbData;
    193197        pReq->pcbActual = pcbActual;
    194198        const SHCLEVENTID idEvent = ShClEventIdGenerateAndRegister(&pClient->EventSrc);
     
    196200        if (idEvent != NIL_SHCLEVENTID)
    197201        {
    198             rc = ShClX11ReadDataFromX11(&pClient->State.pCtx->X11, pData->uFormat, pReq);
     202            rc = ShClX11ReadDataFromX11(&pClient->State.pCtx->X11, uFormat, pReq);
    199203            if (RT_SUCCESS(rc))
    200204            {
     
    203207                if (RT_SUCCESS(rc))
    204208                {
    205                     memcpy(pData->pvData, pPayload->pvData, RT_MIN(pData->cbData, pPayload->cbData));
    206                     pData->cbData = (uint32_t)pPayload->cbData; /** @todo r=bird: Just ditch this data block wrapper, it made you forget to set pcbActual! */
     209                    memcpy(pvData, pPayload->pvData, RT_MIN(cbData, pPayload->cbData));
     210
    207211                    *pcbActual = (uint32_t)pPayload->cbData;
    208212
     
    227231
    228232int ShClSvcImplWriteData(PSHCLCLIENT pClient,
    229                          PSHCLCLIENTCMDCTX pCmdCtx, PSHCLDATABLOCK pData)
     233                         PSHCLCLIENTCMDCTX pCmdCtx, SHCLFORMAT uFormat, void *pvData, uint32_t cbData)
    230234{
    231235    AssertPtrReturn(pClient, VERR_INVALID_POINTER);
    232236    AssertPtrReturn(pCmdCtx, VERR_INVALID_POINTER);
    233     AssertPtrReturn(pData,   VERR_INVALID_POINTER);
     237    AssertPtrReturn(pvData,  VERR_INVALID_POINTER);
    234238
    235239    LogFlowFunc(("pClient=%p, pv=%p, cb=%RU32, uFormat=%02X\n",
    236                  pClient, pData->pvData, pData->cbData, pData->uFormat));
    237 
    238     int rc = ShClSvcDataReadSignal(pClient, pCmdCtx, pData);
     240                 pClient, pvData, cbData, uFormat));
     241
     242    int rc = ShClSvcDataReadSignal(pClient, pCmdCtx, uFormat, pvData, cbData);
    239243
    240244    LogFlowFuncLeaveRC(rc);
  • trunk/src/VBox/HostServices/SharedClipboard/VBoxSharedClipboardSvc.cpp

    r82875 r82880  
    12501250
    12511251int ShClSvcDataReadSignal(PSHCLCLIENT pClient, PSHCLCLIENTCMDCTX pCmdCtx,
    1252                           PSHCLDATABLOCK pData)
     1252                          SHCLFORMAT uFormat, void *pvData, uint32_t cbData)
    12531253{
    12541254    AssertPtrReturn(pClient, VERR_INVALID_POINTER);
    12551255    AssertPtrReturn(pCmdCtx, VERR_INVALID_POINTER);
    1256     AssertPtrReturn(pData,   VERR_INVALID_POINTER);
     1256    AssertPtrReturn(pvData,  VERR_INVALID_POINTER);
     1257
     1258    RT_NOREF(uFormat);
    12571259
    12581260    LogFlowFuncEnter();
     
    12711273
    12721274    PSHCLEVENTPAYLOAD pPayload = NULL;
    1273     if (pData->cbData)
    1274         rc = ShClPayloadAlloc(idEvent, pData->pvData, pData->cbData, &pPayload);
     1275    if (cbData)
     1276        rc = ShClPayloadAlloc(idEvent, pvData, cbData, &pPayload);
    12751277
    12761278    if (RT_SUCCESS(rc))
     
    14791481    }
    14801482
    1481     SHCLDATABLOCK dataBlock;
     1483    SHCLFORMAT  uFormat = VBOX_SHCL_FMT_NONE;
     1484    uint32_t    cbData  = 0;
     1485    void       *pvData  = NULL;
     1486
    14821487    ASSERT_GUEST_RETURN(paParms[iParm].type == VBOX_HGCM_SVC_PARM_32BIT, VERR_WRONG_PARAMETER_TYPE);
    1483     dataBlock.uFormat = paParms[iParm].u.uint32;
     1488    uFormat = paParms[iParm].u.uint32;
    14841489    iParm++;
    14851490    if (cParms != VBOX_SHCL_CPARMS_DATA_READ_61B)
    14861491    {
    14871492        ASSERT_GUEST_RETURN(paParms[iParm].type == VBOX_HGCM_SVC_PARM_PTR, VERR_WRONG_PARAMETER_TYPE); /* Data buffer */
    1488         dataBlock.pvData = paParms[iParm].u.pointer.addr;
    1489         dataBlock.cbData = paParms[iParm].u.pointer.size;
     1493        pvData = paParms[iParm].u.pointer.addr;
     1494        cbData = paParms[iParm].u.pointer.size;
    14901495        iParm++;
    14911496        ASSERT_GUEST_RETURN(paParms[iParm].type == VBOX_HGCM_SVC_PARM_32BIT, VERR_WRONG_PARAMETER_TYPE); /*cbDataReturned*/
     
    14971502        iParm++;
    14981503        ASSERT_GUEST_RETURN(paParms[iParm].type == VBOX_HGCM_SVC_PARM_PTR, VERR_WRONG_PARAMETER_TYPE); /* Data buffer */
    1499         dataBlock.pvData = paParms[iParm].u.pointer.addr;
    1500         dataBlock.cbData = paParms[iParm].u.pointer.size;
     1504        pvData = paParms[iParm].u.pointer.addr;
     1505        cbData = paParms[iParm].u.pointer.size;
    15011506        iParm++;
    15021507    }
     
    15111516    {
    15121517        if (pClient->State.POD.uFormat == VBOX_SHCL_FMT_NONE)
    1513             pClient->State.POD.uFormat = dataBlock.uFormat;
     1518            pClient->State.POD.uFormat = uFormat;
    15141519    }
    15151520
     
    15261531        RT_ZERO(parms);
    15271532
    1528         parms.uFormat  = dataBlock.uFormat;
    1529         parms.u.pvData = dataBlock.pvData;
    1530         parms.cbData   = dataBlock.cbData;
     1533        parms.uFormat  = uFormat;
     1534        parms.u.pvData = pvData;
     1535        parms.cbData   = cbData;
    15311536
    15321537        g_ExtState.fReadingData = true;
     
    15351540        rc = g_ExtState.pfnExtension(g_ExtState.pvExtension, VBOX_CLIPBOARD_EXT_FN_DATA_READ, &parms, sizeof(parms));
    15361541        LogRelFlowFunc(("Shared Clipboard: DATA/Ext: fDelayedAnnouncement=%RTbool fDelayedFormats=%#x cbData=%RU32->%RU32 rc=%Rrc\n",
    1537                         g_ExtState.fDelayedAnnouncement, g_ExtState.fDelayedFormats, dataBlock.cbData, parms.cbData, rc));
     1542                        g_ExtState.fDelayedAnnouncement, g_ExtState.fDelayedFormats, cbData, parms.cbData, rc));
    15381543
    15391544        /* Did the extension send the clipboard formats yet?
     
    15551560    else
    15561561    {
    1557         rc = ShClSvcImplReadData(pClient, &cmdCtx, &dataBlock, &cbActual);
    1558         LogRelFlowFunc(("Shared Clipboard: DATA/Host: cbData=%RU32->%RU32 rc=%Rrc\n", dataBlock.cbData, cbActual, rc));
     1562        rc = ShClSvcImplReadData(pClient, &cmdCtx, uFormat, pvData, cbData, &cbActual);
     1563        LogRelFlowFunc(("Shared Clipboard: DATA/Host: cbData=%RU32->%RU32 rc=%Rrc\n", cbData, cbActual, rc));
    15591564    }
    15601565
     
    15681573
    15691574        /* If the data to return exceeds the buffer the guest supplies, tell it (and let it try again). */
    1570         if (cbActual >= dataBlock.cbData)
     1575        if (cbActual >= cbData)
    15711576            rc = VINF_BUFFER_OVERFLOW;
    15721577    }
     
    16261631        iParm++;
    16271632    }
    1628     SHCLDATABLOCK dataBlock;
     1633
     1634    SHCLFORMAT  uFormat = VBOX_SHCL_FMT_NONE;
     1635    uint32_t    cbData  = 0;
     1636    void       *pvData  = NULL;
     1637
    16291638    ASSERT_GUEST_RETURN(paParms[iParm].type == VBOX_HGCM_SVC_PARM_32BIT, VERR_WRONG_PARAMETER_TYPE); /* Format bit. */
    1630     dataBlock.uFormat = paParms[iParm].u.uint32;
     1639    uFormat = paParms[iParm].u.uint32;
    16311640    iParm++;
    16321641    if (cParms == VBOX_SHCL_CPARMS_DATA_WRITE_61B)
     
    16361645    }
    16371646    ASSERT_GUEST_RETURN(paParms[iParm].type == VBOX_HGCM_SVC_PARM_PTR, VERR_WRONG_PARAMETER_TYPE); /* Data buffer */
    1638     dataBlock.pvData = paParms[iParm].u.pointer.addr;
    1639     dataBlock.cbData = paParms[iParm].u.pointer.size;
     1647    pvData = paParms[iParm].u.pointer.addr;
     1648    cbData = paParms[iParm].u.pointer.size;
    16401649    iParm++;
    16411650    Assert(iParm == cParms);
     
    16491658    {
    16501659        if (pClient->State.POD.uFormat == VBOX_SHCL_FMT_NONE)
    1651             pClient->State.POD.uFormat = dataBlock.uFormat;
     1660            pClient->State.POD.uFormat = uFormat;
    16521661    }
    16531662
     
    16601669        SHCLEXTPARMS parms;
    16611670        RT_ZERO(parms);
    1662         parms.uFormat   = dataBlock.uFormat;
    1663         parms.u.pvData  = dataBlock.pvData;
    1664         parms.cbData    = dataBlock.cbData;
     1671        parms.uFormat   = uFormat;
     1672        parms.u.pvData  = pvData;
     1673        parms.cbData    = cbData;
    16651674
    16661675        g_ExtState.pfnExtension(g_ExtState.pvExtension, VBOX_CLIPBOARD_EXT_FN_DATA_WRITE, &parms, sizeof(parms));
     
    16681677    }
    16691678    else
    1670         rc = ShClSvcImplWriteData(pClient, &cmdCtx, &dataBlock);
     1679        rc = ShClSvcImplWriteData(pClient, &cmdCtx, uFormat, pvData, cbData);
    16711680
    16721681    LogFlowFuncLeaveRC(rc);
  • trunk/src/VBox/HostServices/SharedClipboard/testcase/tstClipboardServiceHost.cpp

    r82846 r82880  
    307307int ShClSvcImplConnect(PSHCLCLIENT, bool) { return VINF_SUCCESS; }
    308308int ShClSvcImplFormatAnnounce(PSHCLCLIENT, PSHCLCLIENTCMDCTX, PSHCLFORMATDATA) { AssertFailed(); return VINF_SUCCESS; }
    309 int ShClSvcImplReadData(PSHCLCLIENT, PSHCLCLIENTCMDCTX, PSHCLDATABLOCK, unsigned int *) { AssertFailed(); return VERR_WRONG_ORDER; }
    310 int ShClSvcImplWriteData(PSHCLCLIENT, PSHCLCLIENTCMDCTX, PSHCLDATABLOCK) { AssertFailed(); return VINF_SUCCESS; }
     309int ShClSvcImplReadData(PSHCLCLIENT, PSHCLCLIENTCMDCTX, SHCLFORMAT uFormat, uint32_t cbData, void *pvData, unsigned int *) { AssertFailed(); return VERR_WRONG_ORDER; }
     310int ShClSvcImplWriteData(PSHCLCLIENT, PSHCLCLIENTCMDCTX, SHCLFORMAT uFormat, uint32_t cbData, void *pvData) { AssertFailed(); return VINF_SUCCESS; }
    311311int ShClSvcImplSync(PSHCLCLIENT) { return VINF_SUCCESS; }
    312312
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette