New functions port_array_destroy(), port_array_clear().
authorBen Pfaff <blp@nicira.com>
Mon, 29 Dec 2008 21:06:56 +0000 (13:06 -0800)
committerBen Pfaff <blp@nicira.com>
Mon, 29 Dec 2008 21:09:34 +0000 (13:09 -0800)
lib/port-array.c
lib/port-array.h

index 31e9a647895b08ad11ed815f89cc0a39f67bc5ce..5d3eb8c28ddbb64f210a25246b65d089cc946d2d 100644 (file)
@@ -33,6 +33,7 @@
 
 #include <config.h>
 #include "port-array.h"
+#include <stdlib.h>
 
 static struct port_array_l2 l2_sentinel;
 static struct port_array_l3 l3_sentinel;
@@ -54,6 +55,38 @@ port_array_init(struct port_array *pa)
     }
 }
 
+/* Frees all the memory allocated for 'pa'.  It is the client's responsibility
+ * to free memory that 'pa' elements point to. */
+void
+port_array_destroy(struct port_array *pa)
+{
+    unsigned int l1_idx;
+
+    for (l1_idx = 0; l1_idx < PORT_ARRAY_L1_SIZE; l1_idx++) {
+        struct port_array_l2 *l2 = pa->l1[l1_idx];
+
+        if (l2 != &l2_sentinel) {
+            unsigned int l2_idx;
+
+            for (l2_idx = 0; l2_idx < PORT_ARRAY_L2_SIZE; l2_idx++) {
+                struct port_array_l3 *l3 = l2->l2[l2_idx];
+                if (l3 != &l3_sentinel) {
+                    free(l3);
+                }
+            }
+            free(l2);
+        }
+    }
+}
+
+/* Clears all elements of 'pa' to null pointers. */
+void
+port_array_clear(struct port_array *pa)
+{
+    port_array_destroy(pa);
+    port_array_init(pa);
+}
+
 /* Sets 'pa' element numbered 'idx' to 'p'. */
 void
 port_array_set(struct port_array *pa, uint16_t idx, void *p)
index 478a073c824dd44ea426ce6ec4d8633f0e23e0b3..01b3c1009063f82128e128d0ec5d4e7c91eee29b 100644 (file)
@@ -99,6 +99,7 @@ port_array_get(const struct port_array *pa, uint16_t idx)
 
 void port_array_init(struct port_array *);
 void port_array_destroy(struct port_array *);
+void port_array_clear(struct port_array *);
 void port_array_set(struct port_array *, uint16_t idx, void *);
 void *port_array_first(const struct port_array *, unsigned int *);
 void *port_array_next(const struct port_array *, unsigned int *);