[Libvirt-cim] [PATCH 3/3] ACL: Use linked list helper for filter refs
Eduardo Lima (Etrunko)
eblima at linux.vnet.ibm.com
Tue Jan 31 21:34:55 UTC 2012
On 01/31/2012 07:06 PM, Eduardo Lima (Etrunko) wrote:
> From: "Eduardo Lima (Etrunko)" <eblima at br.ibm.com>
>
> Signed-off-by: Eduardo Lima (Etrunko) <eblima at br.ibm.com>
> ---
> libxkutil/acl_parsing.c | 58 +++++++++-------------------------
> libxkutil/acl_parsing.h | 5 ++-
> libxkutil/xmlgen.c | 30 +++++++++++++----
> src/Virt_NestedFilterList.c | 73 +++++++++++++++++++++++-------------------
> 4 files changed, 81 insertions(+), 85 deletions(-)
>
> diff --git a/libxkutil/acl_parsing.c b/libxkutil/acl_parsing.c
> index 9c4b4b2..f7efcfc 100644
> --- a/libxkutil/acl_parsing.c
> +++ b/libxkutil/acl_parsing.c
> @@ -141,11 +141,7 @@ void cleanup_filter(struct acl_filter *filter)
> free(filter->rules);
> filter->rule_ct = 0;
>
> - for (i = 0; i < filter->ref_ct; i++)
> - free(filter->refs[i]);
> -
> - free(filter->refs);
> - filter->ref_ct = 0;
> + list_free(filter->refs);
> }
>
> void cleanup_filters(struct acl_filter **filters, int count)
> @@ -610,58 +606,34 @@ int append_filter_rule(struct acl_filter *filter, struct acl_rule *rule)
> return 1;
> }
>
> -int append_filter_ref(struct acl_filter *filter, char *name)
> -{
> - int i;
> - char **old_refs = NULL;
> -
> - if ((filter == NULL) || (name == NULL))
> - return 0;
> -
> - for (i = 0; i < filter->ref_ct; i++)
> - if (STREQC(filter->refs[i], name))
> - return 0; /* already exists */
> -
> - old_refs = filter->refs;
>
> - filter->refs = malloc((filter->ref_ct + 1) * sizeof(char *));
> +static int filter_ref_cmp(void *list_data, void *user_data)
> +{
> + return strcmp((const char *)list_data, (const char *) user_data);
> +}
>
> - if (filter->refs == NULL) {
> - CU_DEBUG("Failed to allocate memory for new ref");
> - filter->refs = old_refs;
> +int append_filter_ref(struct acl_filter *filter, char *name)
> +{
> + if (filter == NULL || name == NULL)
> return 0;
> - }
>
> - memcpy(filter->refs, old_refs, filter->ref_ct * sizeof(char *));
> + if (filter->refs == NULL)
> + filter->refs = list_new(free, filter_ref_cmp);
>
> - filter->refs[filter->ref_ct] = name;
> - filter->ref_ct++;
> + if (list_find(filter->refs, name) != NULL)
> + return 0; /* already exists */
>
Here we leak the name var.
--
Eduardo de Barros Lima
Software Engineer, Open Virtualization
Linux Technology Center - IBM/Brazil
eblima at br.ibm.com
More information about the Libvirt-cim
mailing list