On 12/23/2010 01:38 PM, Matthias Bolte wrote: > On Windows IID's are represented as GUID by value, instead of nsID > by reference on non-Windows platforms. > > Patch the vbox_CAPI_v2_2.h header to deal with this difference. > > Rewrite vboxIID abstraction that deals with the different IID > representations. Add support for the GUID representation. Also unify > the four context dependent free functions for vboxIIDs > > vboxIIDUnalloc, vboxIIDFree, vboxIIDUtf8Free, vboxIIDUtf16Free > > into vboxIIDUnalloc that is now safe to be called (even multiple > times) on a vboxIID independent of the source and context of the > vboxIID. Nice - and it cuts down on a lot of #ifdefs in the code base, as an added bonus. > > The new vboxIID is designed to be used as a stack allocated variable. > It has a value member that represents the actual IID value. > +++ b/src/vbox/vbox_CAPI_v2_2.h > @@ -57,8 +57,12 @@ > > # ifdef WIN32 > # define PR_COM_METHOD __stdcall > +# define PR_IID_IN_TYPE GUID > +# define PR_IID_OUT_TYPE GUID * > # else > # define PR_COM_METHOD > +# define PR_IID_IN_TYPE const nsID * > +# define PR_IID_OUT_TYPE nsID ** > # endif How annoying, but this macro looks like the right way to solve it, and the bulk of the patch to this file is mechanical. Also, your (three!) wrappers in vbox_tmpl.c look sane, and everything after the hunk for line 1044 of the original file looks pretty mechanical. I assume you compiled for both Windows and Linux for both 2.2 and 3.0+ versions. > @@ -7051,7 +6951,7 @@ static virNetworkPtr vboxNetworkDefineCreateXML(virConnectPtr conn, const char * > */ > > #if VBOX_API_VERSION == 2002 > - if STREQ(def->name, "vboxnet0") { > + if (STREQ(def->name, "vboxnet0")) { Wow - how long has that been under-parenthesized (I guess since STREQ parenthesizes its results, it still compiled)? > @@ -8032,13 +7914,27 @@ static int vboxStorageVolDelete(virStorageVolPtr vol, > vboxArrayGet(&machineIds, hardDisk, hardDisk->vtbl->GetMachineIds); > #endif /* VBOX_API_VERSION >= 3001 */ > > +#if VBOX_API_VERSION == 2002 && defined WIN32 > + /* VirtualBox 2.2 on Windows represents IIDs as GUIDs and the > + * machineIds array contains direct instances of the GUID struct > + * instead of pointers to the actual struct instances. But there > + * is no 128bit width simple item type for a SafeArray to fit a > + * GUID in. The largest simple type it 64bit width and VirtualBox > + * uses two of this 64bit items to represents one GUID. Therefore, > + * we devide the size of the SafeArray by two, to compensate for > + * this workaround in VirtualBox */ > + machineIds.count /= 2; > +#endif /* VBOX_API_VERSION >= 2002 */ OK, so that hunk wasn't mechanical, like most of them. But overall, it looks good. ACK. -- Eric Blake eblake@xxxxxxxxxx +1-801-349-2682 Libvirt virtualization library http://libvirt.org
Attachment:
signature.asc
Description: OpenPGP digital signature
-- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list