VirtualBox

儲存庫 vbox 的更動 18408


忽略:
時間撮記:
2009-3-27 下午03:47:47 (16 年 以前)
作者:
vboxsync
訊息:

HostServices/SharedClipboard: remove references to the host-specific structure in which clipboard data is passed from the X11-specific code

檔案:
修改 1 筆資料

圖例:

未更動
新增
刪除
  • trunk/src/VBox/HostServices/SharedClipboard/x11-clipboard.cpp

    r18398 r18408  
    179179static bool g_fHaveX11;
    180180
    181 /**
    182  * Reset the contents of the buffer used to pass clipboard data from VBox to X11.
    183  * This must be done after every clipboard transfer.
    184  */
    185 static void vboxClipboardEmptyGuestBuffer(void)
    186 {
    187     if (g_ctx.pClient->data.pv != 0)
    188         RTMemFree(g_ctx.pClient->data.pv);
    189     g_ctx.pClient->data.pv = 0;
    190     g_ctx.pClient->data.cb = 0;
    191     g_ctx.pClient->data.u32Format = 0;
    192 }
    193181
    194182/**
     
    197185 * @param  pCtx      Pointer to the host clipboard structure
    198186 * @param  u32Format The format in which the data should be transfered
    199  * @thread clipboard X11 event thread
    200  * @note   called by vboxClipboardConvert*
    201  */
    202 static int vboxClipboardReadDataFromVBox (VBOXCLIPBOARDCONTEXT *pCtx, uint32_t u32Format)
     187 * @param  ppv       On success and if pcb > 0, this will point to a buffer
     188 *                   to be freed with RTMemFree containing the data read.
     189 * @param  pcb       On success, this contains the number of bytes of data
     190 *                   returned
     191 */
     192static int vboxClipboardReadDataFromVBox (VBOXCLIPBOARDCONTEXT *pCtx, uint32_t u32Format, void **ppv, uint32_t *pcb)
    203193{
    204194    volatile VBOXCLIPBOARDCLIENTDATA *pClient = pCtx->pClient;
     
    248238        /* I believe this should not happen.  Wait until the assertions arrive
    249239         * to prove the contrary. */
    250         vboxClipboardEmptyGuestBuffer();
     240        RTMemFree(pClient->data.pv);
     241        g_ctx.pClient->data.pv = 0;
     242        g_ctx.pClient->data.cb = 0;
     243        g_ctx.pClient->data.u32Format = 0;
    251244        pCtx->guestFormats = 0;
    252245        return rc;
     
    255248        return VERR_TIMEOUT;
    256249    LogFlowFunc(("wait completed.  Returning.\n"));
     250    *ppv = pClient->data.pv;
     251    *pcb = pClient->data.cb;
     252    g_ctx.pClient->data.pv = 0;
     253    g_ctx.pClient->data.cb = 0;
     254    g_ctx.pClient->data.u32Format = 0;
    257255    return VINF_SUCCESS;
    258256}
     
    10561054
    10571055/**
    1058  * Satisfy a request from the host to convert the clipboard text to Utf16.  We return non-zero
     1056 * Satisfy a request from VBox to convert the clipboard text to Utf16.  We return non-zero
    10591057 * terminated text.
    10601058 *
     
    10711069{
    10721070    PRTUTF16 pu16SrcText, pu16DestText;
     1071    void *pvVBox;
     1072    uint32_t cbVBox;
    10731073    size_t cwSrcLen, cwDestLen;
    10741074    int rc;
    10751075
    10761076    LogFlowFunc (("called\n"));
    1077     rc = vboxClipboardReadDataFromVBox(&g_ctx, VBOX_SHARED_CLIPBOARD_FMT_UNICODETEXT);
    1078     if ((RT_FAILURE(rc)) || (g_ctx.pClient->data.cb == 0))
     1077    rc = vboxClipboardReadDataFromVBox(&g_ctx, VBOX_SHARED_CLIPBOARD_FMT_UNICODETEXT, &pvVBox, &cbVBox);
     1078    if ((RT_FAILURE(rc)) || (cbVBox == 0))
    10791079    {
    10801080        /* If vboxClipboardReadDataFromVBox fails then pClient may be invalid */
    10811081        LogRelFunc (("vboxClipboardReadDataFromVBox returned %Rrc%s\n", rc,
    1082                     RT_SUCCESS(rc) ? ", g_ctx.pClient->data.cb == 0" :  ""));
    1083         vboxClipboardEmptyGuestBuffer();
    1084         return false;
    1085     }
    1086     pu16SrcText = reinterpret_cast<PRTUTF16>(g_ctx.pClient->data.pv);
    1087     cwSrcLen = g_ctx.pClient->data.cb / 2;
     1082                    RT_SUCCESS(rc) ? ", cbVBox == 0" :  ""));
     1083        RTMemFree(pvVBox);
     1084        return false;
     1085    }
     1086    pu16SrcText = reinterpret_cast<PRTUTF16>(pvVBox);
     1087    cwSrcLen = cbVBox / 2;
    10881088    /* How long will the converted text be? */
    10891089    rc = vboxClipboardUtf16GetLinSize(pu16SrcText, cwSrcLen, &cwDestLen);
     
    10911091    {
    10921092        LogRel(("vboxClipboardConvertUtf16: clipboard conversion failed.  vboxClipboardUtf16GetLinSize returned %Rrc.  Abandoning.\n", rc));
    1093         vboxClipboardEmptyGuestBuffer();
     1093        RTMemFree(pvVBox);
    10941094        AssertRCReturn(rc, false);
    10951095    }
     
    10971097    {
    10981098        LogFlowFunc(("received empty clipboard data from the guest, returning false.\n"));
    1099         vboxClipboardEmptyGuestBuffer();
     1099        RTMemFree(pvVBox);
    11001100        return false;
    11011101    }
     
    11041104    {
    11051105        LogRel(("vboxClipboardConvertUtf16: failed to allocate %d bytes\n", cwDestLen * 2));
    1106         vboxClipboardEmptyGuestBuffer();
     1106        RTMemFree(pvVBox);
    11071107        return false;
    11081108    }
     
    11131113        LogRel(("vboxClipboardConvertUtf16: clipboard conversion failed.  vboxClipboardUtf16WinToLin returned %Rrc.  Abandoning.\n", rc));
    11141114        XtFree(reinterpret_cast<char *>(pu16DestText));
    1115         vboxClipboardEmptyGuestBuffer();
     1115        RTMemFree(pvVBox);
    11161116        return false;
    11171117    }
    11181118    LogFlowFunc (("converted string is %.*ls. Returning.\n", cwDestLen, pu16DestText));
    1119     vboxClipboardEmptyGuestBuffer();
     1119    RTMemFree(pvVBox);
    11201120    *atomTypeReturn = g_ctx.atomUtf16;
    11211121    *pValReturn = reinterpret_cast<XtPointer>(pu16DestText);
     
    11451145    PRTUTF16 pu16SrcText, pu16DestText;
    11461146    char *pu8DestText;
     1147    void *pvVBox;
     1148    uint32_t cbVBox;
    11471149    size_t cwSrcLen, cwDestLen, cbDestLen;
    11481150    int rc;
     
    11501152    LogFlowFunc (("called\n"));
    11511153    /* Read the clipboard data from the guest. */
    1152     rc = vboxClipboardReadDataFromVBox(&g_ctx, VBOX_SHARED_CLIPBOARD_FMT_UNICODETEXT);
    1153     if ((rc != VINF_SUCCESS) || (g_ctx.pClient->data.cb == 0))
     1154    rc = vboxClipboardReadDataFromVBox(&g_ctx, VBOX_SHARED_CLIPBOARD_FMT_UNICODETEXT, &pvVBox, &cbVBox);
     1155    if ((rc != VINF_SUCCESS) || (cbVBox == 0))
    11541156    {
    11551157        /* If vboxClipboardReadDataFromVBox fails then pClient may be invalid */
    11561158        LogRelFunc (("vboxClipboardReadDataFromVBox returned %Rrc%s\n", rc,
    1157                      RT_SUCCESS(rc) ? ", g_ctx.pClient->data.cb == 0" :  ""));
    1158         vboxClipboardEmptyGuestBuffer();
    1159         return false;
    1160     }
    1161     pu16SrcText = reinterpret_cast<PRTUTF16>(g_ctx.pClient->data.pv);
    1162     cwSrcLen = g_ctx.pClient->data.cb / 2;
     1159                     RT_SUCCESS(rc) ? ", cbVBox == 0" :  ""));
     1160        RTMemFree(pvVBox);
     1161        return false;
     1162    }
     1163    pu16SrcText = reinterpret_cast<PRTUTF16>(pvVBox);
     1164    cwSrcLen = cbVBox / 2;
    11631165    /* How long will the converted text be? */
    11641166    rc = vboxClipboardUtf16GetLinSize(pu16SrcText, cwSrcLen, &cwDestLen);
     
    11661168    {
    11671169        LogRelFunc (("clipboard conversion failed.  vboxClipboardUtf16GetLinSize returned %Rrc.  Abandoning.\n", rc));
    1168         vboxClipboardEmptyGuestBuffer();
     1170        RTMemFree(pvVBox);
    11691171        AssertRCReturn(rc, false);
    11701172    }
     
    11721174    {
    11731175        LogFlowFunc(("received empty clipboard data from the guest, returning false.\n"));
    1174         vboxClipboardEmptyGuestBuffer();
     1176        RTMemFree(pvVBox);
    11751177        return false;
    11761178    }
     
    11791181    {
    11801182        LogRelFunc (("failed to allocate %d bytes\n", cwDestLen * 2));
    1181         vboxClipboardEmptyGuestBuffer();
     1183        RTMemFree(pvVBox);
    11821184        return false;
    11831185    }
     
    11881190        LogRelFunc (("clipboard conversion failed.  vboxClipboardUtf16WinToLin() returned %Rrc.  Abandoning.\n", rc));
    11891191        RTMemFree(reinterpret_cast<void *>(pu16DestText));
    1190         vboxClipboardEmptyGuestBuffer();
     1192        RTMemFree(pvVBox);
    11911193        return false;
    11921194    }
     
    11981200        LogRelFunc (("failed to allocate %d bytes\n", cwDestLen * 4));
    11991201        RTMemFree(reinterpret_cast<void *>(pu16DestText));
    1200         vboxClipboardEmptyGuestBuffer();
     1202        RTMemFree(pvVBox);
    12011203        return false;
    12021204    }
     
    12091211        LogRelFunc (("clipboard conversion failed.  RTUtf16ToUtf8Ex() returned %Rrc.  Abandoning.\n", rc));
    12101212        XtFree(pu8DestText);
    1211         vboxClipboardEmptyGuestBuffer();
     1213        RTMemFree(pvVBox);
    12121214        return false;
    12131215    }
    12141216    LogFlowFunc (("converted string is %.*s. Returning.\n", cbDestLen, pu8DestText));
    1215     vboxClipboardEmptyGuestBuffer();
     1217    RTMemFree(pvVBox);
    12161218    *atomTypeReturn = g_ctx.atomUtf8;
    12171219    *pValReturn = reinterpret_cast<XtPointer>(pu8DestText);
     
    12401242{
    12411243    PRTUTF16 pu16SrcText, pu16DestText;
     1244    void *pvVBox;
     1245    uint32_t cbVBox;
    12421246    char *pu8DestText = 0;
    12431247    size_t cwSrcLen, cwDestLen, cbDestLen;
     
    12471251    LogFlowFunc (("called\n"));
    12481252    /* Read the clipboard data from the guest. */
    1249     rc = vboxClipboardReadDataFromVBox(&g_ctx, VBOX_SHARED_CLIPBOARD_FMT_UNICODETEXT);
    1250     if ((rc != VINF_SUCCESS) || (g_ctx.pClient->data.cb == 0))
     1253    rc = vboxClipboardReadDataFromVBox(&g_ctx, VBOX_SHARED_CLIPBOARD_FMT_UNICODETEXT, &pvVBox, &cbVBox);
     1254    if ((rc != VINF_SUCCESS) || (cbVBox == 0))
    12511255    {
    12521256        /* If vboxClipboardReadDataFromVBox fails then pClient may be invalid */
    12531257        LogRelFunc (("vboxClipboardReadDataFromVBox returned %Rrc%s\n", rc,
    1254                       RT_SUCCESS(rc) ? ", g_ctx.pClient->data.cb == 0" :  ""));
    1255         vboxClipboardEmptyGuestBuffer();
    1256         return false;
    1257     }
    1258     pu16SrcText = reinterpret_cast<PRTUTF16>(g_ctx.pClient->data.pv);
    1259     cwSrcLen = g_ctx.pClient->data.cb / 2;
     1258                      RT_SUCCESS(rc) ? ", cbVBox == 0" :  ""));
     1259        RTMemFree(pvVBox);
     1260        return false;
     1261    }
     1262    pu16SrcText = reinterpret_cast<PRTUTF16>(pvVBox);
     1263    cwSrcLen = cbVBox / 2;
    12601264    /* How long will the converted text be? */
    12611265    rc = vboxClipboardUtf16GetLinSize(pu16SrcText, cwSrcLen, &cwDestLen);
     
    12631267    {
    12641268        LogRelFunc (("clipboard conversion failed.  vboxClipboardUtf16GetLinSize returned %Rrc.  Abandoning.\n", rc));
    1265         vboxClipboardEmptyGuestBuffer();
     1269        RTMemFree(pvVBox);
    12661270        AssertRCReturn(rc, false);
    12671271    }
     
    12691273    {
    12701274        LogFlowFunc(("received empty clipboard data from the guest, returning false.\n"));
    1271         vboxClipboardEmptyGuestBuffer();
     1275        RTMemFree(pvVBox);
    12721276        return false;
    12731277    }
     
    12761280    {
    12771281        LogRelFunc (("failed to allocate %d bytes\n", cwDestLen * 2));
    1278         vboxClipboardEmptyGuestBuffer();
     1282        RTMemFree(pvVBox);
    12791283        return false;
    12801284    }
     
    12851289        LogRelFunc (("clipboard conversion failed.  vboxClipboardUtf16WinToLin() returned %Rrc.  Abandoning.\n", rc));
    12861290        RTMemFree(reinterpret_cast<void *>(pu16DestText));
    1287         vboxClipboardEmptyGuestBuffer();
     1291        RTMemFree(pvVBox);
    12881292        return false;
    12891293    }
     
    12941298    {
    12951299        LogRelFunc (("clipboard conversion failed.  RTUtf16ToUtf8Ex() returned %Rrc.  Abandoning.\n", rc));
    1296         vboxClipboardEmptyGuestBuffer();
     1300        RTMemFree(pvVBox);
    12971301        return false;
    12981302    }
     
    13251329        LogRelFunc (("Xutf8TextListToTextProperty failed.  Reason: %s\n",
    13261330                pcReason));
    1327         vboxClipboardEmptyGuestBuffer();
     1331        RTMemFree(pvVBox);
    13281332        return false;
    13291333    }
    13301334    LogFlowFunc (("converted string is %s. Returning.\n", property.value));
    1331     vboxClipboardEmptyGuestBuffer();
     1335    RTMemFree(pvVBox);
    13321336    *atomTypeReturn = property.encoding;
    13331337    *pValReturn = reinterpret_cast<XtPointer>(property.value);
注意: 瀏覽 TracChangeset 來幫助您使用更動檢視器

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