On Mon, May 11, 2009 at 02:19:06PM +0200, Pritesh Kothari wrote:
> You really don't need to keep any data about the
networking driver
> in libvirt(d) itself ?
>
+static int vboxListNetworks(virConnectPtr conn, char **const names, int nnames) {
+ vboxGlobalData *data = conn->privateData;
+ int numActive = 0;
+
+ if (data->vboxObj) {
+ IHost *host = NULL;
+
+ data->vboxObj->vtbl->GetHost(data->vboxObj, &host);
+ if (host) {
+ int i = 0;
+ PRUint32 networkInterfacesSize = 0;
+ IHostNetworkInterface **networkInterfaces = NULL;
+
+ host->vtbl->GetNetworkInterfaces(host, &networkInterfacesSize,
&networkInterfaces);
+
+ for (i = 0; (numActive < nnames) && (i <
networkInterfacesSize); i++) {
+ if (networkInterfaces[i]) {
+ PRUint32 interfaceType = 0;
+
+
networkInterfaces[i]->vtbl->GetInterfaceType(networkInterfaces[i],
&interfaceType);
+
+ if (interfaceType == HostNetworkInterfaceType_HostOnly) {
+ PRUint32 status = HostNetworkInterfaceStatus_Unknown;
+
+
networkInterfaces[i]->vtbl->GetStatus(networkInterfaces[i], &status);
+
+ if (status == HostNetworkInterfaceStatus_Up) {
+ char *nameUtf8 = NULL;
+ PRUnichar *nameUtf16 = NULL;
+
+
networkInterfaces[i]->vtbl->GetName(networkInterfaces[i], &nameUtf16);
+ data->pFuncs->pfnUtf16ToUtf8(nameUtf16,
&nameUtf8);
+
+ DEBUG("nnames[%d]: %s", numActive, nameUtf8);
+ names[numActive++] = strdup(nameUtf8);
+
+ data->pFuncs->pfnUtf8Free(nameUtf8);
+ data->pFuncs->pfnUtf16Free(nameUtf16);
+ }
+ }
+ }
+ }
+
+ for (i = 0; i < networkInterfacesSize; i++) {
+ if (networkInterfaces[i]) {
+ networkInterfaces[i]->vtbl->nsisupports.Release((nsISupports
*) networkInterfaces[i]);
+ }
+ }
+
+ host->vtbl->nsisupports.Release((nsISupports *) host);
+ }
+ }
+
+ return numActive;
+}
There's a strdup() call here that's not checked for failure, and quite a
few more in other functions in the patch.
This reminds me that we really need to make a wrapper for strdup, as we did
for malloc() to validate failure checking at compile time.
Daniel
--
|: 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 :|