Fix I/O handle array allocator to work for devices past the first
authorAdam Jackson <ajax@redhat.com>
Mon, 14 Dec 2009 21:26:31 +0000 (16:26 -0500)
committerAdam Jackson <ajax@redhat.com>
Mon, 14 Dec 2009 21:32:15 +0000 (16:32 -0500)
Signed-off-by: Adam Jackson <ajax@redhat.com>
src/common_io.c

index b4aa360..58628b4 100644 (file)
 #include "pciaccess.h"
 #include "pciaccess_private.h"
 
-static struct pci_io_handle **ios;
+static struct pci_io_handle *ios;
 static unsigned int num_ios;
 
 static struct pci_io_handle *
 new_io_handle(void)
 {
-    struct pci_io_handle **new;
+    struct pci_io_handle *new;
 
     new = realloc(ios, sizeof(struct pci_io_handle) * (num_ios + 1));
     if (!new)
@@ -43,13 +43,13 @@ new_io_handle(void)
     ios = new;
     num_ios++;
 
-    return ios[num_ios - 1];
+    return ios + num_ios - 1;
 }
 
 static void
 delete_io_handle(struct pci_io_handle *handle)
 {
-    struct pci_io_handle **new;
+    struct pci_io_handle *new;
     int i = 0;
 
     if (!handle || !num_ios || (void *)handle < (void *)ios ||
@@ -57,7 +57,7 @@ delete_io_handle(struct pci_io_handle *handle)
         return;
 
     for (i = 0; i < num_ios; i++) {
-        if (ios[i] == handle) {
+        if (ios + i == handle) {
             memmove(&ios[i], &ios[i+1], sizeof(struct pci_io_handle) *
                                         (num_ios - i - 1));
             break;