[libvirt] [PATCH 1/1] Changes in version detection and moving a global variable in the global struct

Daniel P. Berrange berrange at redhat.com
Thu Apr 30 11:16:38 UTC 2009


On Wed, Apr 29, 2009 at 01:14:05PM +0200, Pritesh Kothari wrote:
> Hi All,
> 
> PATCH 1/1: contains changes in version detection and moving a global variable 
> in the global struct, so that no more global vairables exists.

ACK, this is a good idea.

Daniel

> commit 4a76967975b311151454af60d03c1e84ad0f6a11
> Author: Pritesh Kothari <Pritesh.Kothari at Sun.com>
> Date:   Wed Apr 29 11:16:59 2009 +0200
> 
>     making version detection more robust, and shifting one more global variable in the global struct
> 
> diff --git a/src/vbox/vbox_driver.c b/src/vbox/vbox_driver.c
> index a2721a3..1d2d3ed 100644
> --- a/src/vbox/vbox_driver.c
> +++ b/src/vbox/vbox_driver.c
> @@ -41,63 +41,42 @@
>  extern virDriver vbox22Driver;
>  extern virDriver vbox25Driver;
>  
> -int errorval = 0;
>  
>  int vboxRegister(void) {
> -    virDriver *driver;
> -    uint32_t uVersion = 0;
> -    uint32_t major    = 0;
> -    uint32_t minor    = 0;
> -    uint32_t intVer   = 0;
> -    uint32_t build    = 0;
> +    virDriverPtr        driver;
> +    uint32_t            uVersion;
>  
> -    if (VBoxCGlueInit() != 0)
> -        errorval = -1;
> -
> -    if (errorval != -1) {
> +    /* vboxRegister() shouldn't fail as that will render libvirt unless.
> +     * So, we use the v2.2 driver as a fallback/dummy.
> +     */
> +    driver        = &vbox22Driver;
>  
> +    /* Init the glue and get the API version. */
> +    if (VBoxCGlueInit() == 0) {
>          uVersion = g_pVBoxFuncs->pfnGetVersion();
> -
> -        major  = uVersion / 1000000;
> -        intVer = uVersion % 1000000;
> -        minor  = intVer / 1000;
> -        build  = intVer % 1000;
> -
> -        DEBUG("VBoxCGlueInit worked for version: %d.%d.%d", major, minor, build);
> -    } else {
> -        DEBUG("VBoxCGlueInit failed: %d.%d.%d, errorval=%d", major, minor, build, errorval);
> -    }
> -    /* select driver implementation based on version.
> -     * here returning -1 as initially thought is not
> -     * possible as that doesn't even allow libvirt to
> -     * load and thus drop to safe version which is
> -     * v2.2, but dont return -1 unless until it is
> -     * really bad like can't register the driver
> -     * itself using virRegisterDriver()
> -     */
> -    if (errorval == -1) {
> -        /* If initialization fails then always drop
> -         * back to the intial version i.e V2.2
> +        DEBUG("VBoxCGlueInit found API version: %d.%d.%d (%u)",
> +              uVersion / 1000000,
> +              uVersion % 1000000 / 1000,
> +              uVersion % 1000,
> +              uVersion);
> +
> +        /* Select driver implementation based on version.
> +         * Note that the VirtualBox development usually happens at build
> +         * number 51, thus the version ranges in the if statements below.
>           */
> -        driver = &vbox22Driver;
> -    } else if ( ((major == 2) && (minor == 1) && (build > 51)) ||
> -                ((major == 2) && (minor == 2)) ) {
> -        /* currently the OSE edition is still stuck at 2.1.52
> -         * while the beta is at 2.2 so check for both currently*/
> -        driver = &vbox22Driver;
> +        if (uVersion >= 2001052 && uVersion < 2002051) {
> +            DEBUG0("VirtualBox API version: 2.2");
> +            driver        = &vbox22Driver;
> +        } else if (uVersion >= 2002051 && uVersion < 2005051) {
> +            DEBUG0("VirtualBox API version: 2.5");
> +            driver        = &vbox25Driver;
> +        } else {
> +            DEBUG0("Unsupport VirtualBox API version");
> +        }
> +
>      } else {
> -        /* Always drop to some default if none of the above
> -         * cases are matched, else virRegisterDriver() will fail
> -         * and cause the whole of libvirt to be non-operative.
> -         */
> -        driver = &vbox22Driver;
> +        DEBUG0("VBoxCGlueInit failed");
>      }
> -    /** @todo r=bird:
> -     *   1. What about if (uVersion > 2001051 && uVersion <= 2002999)
> -     *      instead of the complicated stuff above?
> -     */
> -
> -
>  
>      if (virRegisterDriver(driver) < 0)
>          return -1;
> diff --git a/src/vbox/vbox_tmpl.c b/src/vbox/vbox_tmpl.c
> index bb124b9..7297172 100644
> --- a/src/vbox/vbox_tmpl.c
> +++ b/src/vbox/vbox_tmpl.c
> @@ -40,13 +40,13 @@
>  
>  #include "datatypes.h"
>  #include "domain_conf.h"
> +#include "network_conf.h"
>  #include "virterror_internal.h"
>  #include "uuid.h"
>  #include "memory.h"
>  #include "nodeinfo.h"
>  #include "logging.h"
>  #include "vbox_driver.h"
> -#include "vbox_XPCOMCGlue.h"
>  
>  /* This one changes from version to version. */
>  #if VBOX_API_VERSION == 2002
> @@ -58,6 +58,10 @@
>  */
>  #endif
>  
> +/* Include this *last* or we'll get the wrong vbox_CAPI_*.h. */
> +#include "vbox_XPCOMCGlue.h"
> +
> +
>  #define VIR_FROM_THIS VIR_FROM_VBOX
>  
>  #define vboxError(conn, code, fmt...) \
> @@ -73,14 +77,17 @@ typedef struct {
>  
>      IVirtualBox *vboxObj;
>      ISession *vboxSession;
> +
> +    /** Our version specific API table pointer. */
> +    PCVBOXXPCOM pFuncs;
>  } vboxGlobalData;
>  
> -extern int errorval;
> +
>  static virDomainPtr vboxDomainDefineXML(virConnectPtr conn, const char *xml);
>  static int vboxDomainCreate(virDomainPtr dom);
>  static int vboxDomainUndefine(virDomainPtr dom);
>  
> -static void nsIDtoChar(unsigned char *uuid, nsID *iid) {
> +static void nsIDtoChar(unsigned char *uuid, const nsID *iid) {
>      char uuidstrsrc[VIR_UUID_STRING_BUFLEN];
>      char uuidstrdst[VIR_UUID_STRING_BUFLEN];
>      unsigned char uuidinterim[VIR_UUID_BUFLEN];
> @@ -128,7 +135,7 @@ static void vboxDriverUnlock(vboxGlobalData *data) {
>      virMutexUnlock(&data->lock);
>  }
>  
> -static void nsIDFromChar(nsID *iid, unsigned char *uuid) {
> +static void nsIDFromChar(nsID *iid, const unsigned char *uuid) {
>      char uuidstrsrc[VIR_UUID_STRING_BUFLEN];
>      char uuidstrdst[VIR_UUID_STRING_BUFLEN];
>      unsigned char uuidinterim[VIR_UUID_BUFLEN];
> @@ -215,11 +222,33 @@ static int vboxInitialize(virConnectPtr conn, vboxGlobalData *data) {
>          goto cleanup;
>      }
>  
> -    g_pVBoxFuncs->pfnComInitialize(&data->vboxObj, &data->vboxSession);
> -    if (data->vboxObj == NULL)
> +    /* This is for when glue init failed and we're serving as dummy driver. */
> +    if (g_pfnGetFunctions == NULL)
> +        goto cleanup;
> +
> +    /* Get the API table for out version, g_pVBoxFuncs is for the oldest
> +       version of the API that we support so we cannot use that. */
> +    data->pFuncs = g_pfnGetFunctions(VBOX_XPCOMC_VERSION);
> +
> +    if (data->pFuncs == NULL)
>          goto cleanup;
> -    if (data->vboxSession == NULL)
> +
> +#if VBOX_XPCOMC_VERSION == 0x00010000U
> +    data->pFuncs->pfnComInitialize(&data->vboxObj, &data->vboxSession);
> +#else
> +    data->pFuncs->pfnComInitialize(IVIRTUALBOX_IID_STR, &data->vboxObj,
> +                               ISESSION_IID_STR, &data->vboxSession);
> +#endif
> +
> +    if (data->vboxObj == NULL) {
> +        vboxError(conn, VIR_ERR_INTERNAL_ERROR, "IVirtualBox object is null");
>          goto cleanup;
> +    }
> +
> +    if (data->vboxSession == NULL) {
> +        vboxError(conn, VIR_ERR_INTERNAL_ERROR, "ISession object is null");
> +        goto cleanup;
> +    }
>  
>      return 0;
>  
> @@ -242,13 +271,13 @@ static int vboxExtractVersion(virConnectPtr conn, vboxGlobalData *data) {
>      if (NS_SUCCEEDED(rc)) {
>          char *vboxVersion = NULL;
>  
> -        g_pVBoxFuncs->pfnUtf16ToUtf8(versionUtf16, &vboxVersion);
> +        data->pFuncs->pfnUtf16ToUtf8(versionUtf16, &vboxVersion);
>  
>          if (sscanf(vboxVersion, "%u.%u.%u", &major, &minor, &micro) == 3)
>              ret = 0;
>  
> -        g_pVBoxFuncs->pfnUtf8Free(vboxVersion);
> -        g_pVBoxFuncs->pfnComUnallocMem(versionUtf16);
> +        data->pFuncs->pfnUtf8Free(vboxVersion);
> +        data->pFuncs->pfnComUnallocMem(versionUtf16);
>      } else {
>          ret = -1;
>      }
> @@ -262,7 +291,7 @@ static int vboxExtractVersion(virConnectPtr conn, vboxGlobalData *data) {
>  }
>  
>  static void vboxUninitialize(vboxGlobalData *data) {
> -    g_pVBoxFuncs->pfnComUninitialize();
> +    data->pFuncs->pfnComUninitialize();
>      VBoxCGlueTerm();
>  
>      if (!data)
> @@ -279,9 +308,6 @@ static virDrvOpenStatus vboxOpen(virConnectPtr conn,
>      vboxGlobalData *data;
>      uid_t uid = getuid();
>  
> -    if (errorval == -1)
> -        return VIR_DRV_OPEN_DECLINED;
> -
>      if (conn->uri == NULL) {
>          conn->uri = xmlParseURI(uid ? "vbox:///session" : "vbox:///system");
>          if (conn->uri == NULL) {
> @@ -564,7 +590,7 @@ static virDomainPtr vboxDomainLookupByID(virConnectPtr conn, int id) {
>                          char *machineName;
>  
>                          machines[id]->vtbl->GetName(machines[id], &machineNameUtf16);
> -                        g_pVBoxFuncs->pfnUtf16ToUtf8(machineNameUtf16, &machineName);
> +                        data->pFuncs->pfnUtf16ToUtf8(machineNameUtf16, &machineName);
>  
>                          machines[id]->vtbl->GetId(machines[id], &iid);
>                          nsIDtoChar(iidl, iid);
> @@ -580,9 +606,9 @@ static virDomainPtr vboxDomainLookupByID(virConnectPtr conn, int id) {
>                              dom->id = id + 1;
>  
>                          /* Cleanup all the XPCOM allocated stuff here */
> -                        g_pVBoxFuncs->pfnComUnallocMem(iid);
> -                        g_pVBoxFuncs->pfnUtf8Free(machineName);
> -                        g_pVBoxFuncs->pfnComUnallocMem(machineNameUtf16);
> +                        data->pFuncs->pfnComUnallocMem(iid);
> +                        data->pFuncs->pfnUtf8Free(machineName);
> +                        data->pFuncs->pfnComUnallocMem(machineNameUtf16);
>                      }
>                  }
>              }
> @@ -640,7 +666,7 @@ static virDomainPtr vboxDomainLookupByUUID(virConnectPtr conn, const unsigned ch
>                      matched = 1;
>  
>                      machine->vtbl->GetName(machine, &machineNameUtf16);
> -                    g_pVBoxFuncs->pfnUtf16ToUtf8(machineNameUtf16, &machineName);
> +                    data->pFuncs->pfnUtf16ToUtf8(machineNameUtf16, &machineName);
>  
>                      machine->vtbl->GetState(machine, &state);
>  
> @@ -658,7 +684,7 @@ static virDomainPtr vboxDomainLookupByUUID(virConnectPtr conn, const unsigned ch
>                  }
>  
>                  if (iid) {
> -                    g_pVBoxFuncs->pfnComUnallocMem(iid);
> +                    data->pFuncs->pfnComUnallocMem(iid);
>                      iid = NULL;
>                  }
>                  if (matched == 1)
> @@ -668,9 +694,9 @@ static virDomainPtr vboxDomainLookupByUUID(virConnectPtr conn, const unsigned ch
>  
>          /* Do the cleanup and take care you dont leak any memory */
>          if (machineName)
> -            g_pVBoxFuncs->pfnUtf8Free(machineName);
> +            data->pFuncs->pfnUtf8Free(machineName);
>          if (machineNameUtf16)
> -            g_pVBoxFuncs->pfnComUnallocMem(machineNameUtf16);
> +            data->pFuncs->pfnComUnallocMem(machineNameUtf16);
>          for (i = 0; i < machineCnt; ++i) {
>              if (machines[i])
>                  machines[i]->vtbl->nsisupports.Release((nsISupports *)machines[i]);
> @@ -711,7 +737,7 @@ static virDomainPtr vboxDomainLookupByName(virConnectPtr conn, const char *name)
>              if (isAccessible) {
>  
>                  machine->vtbl->GetName(machine, &machineNameUtf16);
> -                g_pVBoxFuncs->pfnUtf16ToUtf8(machineNameUtf16, &machineName);
> +                data->pFuncs->pfnUtf16ToUtf8(machineNameUtf16, &machineName);
>  
>                  if (machineName && (STREQ(name, machineName))) {
>  
> @@ -738,11 +764,11 @@ static virDomainPtr vboxDomainLookupByName(virConnectPtr conn, const char *name)
>                  }
>  
>                  if (machineName) {
> -                    g_pVBoxFuncs->pfnUtf8Free(machineName);
> +                    data->pFuncs->pfnUtf8Free(machineName);
>                      machineName = NULL;
>                  }
>                  if (machineNameUtf16) {
> -                    g_pVBoxFuncs->pfnComUnallocMem(machineNameUtf16);
> +                    data->pFuncs->pfnComUnallocMem(machineNameUtf16);
>                      machineNameUtf16 = NULL;
>                  }
>                  if (matched == 1)
> @@ -752,7 +778,7 @@ static virDomainPtr vboxDomainLookupByName(virConnectPtr conn, const char *name)
>  
>          /* Do the cleanup and take care you dont leak any memory */
>          if (iid)
> -            g_pVBoxFuncs->pfnComUnallocMem(iid);
> +            data->pFuncs->pfnComUnallocMem(iid);
>          for (i = 0; i < machineCnt; ++i) {
>              if (machines[i])
>                  machines[i]->vtbl->nsisupports.Release((nsISupports *)machines[i]);
> @@ -1164,7 +1190,7 @@ static int vboxDomainGetInfo(virDomainPtr dom, virDomainInfoPtr info) {
>              if (isAccessible) {
>  
>                  machine->vtbl->GetName(machine, &machineNameUtf16);
> -                g_pVBoxFuncs->pfnUtf16ToUtf8(machineNameUtf16, &machineName);
> +                data->pFuncs->pfnUtf16ToUtf8(machineNameUtf16, &machineName);
>  
>                  if (STREQ(dom->name, machineName)) {
>                      /* Get the Machine State (also match it with
> @@ -1225,9 +1251,9 @@ static int vboxDomainGetInfo(virDomainPtr dom, virDomainInfoPtr info) {
>                  }
>  
>                  if (machineName)
> -                    g_pVBoxFuncs->pfnUtf8Free(machineName);
> +                    data->pFuncs->pfnUtf8Free(machineName);
>                  if (machineNameUtf16)
> -                    g_pVBoxFuncs->pfnComUnallocMem(machineNameUtf16);
> +                    data->pFuncs->pfnComUnallocMem(machineNameUtf16);
>                  if (info->nrVirtCpu)
>                      break;
>              }
> @@ -1481,11 +1507,11 @@ static char *vboxDomainDumpXML(virDomainPtr dom, int flags) {
>  
>                              VRDPServer->vtbl->GetNetAddress(VRDPServer, &netAddressUtf16);
>                              if (netAddressUtf16) {
> -                                g_pVBoxFuncs->pfnUtf16ToUtf8(netAddressUtf16, &netAddressUtf8);
> +                                data->pFuncs->pfnUtf16ToUtf8(netAddressUtf16, &netAddressUtf8);
>                                  if (STRNEQ(netAddressUtf8, ""))
>                                          def->graphics->data.rdp.listenAddr = strdup(netAddressUtf8);
> -                                g_pVBoxFuncs->pfnUtf16Free(netAddressUtf16);
> -                                g_pVBoxFuncs->pfnUtf8Free(netAddressUtf8);
> +                                data->pFuncs->pfnUtf16Free(netAddressUtf16);
> +                                data->pFuncs->pfnUtf8Free(netAddressUtf8);
>                              }
>  
>                              VRDPServer->vtbl->GetAuthType(VRDPServer, &authType);
> @@ -1519,13 +1545,13 @@ static char *vboxDomainDumpXML(virDomainPtr dom, int flags) {
>                              machine->vtbl->GetSessionType(machine, &sessionTypeUtf16);
>                              DEBUG0("Session Type:");
>                              if (sessionTypeUtf16) {
> -                                g_pVBoxFuncs->pfnUtf16ToUtf8(sessionTypeUtf16, &sessionTypeUtf8);
> +                                data->pFuncs->pfnUtf16ToUtf8(sessionTypeUtf16, &sessionTypeUtf8);
>                                  DEBUG("Session Type: %s", sessionTypeUtf8);
>                                  if (STREQ(sessionTypeUtf8, "vrdp")) {
>                                      def->graphics->data.rdp.headless = 1;
>                                  }
> -                                g_pVBoxFuncs->pfnUtf16Free(sessionTypeUtf16);
> -                                g_pVBoxFuncs->pfnUtf8Free(sessionTypeUtf8);
> +                                data->pFuncs->pfnUtf16Free(sessionTypeUtf16);
> +                                data->pFuncs->pfnUtf8Free(sessionTypeUtf8);
>                              }
>                          }
>                      }
> @@ -1534,7 +1560,7 @@ static char *vboxDomainDumpXML(virDomainPtr dom, int flags) {
>  #endif
>  
>                  /* dump IDE hdds if present */
> -                g_pVBoxFuncs->pfnUtf8ToUtf16(hddBus, &hddBusUtf16);
> +                data->pFuncs->pfnUtf8ToUtf16(hddBus, &hddBusUtf16);
>                  VIR_FREE(hddBus);
>  
>                  def->ndisks = 0;
> @@ -1550,7 +1576,7 @@ static char *vboxDomainDumpXML(virDomainPtr dom, int flags) {
>                  if (hardDiskSS)
>                      def->ndisks++;
>  
> -                g_pVBoxFuncs->pfnUtf16Free(hddBusUtf16);
> +                data->pFuncs->pfnUtf16Free(hddBusUtf16);
>  
>                  if ((def->ndisks > 0) && (VIR_ALLOC_N(def->disks, def->ndisks) >= 0)) {
>                      for (i = 0; i < def->ndisks; i++) {
> @@ -1568,7 +1594,7 @@ static char *vboxDomainDumpXML(virDomainPtr dom, int flags) {
>                      PRUint32 hddType            = HardDiskType_Normal;
>  
>                      hardDiskPM->vtbl->imedium.GetLocation((IMedium *)hardDiskPM, &hddlocationUtf16);
> -                    g_pVBoxFuncs->pfnUtf16ToUtf8(hddlocationUtf16, &hddlocation);
> +                    data->pFuncs->pfnUtf16ToUtf8(hddlocationUtf16, &hddlocation);
>  
>                      hardDiskPM->vtbl->GetType(hardDiskPM, &hddType);
>  
> @@ -1578,8 +1604,8 @@ static char *vboxDomainDumpXML(virDomainPtr dom, int flags) {
>                      def->disks[hddNum]->dst = strdup("hda");
>                      hddNum++;
>  
> -                    g_pVBoxFuncs->pfnUtf8Free(hddlocation);
> -                    g_pVBoxFuncs->pfnUtf16Free(hddlocationUtf16);
> +                    data->pFuncs->pfnUtf8Free(hddlocation);
> +                    data->pFuncs->pfnUtf16Free(hddlocationUtf16);
>                      hardDiskPM->vtbl->imedium.nsisupports.Release((nsISupports *)hardDiskPM);
>                  }
>  
> @@ -1589,7 +1615,7 @@ static char *vboxDomainDumpXML(virDomainPtr dom, int flags) {
>                      PRUint32 hddType            = HardDiskType_Normal;
>  
>                      hardDiskPS->vtbl->imedium.GetLocation((IMedium *)hardDiskPS, &hddlocationUtf16);
> -                    g_pVBoxFuncs->pfnUtf16ToUtf8(hddlocationUtf16, &hddlocation);
> +                    data->pFuncs->pfnUtf16ToUtf8(hddlocationUtf16, &hddlocation);
>  
>                      hardDiskPS->vtbl->GetType(hardDiskPS, &hddType);
>  
> @@ -1599,8 +1625,8 @@ static char *vboxDomainDumpXML(virDomainPtr dom, int flags) {
>                      def->disks[hddNum]->dst = strdup("hdb");
>                      hddNum++;
>  
> -                    g_pVBoxFuncs->pfnUtf8Free(hddlocation);
> -                    g_pVBoxFuncs->pfnUtf16Free(hddlocationUtf16);
> +                    data->pFuncs->pfnUtf8Free(hddlocation);
> +                    data->pFuncs->pfnUtf16Free(hddlocationUtf16);
>                      hardDiskPS->vtbl->imedium.nsisupports.Release((nsISupports *)hardDiskPS);
>                  }
>  
> @@ -1610,7 +1636,7 @@ static char *vboxDomainDumpXML(virDomainPtr dom, int flags) {
>                      PRUint32 hddType            = HardDiskType_Normal;
>  
>                      hardDiskSS->vtbl->imedium.GetLocation((IMedium *)hardDiskSS, &hddlocationUtf16);
> -                    g_pVBoxFuncs->pfnUtf16ToUtf8(hddlocationUtf16, &hddlocation);
> +                    data->pFuncs->pfnUtf16ToUtf8(hddlocationUtf16, &hddlocation);
>  
>                      hardDiskSS->vtbl->GetType(hardDiskSS, &hddType);
>  
> @@ -1620,8 +1646,8 @@ static char *vboxDomainDumpXML(virDomainPtr dom, int flags) {
>                      def->disks[hddNum]->dst = strdup("hdd");
>                      hddNum++;
>  
> -                    g_pVBoxFuncs->pfnUtf8Free(hddlocation);
> -                    g_pVBoxFuncs->pfnUtf16Free(hddlocationUtf16);
> +                    data->pFuncs->pfnUtf8Free(hddlocation);
> +                    data->pFuncs->pfnUtf16Free(hddlocationUtf16);
>                      hardDiskSS->vtbl->imedium.nsisupports.Release((nsISupports *)hardDiskSS);
>                  }
>  
> @@ -1681,11 +1707,11 @@ static char *vboxDomainDumpXML(virDomainPtr dom, int flags) {
>  
>                                  adapter->vtbl->GetHostInterface(adapter, &hostIntUtf16);
>  
> -                                g_pVBoxFuncs->pfnUtf16ToUtf8(hostIntUtf16, &hostInt);
> +                                data->pFuncs->pfnUtf16ToUtf8(hostIntUtf16, &hostInt);
>                                  def->nets[netAdpIncCnt]->data.bridge.brname = strdup(hostInt);
>  
> -                                g_pVBoxFuncs->pfnUtf8Free(hostInt);
> -                                g_pVBoxFuncs->pfnUtf16Free(hostIntUtf16);
> +                                data->pFuncs->pfnUtf8Free(hostInt);
> +                                data->pFuncs->pfnUtf16Free(hostIntUtf16);
>  
>  #if 0
>                              } else if (attachmentType == NetworkAttachmentType_Internal) {
> @@ -1696,11 +1722,11 @@ static char *vboxDomainDumpXML(virDomainPtr dom, int flags) {
>  
>                                  adapter->vtbl->GetInternalNetwork(adapter, &intNetUtf16);
>  
> -                                g_pVBoxFuncs->pfnUtf16ToUtf8(intNetUtf16, &intNet);
> +                                data->pFuncs->pfnUtf16ToUtf8(intNetUtf16, &intNet);
>                                  def->nets[netAdpIncCnt]->data.internal.name = strdup(intNet);
>  
> -                                g_pVBoxFuncs->pfnUtf8Free(intNet);
> -                                g_pVBoxFuncs->pfnUtf16Free(intNetUtf16);
> +                                data->pFuncs->pfnUtf8Free(intNet);
> +                                data->pFuncs->pfnUtf16Free(intNetUtf16);
>  
>                              } else if (attachmentType == NetworkAttachmentType_HostOnly) {
>                                  PRUnichar *hostIntUtf16 = NULL;
> @@ -1710,11 +1736,11 @@ static char *vboxDomainDumpXML(virDomainPtr dom, int flags) {
>  
>                                  adapter->vtbl->GetHostInterface(adapter, &hostIntUtf16);
>  
> -                                g_pVBoxFuncs->pfnUtf16ToUtf8(hostIntUtf16, &hostInt);
> +                                data->pFuncs->pfnUtf16ToUtf8(hostIntUtf16, &hostInt);
>                                  def->nets[netAdpIncCnt]->data.hostonly.name = strdup(hostInt);
>  
> -                                g_pVBoxFuncs->pfnUtf8Free(hostInt);
> -                                g_pVBoxFuncs->pfnUtf16Free(hostIntUtf16);
> +                                data->pFuncs->pfnUtf8Free(hostInt);
> +                                data->pFuncs->pfnUtf16Free(hostIntUtf16);
>  
>  #endif
>                              } else {
> @@ -1738,7 +1764,7 @@ static char *vboxDomainDumpXML(virDomainPtr dom, int flags) {
>                              }
>  
>                              adapter->vtbl->GetMACAddress(adapter, &MACAddressUtf16);
> -                            g_pVBoxFuncs->pfnUtf16ToUtf8(MACAddressUtf16, &MACAddress);
> +                            data->pFuncs->pfnUtf16ToUtf8(MACAddressUtf16, &MACAddress);
>                              snprintf(macaddr, VIR_MAC_STRING_BUFLEN,
>                                       "%c%c:%c%c:%c%c:%c%c:%c%c:%c%c",
>                                       MACAddress[0], MACAddress[1], MACAddress[2], MACAddress[3],
> @@ -1749,8 +1775,8 @@ static char *vboxDomainDumpXML(virDomainPtr dom, int flags) {
>  
>                              netAdpIncCnt++;
>  
> -                            g_pVBoxFuncs->pfnUtf16Free(MACAddressUtf16);
> -                            g_pVBoxFuncs->pfnUtf8Free(MACAddress);
> +                            data->pFuncs->pfnUtf16Free(MACAddressUtf16);
> +                            data->pFuncs->pfnUtf8Free(MACAddress);
>                          }
>  
>                          adapter->vtbl->nsisupports.Release((nsISupports *)adapter);
> @@ -1806,7 +1832,7 @@ static char *vboxDomainDumpXML(virDomainPtr dom, int flags) {
>                              char *location           = NULL;
>  
>                              dvdImage->vtbl->imedium.GetLocation((IMedium *)dvdImage, &locationUtf16);
> -                            g_pVBoxFuncs->pfnUtf16ToUtf8(locationUtf16, &location);
> +                            data->pFuncs->pfnUtf16ToUtf8(locationUtf16, &location);
>  
>                              def->ndisks++;
>                              if (VIR_REALLOC_N(def->disks, def->ndisks) >= 0) {
> @@ -1824,8 +1850,8 @@ static char *vboxDomainDumpXML(virDomainPtr dom, int flags) {
>                                  def->ndisks--;
>                              }
>  
> -                            g_pVBoxFuncs->pfnUtf8Free(location);
> -                            g_pVBoxFuncs->pfnUtf16Free(locationUtf16);
> +                            data->pFuncs->pfnUtf8Free(location);
> +                            data->pFuncs->pfnUtf16Free(locationUtf16);
>                              dvdImage->vtbl->imedium.nsisupports.Release((nsISupports *)dvdImage);
>                          }
>                      }
> @@ -1851,7 +1877,7 @@ static char *vboxDomainDumpXML(virDomainPtr dom, int flags) {
>                                  char *location           = NULL;
>  
>                                  floppyImage->vtbl->imedium.GetLocation((IMedium *)floppyImage, &locationUtf16);
> -                                g_pVBoxFuncs->pfnUtf16ToUtf8(locationUtf16, &location);
> +                                data->pFuncs->pfnUtf16ToUtf8(locationUtf16, &location);
>  
>                                  def->ndisks++;
>                                  if (VIR_REALLOC_N(def->disks, def->ndisks) >= 0) {
> @@ -1869,8 +1895,8 @@ static char *vboxDomainDumpXML(virDomainPtr dom, int flags) {
>                                      def->ndisks--;
>                                  }
>  
> -                                g_pVBoxFuncs->pfnUtf8Free(location);
> -                                g_pVBoxFuncs->pfnUtf16Free(locationUtf16);
> +                                data->pFuncs->pfnUtf8Free(location);
> +                                data->pFuncs->pfnUtf16Free(locationUtf16);
>                                  floppyImage->vtbl->imedium.nsisupports.Release((nsISupports *)floppyImage);
>                              }
>                          }
> @@ -1941,13 +1967,13 @@ static char *vboxDomainDumpXML(virDomainPtr dom, int flags) {
>  
>                              serialPort->vtbl->GetPath(serialPort, &pathUtf16);
>  
> -                            g_pVBoxFuncs->pfnUtf16ToUtf8(pathUtf16, &path);
> +                            data->pFuncs->pfnUtf16ToUtf8(pathUtf16, &path);
>                              def->serials[serialPortIncCount]->data.file.path = strdup(path);
>  
>                              serialPortIncCount++;
>  
> -                            g_pVBoxFuncs->pfnUtf16Free(pathUtf16);
> -                            g_pVBoxFuncs->pfnUtf8Free(path);
> +                            data->pFuncs->pfnUtf16Free(pathUtf16);
> +                            data->pFuncs->pfnUtf8Free(path);
>                          }
>  
>                          serialPort->vtbl->nsisupports.Release((nsISupports *)serialPort);
> @@ -2008,13 +2034,13 @@ static char *vboxDomainDumpXML(virDomainPtr dom, int flags) {
>  
>                              parallelPort->vtbl->GetPath(parallelPort, &pathUtf16);
>  
> -                            g_pVBoxFuncs->pfnUtf16ToUtf8(pathUtf16, &path);
> +                            data->pFuncs->pfnUtf16ToUtf8(pathUtf16, &path);
>                              def->parallels[parallelPortIncCount]->data.file.path = strdup(path);
>  
>                              parallelPortIncCount++;
>  
> -                            g_pVBoxFuncs->pfnUtf16Free(pathUtf16);
> -                            g_pVBoxFuncs->pfnUtf8Free(path);
> +                            data->pFuncs->pfnUtf16Free(pathUtf16);
> +                            data->pFuncs->pfnUtf8Free(path);
>                          }
>  
>                          parallelPort->vtbl->nsisupports.Release((nsISupports *)parallelPort);
> @@ -2077,8 +2103,8 @@ static char *vboxDomainDumpXML(virDomainPtr dom, int flags) {
>                                                  deviceFilters[i]->vtbl->GetVendorId(deviceFilters[i], &vendorIdUtf16);
>                                                  deviceFilters[i]->vtbl->GetProductId(deviceFilters[i], &productIdUtf16);
>  
> -                                                g_pVBoxFuncs->pfnUtf16ToUtf8(vendorIdUtf16, &vendorIdUtf8);
> -                                                g_pVBoxFuncs->pfnUtf16ToUtf8(productIdUtf16, &productIdUtf8);
> +                                                data->pFuncs->pfnUtf16ToUtf8(vendorIdUtf16, &vendorIdUtf8);
> +                                                data->pFuncs->pfnUtf16ToUtf8(productIdUtf16, &productIdUtf8);
>  
>                                                  vendorId  = strtol(vendorIdUtf8, &endptr, 16);
>                                                  productId = strtol(productIdUtf8, &endptr, 16);
> @@ -2086,11 +2112,11 @@ static char *vboxDomainDumpXML(virDomainPtr dom, int flags) {
>                                                  def->hostdevs[USBFilterCount]->source.subsys.u.usb.vendor  = vendorId;
>                                                  def->hostdevs[USBFilterCount]->source.subsys.u.usb.product = productId;
>  
> -                                                g_pVBoxFuncs->pfnUtf16Free(vendorIdUtf16);
> -                                                g_pVBoxFuncs->pfnUtf8Free(vendorIdUtf8);
> +                                                data->pFuncs->pfnUtf16Free(vendorIdUtf16);
> +                                                data->pFuncs->pfnUtf8Free(vendorIdUtf8);
>  
> -                                                g_pVBoxFuncs->pfnUtf16Free(productIdUtf16);
> -                                                g_pVBoxFuncs->pfnUtf8Free(productIdUtf8);
> +                                                data->pFuncs->pfnUtf16Free(productIdUtf16);
> +                                                data->pFuncs->pfnUtf8Free(productIdUtf8);
>  
>                                                  USBFilterCount++;
>                                              }
> @@ -2163,7 +2189,7 @@ static int vboxListDefinedDomains(virConnectPtr conn, char ** const names, int m
>                      if ((state != MachineState_Running) &&
>                          (state != MachineState_Paused) ) {
>                          machine->vtbl->GetName(machine, &machineNameUtf16);
> -                        g_pVBoxFuncs->pfnUtf16ToUtf8(machineNameUtf16, &machineName);
> +                        data->pFuncs->pfnUtf16ToUtf8(machineNameUtf16, &machineName);
>                          if (!(names[j++] = strdup(machineName))) {
>                              virReportOOMError(conn);
>                              for ( ; j >= 0 ; j--)
> @@ -2180,8 +2206,8 @@ static int vboxListDefinedDomains(virConnectPtr conn, char ** const names, int m
>      }
>  
>  cleanup:
> -    g_pVBoxFuncs->pfnUtf8Free(machineName);
> -    g_pVBoxFuncs->pfnUtf16Free(machineNameUtf16);
> +    data->pFuncs->pfnUtf8Free(machineName);
> +    data->pFuncs->pfnUtf16Free(machineNameUtf16);
>      for (i = 0; i < machineCnt; ++i)
>          if (machines[i])
>              machines[i]->vtbl->nsisupports.Release((nsISupports *)machines[i]);
> @@ -2252,10 +2278,10 @@ static int vboxDomainCreate(virDomainPtr dom) {
>  
>      if (display) {
>          sprintf(displayutf8, "DISPLAY=%s", display);
> -        g_pVBoxFuncs->pfnUtf8ToUtf16(displayutf8, &env);
> +        data->pFuncs->pfnUtf8ToUtf16(displayutf8, &env);
>      }
>  
> -    g_pVBoxFuncs->pfnUtf8ToUtf16("gui", &sessionType);
> +    data->pFuncs->pfnUtf8ToUtf16("gui", &sessionType);
>  
>      if (!dom->name) {
>          vboxError(dom->conn, VIR_ERR_INTERNAL_ERROR,"%s",
> @@ -2339,7 +2365,7 @@ static int vboxDomainCreate(virDomainPtr dom) {
>                  }
>  
>                  if (iid)
> -                    g_pVBoxFuncs->pfnComUnallocMem(iid);
> +                    data->pFuncs->pfnComUnallocMem(iid);
>                  if (ret != -1)
>                      break;
>              }
> @@ -2352,8 +2378,8 @@ static int vboxDomainCreate(virDomainPtr dom) {
>          }
>      }
>  
> -    g_pVBoxFuncs->pfnUtf16Free(env);
> -    g_pVBoxFuncs->pfnUtf16Free(sessionType);
> +    data->pFuncs->pfnUtf16Free(env);
> +    data->pFuncs->pfnUtf16Free(sessionType);
>  
>  cleanup:
>      return ret;
> @@ -2381,7 +2407,7 @@ static virDomainPtr vboxDomainDefineXML(virConnectPtr conn, const char *xml) {
>      }
>  
>      if (data->vboxObj) {
> -        g_pVBoxFuncs->pfnUtf8ToUtf16(def->name, &machineNameUtf16);
> +        data->pFuncs->pfnUtf8ToUtf16(def->name, &machineNameUtf16);
>          nsIDFromChar(iid, def->uuid);
>          rc = data->vboxObj->vtbl->CreateMachine(data->vboxObj,
>                                                  machineNameUtf16,
> @@ -2389,7 +2415,7 @@ static virDomainPtr vboxDomainDefineXML(virConnectPtr conn, const char *xml) {
>                                                  NULL,
>                                                  iid,
>                                                  &machine);
> -        g_pVBoxFuncs->pfnUtf16Free(machineNameUtf16);
> +        data->pFuncs->pfnUtf16Free(machineNameUtf16);
>  
>          if (NS_FAILED(rc)) {
>              vboxError(conn, VIR_ERR_INTERNAL_ERROR,"%s, rc=%08x",
> @@ -2544,7 +2570,7 @@ static virDomainPtr vboxDomainDefineXML(virConnectPtr conn, const char *xml) {
>  
>                                  memset(&dvdemptyuuid, 0, sizeof(dvdemptyuuid));
>  
> -                                g_pVBoxFuncs->pfnUtf8ToUtf16(def->disks[i]->src, &dvdfileUtf16);
> +                                data->pFuncs->pfnUtf8ToUtf16(def->disks[i]->src, &dvdfileUtf16);
>  
>                                  data->vboxObj->vtbl->FindDVDImage(data->vboxObj, dvdfileUtf16, &dvdImage);
>                                  if (!dvdImage) {
> @@ -2570,12 +2596,12 @@ static virDomainPtr vboxDomainDefineXML(virConnectPtr conn, const char *xml) {
>                                              (unsigned)dvduuid->m3[4], (unsigned)dvduuid->m3[5],
>                                              (unsigned)dvduuid->m3[6], (unsigned)dvduuid->m3[7]);
>                                          }
> -                                        g_pVBoxFuncs->pfnComUnallocMem(dvduuid);
> +                                        data->pFuncs->pfnComUnallocMem(dvduuid);
>                                      }
>  
>                                      dvdImage->vtbl->imedium.nsisupports.Release((nsISupports *)dvdImage);
>                                  }
> -                                g_pVBoxFuncs->pfnUtf16Free(dvdfileUtf16);
> +                                data->pFuncs->pfnUtf16Free(dvdfileUtf16);
>                                  dvdDrive->vtbl->nsisupports.Release((nsISupports *)dvdDrive);
>                              }
>                          } else if (def->disks[i]->type == VIR_DOMAIN_DISK_TYPE_BLOCK) {
> @@ -2591,7 +2617,7 @@ static virDomainPtr vboxDomainDefineXML(virConnectPtr conn, const char *xml) {
>                               * is requested to be connected to Secondary master
>                               */
>  
> -                            g_pVBoxFuncs->pfnUtf8ToUtf16(def->disks[i]->src, &hddfileUtf16);
> +                            data->pFuncs->pfnUtf8ToUtf16(def->disks[i]->src, &hddfileUtf16);
>  
>                              data->vboxObj->vtbl->FindHardDisk(data->vboxObj, hddfileUtf16, &hardDisk);
>  
> @@ -2626,7 +2652,7 @@ static virDomainPtr vboxDomainDefineXML(virConnectPtr conn, const char *xml) {
>                                              PRUnichar *hddcnameUtf16 = NULL;
>  
>                                              char *hddcname = strdup("IDE");
> -                                            g_pVBoxFuncs->pfnUtf8ToUtf16(hddcname, &hddcnameUtf16);
> +                                            data->pFuncs->pfnUtf8ToUtf16(hddcname, &hddcnameUtf16);
>                                              VIR_FREE(hddcname);
>  
>                                              if (STREQ(def->disks[i]->dst, "hda")) {
> @@ -2643,7 +2669,7 @@ static virDomainPtr vboxDomainDefineXML(virConnectPtr conn, const char *xml) {
>                                              rc = machine->vtbl->AttachHardDisk(machine, hdduuid,
>                                                                                 hddcnameUtf16,
>                                                                                 channel, device);
> -                                            g_pVBoxFuncs->pfnUtf16Free(hddcnameUtf16);
> +                                            data->pFuncs->pfnUtf16Free(hddcnameUtf16);
>  
>                                              if (NS_FAILED(rc)) {
>                                                  vboxError(conn, VIR_ERR_INTERNAL_ERROR,"%s:%s, rc=%08x",
> @@ -2661,11 +2687,11 @@ static virDomainPtr vboxDomainDefineXML(virConnectPtr conn, const char *xml) {
>                                              }
>                                          }
>                                      }
> -                                    g_pVBoxFuncs->pfnComUnallocMem(hdduuid);
> +                                    data->pFuncs->pfnComUnallocMem(hdduuid);
>                                  }
>                                  hardDisk->vtbl->imedium.nsisupports.Release((nsISupports *)hardDisk);
>                              }
> -                            g_pVBoxFuncs->pfnUtf16Free(hddfileUtf16);
> +                            data->pFuncs->pfnUtf16Free(hddfileUtf16);
>                          } else if (def->disks[i]->type == VIR_DOMAIN_DISK_TYPE_BLOCK) {
>                          }
>                      } else if (def->disks[i]->device == VIR_DOMAIN_DISK_DEVICE_FLOPPY) {
> @@ -2682,7 +2708,7 @@ static virDomainPtr vboxDomainDefineXML(virConnectPtr conn, const char *xml) {
>  
>                                      memset(&fdemptyuuid, 0, sizeof(fdemptyuuid));
>  
> -                                    g_pVBoxFuncs->pfnUtf8ToUtf16(def->disks[i]->src, &fdfileUtf16);
> +                                    data->pFuncs->pfnUtf8ToUtf16(def->disks[i]->src, &fdfileUtf16);
>                                      rc = data->vboxObj->vtbl->FindFloppyImage(data->vboxObj, fdfileUtf16,
>                                                                                &floppyImage);
>  
> @@ -2713,11 +2739,11 @@ static virDomainPtr vboxDomainDefineXML(virConnectPtr conn, const char *xml) {
>                                                  (unsigned)fduuid->m3[4], (unsigned)fduuid->m3[5],
>                                                  (unsigned)fduuid->m3[6], (unsigned)fduuid->m3[7]);
>                                              }
> -                                            g_pVBoxFuncs->pfnComUnallocMem(fduuid);
> +                                            data->pFuncs->pfnComUnallocMem(fduuid);
>                                          }
>                                          floppyImage->vtbl->imedium.nsisupports.Release((nsISupports *)floppyImage);
>                                      }
> -                                    g_pVBoxFuncs->pfnUtf16Free(fdfileUtf16);
> +                                    data->pFuncs->pfnUtf16Free(fdfileUtf16);
>                                  }
>                                  floppyDrive->vtbl->nsisupports.Release((nsISupports *)floppyDrive);
>                              }
> @@ -2829,9 +2855,9 @@ static virDomainPtr vboxDomainDefineXML(virConnectPtr conn, const char *xml) {
>                          adapter->vtbl->AttachToBridgedInterface(adapter);
>  
>                          if (def->nets[i]->data.bridge.brname) {
> -                            g_pVBoxFuncs->pfnUtf8ToUtf16(def->nets[i]->data.bridge.brname, &hostInterface);
> +                            data->pFuncs->pfnUtf8ToUtf16(def->nets[i]->data.bridge.brname, &hostInterface);
>                              adapter->vtbl->SetHostInterface(adapter, hostInterface);
> -                            g_pVBoxFuncs->pfnUtf16Free(hostInterface);
> +                            data->pFuncs->pfnUtf16Free(hostInterface);
>                          }
>  #if 0
>                      } else if (def->nets[i]->type == VIR_DOMAIN_NET_TYPE_INTERNAL) {
> @@ -2841,9 +2867,9 @@ static virDomainPtr vboxDomainDefineXML(virConnectPtr conn, const char *xml) {
>                          adapter->vtbl->AttachToInternalNetwork(adapter);
>  
>                          if (def->nets[i]->data.network.name) {
> -                            g_pVBoxFuncs->pfnUtf8ToUtf16(def->nets[i]->data.internal.name, &internalNetwork);
> +                            data->pFuncs->pfnUtf8ToUtf16(def->nets[i]->data.network.name, &internalNetwork);
>                              adapter->vtbl->SetInternalNetwork(adapter, internalNetwork);
> -                            g_pVBoxFuncs->pfnUtf16Free(internalNetwork);
> +                            data->pFuncs->pfnUtf16Free(internalNetwork);
>                          }
>                      } else if (def->nets[i]->type == VIR_DOMAIN_NET_TYPE_HOSTONLY) {
>                          PRUnichar *hostInterface = NULL;
> @@ -2856,7 +2882,7 @@ static virDomainPtr vboxDomainDefineXML(virConnectPtr conn, const char *xml) {
>                          if (def->nets[i]->data.ethernet.dev) {
>                              g_pVBoxFuncs->pfnUtf8ToUtf16(def->nets[i]->data.hostonly.name, &hostInterface);
>                              adapter->vtbl->SetHostInterface(adapter, hostInterface);
> -                            g_pVBoxFuncs->pfnUtf16Free(hostInterface);
> +                            data->pFuncs->pfnUtf16Free(hostInterface);
>                          }
>  #endif
>                      } else if (def->nets[i]->type == VIR_DOMAIN_NET_TYPE_USER) {
> @@ -2869,11 +2895,11 @@ static virDomainPtr vboxDomainDefineXML(virConnectPtr conn, const char *xml) {
>                          adapter->vtbl->AttachToNAT(adapter);
>                      }
>  
> -                    g_pVBoxFuncs->pfnUtf8ToUtf16(macaddrvbox, &MACAddress);
> +                    data->pFuncs->pfnUtf8ToUtf16(macaddrvbox, &MACAddress);
>                      if (def->nets[i]->mac) {
>                          adapter->vtbl->SetMACAddress(adapter, MACAddress);
>                      }
> -                    g_pVBoxFuncs->pfnUtf16Free(MACAddress);
> +                    data->pFuncs->pfnUtf16Free(MACAddress);
>                  }
>              }
>          }   /* Finished:Block to attach the Network Card to the VM */
> @@ -2903,7 +2929,7 @@ static virDomainPtr vboxDomainDefineXML(virConnectPtr conn, const char *xml) {
>                      PRUnichar *pathUtf16 = NULL;
>  
>                      serialPort->vtbl->SetEnabled(serialPort, 1);
> -                    g_pVBoxFuncs->pfnUtf8ToUtf16(def->serials[i]->data.file.path, &pathUtf16);
> +                    data->pFuncs->pfnUtf8ToUtf16(def->serials[i]->data.file.path, &pathUtf16);
>  
>                      /* For now hard code the serial ports to COM1 and COM2,
>                       * COM1 (Base Addr: 0x3F8 (decimal: 1016), IRQ: 4)
> @@ -2951,7 +2977,7 @@ static virDomainPtr vboxDomainDefineXML(virConnectPtr conn, const char *xml) {
>  
>                      serialPort->vtbl->nsisupports.Release((nsISupports *)serialPort);
>                      if (pathUtf16) {
> -                        g_pVBoxFuncs->pfnUtf16Free(pathUtf16);
> +                        data->pFuncs->pfnUtf16Free(pathUtf16);
>                          pathUtf16 = NULL;
>                      }
>                  }
> @@ -2982,7 +3008,7 @@ static virDomainPtr vboxDomainDefineXML(virConnectPtr conn, const char *xml) {
>                  if (parallelPort) {
>                      PRUnichar *pathUtf16 = NULL;
>  
> -                    g_pVBoxFuncs->pfnUtf8ToUtf16(def->parallels[i]->data.file.path, &pathUtf16);
> +                    data->pFuncs->pfnUtf8ToUtf16(def->parallels[i]->data.file.path, &pathUtf16);
>  
>                      /* For now hard code the parallel ports to
>                       * LPT1 (Base Addr: 0x378 (decimal: 888), IRQ: 7)
> @@ -3014,7 +3040,7 @@ static virDomainPtr vboxDomainDefineXML(virConnectPtr conn, const char *xml) {
>  
>                      parallelPort->vtbl->nsisupports.Release((nsISupports *)parallelPort);
>                      if (pathUtf16) {
> -                        g_pVBoxFuncs->pfnUtf16Free(pathUtf16);
> +                        data->pFuncs->pfnUtf16Free(pathUtf16);
>                          pathUtf16 = NULL;
>                      }
>                  }
> @@ -3074,11 +3100,11 @@ static virDomainPtr vboxDomainDefineXML(virConnectPtr conn, const char *xml) {
>                          if (def->graphics->data.rdp.listenAddr) {
>                              PRUnichar *netAddressUtf16 = NULL;
>  
> -                            g_pVBoxFuncs->pfnUtf8ToUtf16(def->graphics->data.rdp.listenAddr, &netAddressUtf16);
> +                            data->pFuncs->pfnUtf8ToUtf16(def->graphics->data.rdp.listenAddr, &netAddressUtf16);
>                              VRDPServer->vtbl->SetNetAddress(VRDPServer, netAddressUtf16);
>                              DEBUG("VRDP listen address is set to: %s", def->graphics->data.rdp.listenAddr);
>  
> -                            g_pVBoxFuncs->pfnUtf16Free(netAddressUtf16);
> +                            data->pFuncs->pfnUtf16Free(netAddressUtf16);
>                          }
>  
>                          VRDPServer->vtbl->nsisupports.Release((nsISupports *)VRDPServer);
> @@ -3136,12 +3162,12 @@ static virDomainPtr vboxDomainDefineXML(virConnectPtr conn, const char *xml) {
>                                       * restricting to %04d
>                                       */
>                                      sprintf(filtername, "filter%04d", i);
> -                                    g_pVBoxFuncs->pfnUtf8ToUtf16(filtername, &filternameUtf16);
> +                                    data->pFuncs->pfnUtf8ToUtf16(filtername, &filternameUtf16);
>  
>                                      USBController->vtbl->CreateDeviceFilter(USBController,
>                                                                              filternameUtf16,
>                                                                              &filter);
> -                                    g_pVBoxFuncs->pfnUtf16Free(filternameUtf16);
> +                                    data->pFuncs->pfnUtf16Free(filternameUtf16);
>  
>                                      if (filter &&
>                                          (def->hostdevs[i]->source.subsys.u.usb.vendor ||
> @@ -3154,15 +3180,15 @@ static virDomainPtr vboxDomainDefineXML(virConnectPtr conn, const char *xml) {
>  
>                                          if (def->hostdevs[i]->source.subsys.u.usb.vendor) {
>                                              sprintf(vendorId, "%x", def->hostdevs[i]->source.subsys.u.usb.vendor);
> -                                            g_pVBoxFuncs->pfnUtf8ToUtf16(vendorId, &vendorIdUtf16);
> +                                            data->pFuncs->pfnUtf8ToUtf16(vendorId, &vendorIdUtf16);
>                                              filter->vtbl->SetVendorId(filter, vendorIdUtf16);
> -                                            g_pVBoxFuncs->pfnUtf16Free(vendorIdUtf16);
> +                                            data->pFuncs->pfnUtf16Free(vendorIdUtf16);
>                                          }
>                                          if (def->hostdevs[i]->source.subsys.u.usb.product) {
>                                              sprintf(productId, "%x", def->hostdevs[i]->source.subsys.u.usb.product);
> -                                            g_pVBoxFuncs->pfnUtf8ToUtf16(productId, &productIdUtf16);
> +                                            data->pFuncs->pfnUtf8ToUtf16(productId, &productIdUtf16);
>                                              filter->vtbl->SetProductId(filter, productIdUtf16);
> -                                            g_pVBoxFuncs->pfnUtf16Free(productIdUtf16);
> +                                            data->pFuncs->pfnUtf16Free(productIdUtf16);
>                                          }
>                                          filter->vtbl->SetActive(filter, 1);
>                                          USBController->vtbl->InsertDeviceFilter(USBController,
> @@ -3185,7 +3211,7 @@ static virDomainPtr vboxDomainDefineXML(virConnectPtr conn, const char *xml) {
>           */
>          rc = machine->vtbl->SaveSettings(machine);
>          data->vboxSession->vtbl->Close(data->vboxSession);
> -        g_pVBoxFuncs->pfnComUnallocMem(mchiid);
> +        data->pFuncs->pfnComUnallocMem(mchiid);
>  
>          dom = virGetDomain(conn, def->name, def->uuid);
>          if(machine) {
> @@ -3231,7 +3257,7 @@ static int vboxDomainUndefine(virDomainPtr dom) {
>              PRUnichar *hddcnameUtf16 = NULL;
>  
>              char *hddcname = strdup("IDE");
> -            g_pVBoxFuncs->pfnUtf8ToUtf16(hddcname, &hddcnameUtf16);
> +            data->pFuncs->pfnUtf8ToUtf16(hddcname, &hddcnameUtf16);
>              VIR_FREE(hddcname);
>  
>              /* Open a Session for the machine */
> @@ -3249,7 +3275,7 @@ static int vboxDomainUndefine(virDomainPtr dom) {
>                  }
>                  data->vboxSession->vtbl->Close(data->vboxSession);
>              }
> -            g_pVBoxFuncs->pfnUtf16Free(hddcnameUtf16);
> +            data->pFuncs->pfnUtf16Free(hddcnameUtf16);
>          }
>  
>          rc = data->vboxObj->vtbl->UnregisterMachine(data->vboxObj, iid, &machine);
> @@ -3356,7 +3382,7 @@ static int vboxDomainAttachDevice(virDomainPtr dom, const char *xml) {
>  
>                                      memset(&dvdemptyuuid, 0, sizeof(dvdemptyuuid));
>  
> -                                    g_pVBoxFuncs->pfnUtf8ToUtf16(dev->data.disk->src, &dvdfileUtf16);
> +                                    data->pFuncs->pfnUtf8ToUtf16(dev->data.disk->src, &dvdfileUtf16);
>  
>                                      data->vboxObj->vtbl->FindDVDImage(data->vboxObj, dvdfileUtf16, &dvdImage);
>                                      if (!dvdImage) {
> @@ -3387,12 +3413,12 @@ static int vboxDomainAttachDevice(virDomainPtr dom, const char *xml) {
>                                                        (unsigned)dvduuid->m3[5], (unsigned)dvduuid->m3[6],
>                                                        (unsigned)dvduuid->m3[7]);
>                                              }
> -                                            g_pVBoxFuncs->pfnComUnallocMem(dvduuid);
> +                                            data->pFuncs->pfnComUnallocMem(dvduuid);
>                                          }
>  
>                                          dvdImage->vtbl->imedium.nsisupports.Release((nsISupports *)dvdImage);
>                                      }
> -                                    g_pVBoxFuncs->pfnUtf16Free(dvdfileUtf16);
> +                                    data->pFuncs->pfnUtf16Free(dvdfileUtf16);
>                                      dvdDrive->vtbl->nsisupports.Release((nsISupports *)dvdDrive);
>                                  }
>                              } else if (dev->data.disk->type == VIR_DOMAIN_DISK_TYPE_BLOCK) {
> @@ -3411,7 +3437,7 @@ static int vboxDomainAttachDevice(virDomainPtr dom, const char *xml) {
>  
>                                          memset(&fdemptyuuid, 0, sizeof(fdemptyuuid));
>  
> -                                        g_pVBoxFuncs->pfnUtf8ToUtf16(dev->data.disk->src, &fdfileUtf16);
> +                                        data->pFuncs->pfnUtf8ToUtf16(dev->data.disk->src, &fdfileUtf16);
>                                          rc = data->vboxObj->vtbl->FindFloppyImage(data->vboxObj, fdfileUtf16,
>                                                                                    &floppyImage);
>  
> @@ -3443,11 +3469,11 @@ static int vboxDomainAttachDevice(virDomainPtr dom, const char *xml) {
>                                                            (unsigned)fduuid->m3[4], (unsigned)fduuid->m3[5],
>                                                            (unsigned)fduuid->m3[6], (unsigned)fduuid->m3[7]);
>                                                  }
> -                                                g_pVBoxFuncs->pfnComUnallocMem(fduuid);
> +                                                data->pFuncs->pfnComUnallocMem(fduuid);
>                                              }
>                                              floppyImage->vtbl->imedium.nsisupports.Release((nsISupports *)floppyImage);
>                                          }
> -                                        g_pVBoxFuncs->pfnUtf16Free(fdfileUtf16);
> +                                        data->pFuncs->pfnUtf16Free(fdfileUtf16);
>                                      }
>                                      floppyDrive->vtbl->nsisupports.Release((nsISupports *)floppyDrive);
>                                  }

> --
> Libvir-list mailing list
> Libvir-list at redhat.com
> https://www.redhat.com/mailman/listinfo/libvir-list


-- 
|: Red Hat, Engineering, London   -o-   http://people.redhat.com/berrange/ :|
|: http://libvirt.org  -o-  http://virt-manager.org  -o-  http://ovirt.org :|
|: http://autobuild.org       -o-         http://search.cpan.org/~danberr/ :|
|: GnuPG: 7D3B9505  -o-  F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505 :|




More information about the libvir-list mailing list