VirtualBox

Changeset 50228 in vbox for trunk/src/VBox/Devices/USB/win


Ignore:
Timestamp:
Jan 24, 2014 9:16:37 PM (11 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
91829
Message:

USB/Proxy: Start a source code cleanup, remove unused struct members and make the generic proxy code do the backend specific memory allocation (fixes a small memory leak in the VRDP backend when closing a proxy device)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Devices/USB/win/USBProxyDevice-win.cpp

    r49814 r50228  
    99
    1010/*
    11  * Copyright (C) 2006-2011 Oracle Corporation
     11 * Copyright (C) 2006-2014 Oracle Corporation
    1212 *
    1313 * This file is part of VirtualBox Open Source Edition (OSE), as
     
    9090 * @returns VBox status code.
    9191 */
    92 static int usbProxyWinOpen(PUSBPROXYDEV pProxyDev, const char *pszAddress, void *pvBackend)
    93 {
    94     /* Here you just need to use pProxyDev->priv to store whatever per-device
    95      * data is needed
    96      */
    97     /*
    98      * Allocate private device instance data and use USBPROXYDEV::Backend::pv to point to it.
    99      */
    100     PPRIV_USBW32 pPriv = (PPRIV_USBW32)RTMemAllocZ(sizeof(PRIV_USBW32));
    101     if (!pPriv)
    102         return VERR_NO_MEMORY;
    103     pProxyDev->Backend.pv = pPriv;
     92static DECLCALLBACK(int) usbProxyWinOpen(PUSBPROXYDEV pProxyDev, const char *pszAddress, void *pvBackend)
     93{
     94    PPRIV_USBW32 pPriv = USBPROXYDEV_2_DATA(pProxyDev, PPRIV_USBW32);
    10495
    10596    int rc = VINF_SUCCESS;
     
    192183    RTMemFree(pPriv->paQueuedUrbs);
    193184    RTMemFree(pPriv->paHandles);
    194     RTMemFree(pPriv);
    195     pProxyDev->Backend.pv = NULL;
    196185    return rc;
    197186}
     
    200189 * Copy the device and free resources associated with the backend.
    201190 */
    202 static void usbProxyWinClose(PUSBPROXYDEV pProxyDev)
     191static DECLCALLBACK(void) usbProxyWinClose(PUSBPROXYDEV pProxyDev)
    203192{
    204193    /* Here we just close the device and free up p->priv
     
    206195     * that will have been done already
    207196     */
    208     PPRIV_USBW32 pPriv = (PPRIV_USBW32)pProxyDev->Backend.pv;
     197    PPRIV_USBW32 pPriv = USBPROXYDEV_2_DATA(pProxyDev, PPRIV_USBW32);
    209198    Assert(pPriv);
    210199    if (!pPriv)
     
    233222    RTMemFree(pPriv->paQueuedUrbs);
    234223    RTMemFree(pPriv->paHandles);
    235     RTMemFree(pPriv);
    236     pProxyDev->Backend.pv = NULL;
    237 }
    238 
    239 
    240 static int usbProxyWinReset(PUSBPROXYDEV pProxyDev, bool fResetOnLinux)
    241 {
    242     PPRIV_USBW32 pPriv = (PPRIV_USBW32)pProxyDev->Backend.pv;
     224}
     225
     226
     227static DECLCALLBACK(int) usbProxyWinReset(PUSBPROXYDEV pProxyDev, bool fResetOnLinux)
     228{
     229    PPRIV_USBW32 pPriv = USBPROXYDEV_2_DATA(pProxyDev, PPRIV_USBW32);
    243230    DWORD cbReturned;
    244231    int  rc;
     
    271258}
    272259
    273 static int usbProxyWinSetConfig(PUSBPROXYDEV pProxyDev, int cfg)
     260static DECLCALLBACK(int) usbProxyWinSetConfig(PUSBPROXYDEV pProxyDev, int cfg)
    274261{
    275262    /* Send a SET_CONFIGURATION command to the device. We don't do this
     
    280267     * point but it has to be synchronous.
    281268    */
    282     PPRIV_USBW32 pPriv = (PPRIV_USBW32)pProxyDev->Backend.pv;
     269    PPRIV_USBW32 pPriv = USBPROXYDEV_2_DATA(pProxyDev, PPRIV_USBW32);
    283270    USBSUP_SET_CONFIG in;
    284271    DWORD cbReturned;
     
    306293}
    307294
    308 static int usbProxyWinClaimInterface(PUSBPROXYDEV p, int ifnum)
     295static DECLCALLBACK(int) usbProxyWinClaimInterface(PUSBPROXYDEV p, int ifnum)
    309296{
    310297    /* Called just before we use an interface. Needed on Linux to claim
     
    313300     * Not relevant for Windows.
    314301     */
    315     PPRIV_USBW32 pPriv = (PPRIV_USBW32)p->Backend.pv;
     302    PPRIV_USBW32 pPriv = USBPROXYDEV_2_DATA(pProxyDev, PPRIV_USBW32);
    316303
    317304    pPriv->bInterfaceNumber = ifnum;
     
    321308}
    322309
    323 static int usbProxyWinReleaseInterface(PUSBPROXYDEV p, int ifnum)
     310static DECLCALLBACK(int) usbProxyWinReleaseInterface(PUSBPROXYDEV p, int ifnum)
    324311{
    325312    /* The opposite of claim_interface. */
    326     PPRIV_USBW32 pPriv = (PPRIV_USBW32)p->Backend.pv;
     313    PPRIV_USBW32 pPriv = USBPROXYDEV_2_DATA(pProxyDev, PPRIV_USBW32);
    327314
    328315    Assert(pPriv);
     
    330317}
    331318
    332 static int usbProxyWinSetInterface(PUSBPROXYDEV pProxyDev, int ifnum, int setting)
     319static DECLCALLBACK(int) usbProxyWinSetInterface(PUSBPROXYDEV pProxyDev, int ifnum, int setting)
    333320{
    334321    /* Select an alternate setting for an interface, the same applies
     
    336323     * message if you want but it must be synchronous
    337324     */
    338     PPRIV_USBW32 pPriv = (PPRIV_USBW32)pProxyDev->Backend.pv;
     325    PPRIV_USBW32 pPriv = USBPROXYDEV_2_DATA(pProxyDev, PPRIV_USBW32);
    339326    USBSUP_SELECT_INTERFACE in;
    340327    DWORD cbReturned;
     
    365352 * Clears the halted endpoint 'ep'.
    366353 */
    367 static bool usbProxyWinClearHaltedEndPt(PUSBPROXYDEV pProxyDev, unsigned int ep)
    368 {
    369     PPRIV_USBW32 pPriv = (PPRIV_USBW32)pProxyDev->Backend.pv;
     354static DECLCALLBACK(bool) usbProxyWinClearHaltedEndPt(PUSBPROXYDEV pProxyDev, unsigned int ep)
     355{
     356    PPRIV_USBW32 pPriv = USBPROXYDEV_2_DATA(pProxyDev, PPRIV_USBW32);
    370357    USBSUP_CLEAR_ENDPOINT in;
    371358    DWORD cbReturned;
     
    396383static int usbProxyWinAbortEndPt(PUSBPROXYDEV pProxyDev, unsigned int ep)
    397384{
    398     PPRIV_USBW32 pPriv = (PPRIV_USBW32)pProxyDev->Backend.pv;
     385    PPRIV_USBW32 pPriv = USBPROXYDEV_2_DATA(pProxyDev, PPRIV_USBW32);
    399386    USBSUP_CLEAR_ENDPOINT in;
    400387    DWORD cbReturned;
     
    425412 * @copydoc USBPROXYBACK::pfnUrbQueue
    426413 */
    427 static int usbProxyWinUrbQueue(PVUSBURB pUrb)
     414static DECLCALLBACK(int) usbProxyWinUrbQueue(PVUSBURB pUrb)
    428415{
    429416    PUSBPROXYDEV    pProxyDev = PDMINS_2_DATA(pUrb->pUsbIns, PUSBPROXYDEV);
    430     PPRIV_USBW32    pPriv = (PPRIV_USBW32)pProxyDev->Backend.pv;
     417    PPRIV_USBW32 pPriv = USBPROXYDEV_2_DATA(pProxyDev, PPRIV_USBW32);
    431418    Assert(pPriv);
    432419
     
    571558 *                      wait at all.
    572559 */
    573 static PVUSBURB usbProxyWinUrbReap(PUSBPROXYDEV pProxyDev, RTMSINTERVAL cMillies)
    574 {
    575     PPRIV_USBW32      pPriv = (PPRIV_USBW32)pProxyDev->Backend.pv;
     560static DECLCALLBACK(PVUSBURB) usbProxyWinUrbReap(PUSBPROXYDEV pProxyDev, RTMSINTERVAL cMillies)
     561{
     562    PPRIV_USBW32 pPriv = USBPROXYDEV_2_DATA(pProxyDev, PPRIV_USBW32);
    576563    AssertReturn(pPriv, NULL);
    577564
     
    732719 *          exactly what the guest wants to do.
    733720 */
    734 static void usbProxyWinUrbCancel(PVUSBURB pUrb)
     721static DECLCALLBACK(void) usbProxyWinUrbCancel(PVUSBURB pUrb)
    735722{
    736723    PUSBPROXYDEV      pProxyDev = PDMINS_2_DATA(pUrb->pUsbIns, PUSBPROXYDEV);
    737     PPRIV_USBW32      pPriv     = (PPRIV_USBW32)pProxyDev->Backend.pv;
     724    PPRIV_USBW32      pPriv = USBPROXYDEV_2_DATA(pProxyDev, PPRIV_USBW32);
    738725    PQUEUED_URB       pQUrbWin  = (PQUEUED_URB)pUrb->Dev.pvPrivate;
    739726    int                     rc;
     
    760747}
    761748
    762 static int usbProxyWinWakeup(PUSBPROXYDEV pProxyDev)
    763 {
    764     PPRIV_USBW32 pPriv = (PPRIV_USBW32)pProxyDev->Backend.pv;
     749static DECLCALLBACK(int) usbProxyWinWakeup(PUSBPROXYDEV pProxyDev)
     750{
     751    PPRIV_USBW32 pPriv = USBPROXYDEV_2_DATA(pProxyDev, PPRIV_USBW32);
    765752
    766753    SetEvent(pPriv->hEventWakeup);
     
    773760extern const USBPROXYBACK g_USBProxyDeviceHost =
    774761{
     762    /* pszName */
    775763    "host",
     764    /* cbBackend */
     765    sizeof(PRIV_USBW32),
    776766    usbProxyWinOpen,
    777767    NULL,
Note: See TracChangeset for help on using the changeset viewer.

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