X-Git-Url: https://git.sommitrealweird.co.uk/onak.git/blobdiff_plain/4b8483ae278577a3adc8d84da81d77019704466f..HEAD:/mem.c diff --git a/mem.c b/mem.c index 1b9627c..83c6384 100644 --- a/mem.c +++ b/mem.c @@ -1,18 +1,30 @@ /* * mem.c - Routines to cleanup memory after use. * - * Jonathan McDowell + * Copyright 2002-2004,2007 Jonathan McDowell * - * Copyright 2002 Project Purple + * This program is free software: you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the Free + * Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along with + * this program; if not, write to the Free Software Foundation, Inc., 51 + * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ -#include #include #include +#include #include "keystructs.h" #include "ll.h" #include "mem.h" +#include "stats.h" /** * packet_dup - duplicate an OpenPGP packet. @@ -26,7 +38,8 @@ struct openpgp_packet *packet_dup(struct openpgp_packet *packet) { struct openpgp_packet *newpacket = NULL; - assert(packet != NULL); + if (packet == NULL) + return NULL; newpacket = malloc(sizeof (struct openpgp_packet)); if (newpacket != NULL) { @@ -58,9 +71,6 @@ void packet_list_add(struct openpgp_packet_list **list, struct openpgp_packet_list **list_end, struct openpgp_packet_list *packet_list) { - assert(list != NULL); - assert(list_end != NULL); - for (; packet_list != NULL; packet_list = packet_list->next) { ADD_PACKET_TO_LIST((*list_end), packet_dup(packet_list->packet)); @@ -80,8 +90,6 @@ void packet_list_add(struct openpgp_packet_list **list, * including the data part. */ void free_packet(struct openpgp_packet *packet) { - assert(packet != NULL); - if (packet->data != NULL) { free(packet->data); packet->data = NULL; @@ -99,8 +107,6 @@ void free_packet(struct openpgp_packet *packet) { void free_packet_list(struct openpgp_packet_list *packet_list) { struct openpgp_packet_list *nextpacket = NULL; - assert(packet_list != NULL); - while (packet_list != NULL) { nextpacket = packet_list->next; if (packet_list->packet != NULL) { @@ -122,8 +128,6 @@ void free_signedpacket_list( struct openpgp_signedpacket_list *signedpacket_list) { struct openpgp_signedpacket_list *nextpacket = NULL; - assert(signedpacket_list != NULL); - while (signedpacket_list != NULL) { nextpacket = signedpacket_list->next; if (signedpacket_list->packet != NULL) { @@ -147,17 +151,15 @@ void free_signedpacket_list( void free_publickey(struct openpgp_publickey *key) { struct openpgp_publickey *nextkey = NULL; - assert(key != NULL); - while (key != NULL) { nextkey = key->next; if (key->publickey != NULL) { free_packet(key->publickey); key->publickey = NULL; } - if (key->revocations != NULL) { - free_packet_list(key->revocations); - key->revocations = NULL; + if (key->sigs != NULL) { + free_packet_list(key->sigs); + key->sigs = NULL; } if (key->uids != NULL) { free_signedpacket_list(key->uids); @@ -171,3 +173,26 @@ void free_publickey(struct openpgp_publickey *key) { key = nextkey; } } + +/** + * free_statskey - free an stats key structure. + * @key: The key to free. + * + * Takes a stats key and frees the memory used by it and the linked list + * of sigs under it. Doesn't recurse into the list as it's assumed all the + * objects referenced also exist in the hash. + */ +void free_statskey(struct stats_key *key) +{ + if (key != NULL) { + if (key->sigs != NULL) { + llfree(key->sigs, NULL); + key->sigs = NULL; + } + if (key->signs != NULL) { + llfree(key->signs, NULL); + key->signs = NULL; + } + free(key); + } +}