don't leak a file descriptor on failed pciGetDevice call

* src/pci.c (pciIterDevices): Always close dir handle.
This commit is contained in:
Jim Meyering 2009-03-03 11:25:35 +00:00
parent 260082321c
commit 8343dcb893
2 changed files with 13 additions and 4 deletions

View File

@ -1,3 +1,8 @@
Tue Mar 3 12:22:51 +0100 2009 Jim Meyering <meyering@redhat.com>
don't leak a file descriptor on failed pciGetDevice call
* src/pci.c (pciIterDevices): Always close dir handle.
Tue Mar 3 12:22:51 +0100 2009 Jim Meyering <meyering@redhat.com>
update .gitignore and .hgignore files

View File

@ -233,6 +233,7 @@ pciIterDevices(virConnectPtr conn,
{
DIR *dir;
struct dirent *entry;
int ret = 0;
*matched = NULL;
@ -252,14 +253,17 @@ pciIterDevices(virConnectPtr conn,
if (entry->d_name[0] == '.')
continue;
if (sscanf(entry->d_name, "%x:%x:%x.%x", &domain, &bus, &slot, &function) < 4) {
if (sscanf(entry->d_name, "%x:%x:%x.%x",
&domain, &bus, &slot, &function) < 4) {
VIR_WARN("Unusual entry in " PCI_SYSFS "devices: %s", entry->d_name);
continue;
}
try = pciGetDevice(conn, domain, bus, slot, function);
if (!try)
return -1;
if (!try) {
ret = -1;
break;
}
if (predicate(try, dev)) {
VIR_DEBUG("%s %s: iter matched on %s", dev->id, dev->name, try->name);
@ -269,7 +273,7 @@ pciIterDevices(virConnectPtr conn,
pciFreeDevice(conn, try);
}
closedir(dir);
return 0;
return ret;
}
static uint8_t