diff options
author | Samuel Ortiz <sameo@linux.intel.com> | 2010-10-29 23:43:48 +0200 |
---|---|---|
committer | Samuel Ortiz <sameo@linux.intel.com> | 2010-10-30 00:22:21 +0200 |
commit | e6e46384e7459fbcfc84a89930c3ca66fe0a1c5f (patch) | |
tree | 3837860b358473332cdcf9ad32fab66e98633911 /tools | |
parent | 9d448a9efd3906b31689e7050b1452a7643fe804 (diff) | |
download | connman-e6e46384e7459fbcfc84a89930c3ca66fe0a1c5f.tar.gz connman-e6e46384e7459fbcfc84a89930c3ca66fe0a1c5f.tar.bz2 connman-e6e46384e7459fbcfc84a89930c3ca66fe0a1c5f.zip |
iptables-test: Properly clean tables up
Diffstat (limited to 'tools')
-rw-r--r-- | tools/iptables-test.c | 20 |
1 files changed, 19 insertions, 1 deletions
diff --git a/tools/iptables-test.c b/tools/iptables-test.c index f6114b86..a979cba9 100644 --- a/tools/iptables-test.c +++ b/tools/iptables-test.c @@ -722,7 +722,17 @@ static int connman_iptables_replace(struct connman_iptables *table, static void connman_iptables_cleanup(struct connman_iptables *table) { + GList *list; + struct connman_iptables_entry *entry; + close(table->ipt_sock); + + for (list = table->entries; list; list = list->next) { + entry = list->data; + + g_free(entry->entry); + } + g_free(table->info); g_free(table->blob_entries); g_free(table); @@ -741,7 +751,15 @@ static int connman_iptables_commit(struct connman_iptables *table) static int add_entry(struct ipt_entry *entry, struct connman_iptables *table) { - return connman_add_entry(table, entry, NULL); + struct ipt_entry *new_entry; + + new_entry = g_try_malloc0(entry->next_offset); + if (new_entry == NULL) + return -ENOMEM; + + memcpy(new_entry, entry, entry->next_offset); + + return connman_add_entry(table, new_entry, NULL); } static struct connman_iptables *connman_iptables_init(const char *table_name) |