From 7322824fadde9e95f79c630b70b25a8a660ab503 Mon Sep 17 00:00:00 2001 From: Jean-Philippe Orsini Date: Sun, 16 Feb 2014 23:16:09 +0000 Subject: [PATCH] do not free list in the fct --- src/list.c | 40 +++++++++++++++++++--------------------- src/lp.c | 8 ++++++-- src/ppastats.c | 44 +++++++++++++++++++++++++++++--------------- 3 files changed, 54 insertions(+), 38 deletions(-) diff --git a/src/list.c b/src/list.c index e67078a..21daca6 100644 --- a/src/list.c +++ b/src/list.c @@ -1,26 +1,26 @@ /* - * Copyright (C) 2011-2014 jeanfi@gmail.com - * - * 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; either version 2 of the - * License, or (at your option) any later version. - * - * 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 - */ + Copyright (C) 2011-2014 jeanfi@gmail.com + + 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; either version 2 of the + License, or (at your option) any later version. + + 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 "list.h" +#include int list_length(void **list) { @@ -47,10 +47,8 @@ void **list_add(void **list, void *new_item) new_list = malloc(sizeof(void *)*(n+2)); - if (n) { + if (n) memcpy(new_list, list, sizeof(void *)*n); - free(list); - } new_list[n] = new_item; new_list[n+1] = NULL; diff --git a/src/lp.c b/src/lp.c index e738a6c..11866d7 100644 --- a/src/lp.c +++ b/src/lp.c @@ -175,7 +175,7 @@ void daily_download_total_list_free(struct daily_download_total **list) struct bpph **bpph_list_add(struct bpph **list, struct bpph *new) { - struct bpph **cur, *bpph; + struct bpph **cur, *bpph, **result; if (list) for (cur = list; *cur; cur++) { @@ -185,7 +185,11 @@ struct bpph **bpph_list_add(struct bpph **list, struct bpph *new) return list; } - return (struct bpph **)list_add((void **)list, new); + result = (struct bpph **)list_add((void **)list, new); + + free(list); + + return result; } struct bpph **bpph_list_append_list(struct bpph **list1, struct bpph **list2) diff --git a/src/ppastats.c b/src/ppastats.c index 7d67bc4..56293d5 100644 --- a/src/ppastats.c +++ b/src/ppastats.c @@ -33,7 +33,7 @@ static struct package_stats *get_package_stats(struct ppa_stats *stats, const char *name) { - struct package_stats *p, **p_cur; + struct package_stats *p, **p_cur, **tmp; p_cur = stats->packages; while (p_cur && *p_cur) { @@ -52,8 +52,10 @@ static struct package_stats *get_package_stats(struct ppa_stats *stats, p->daily_download_totals = NULL; p->distros = NULL; - stats->packages = (struct package_stats **)list_add + tmp = (struct package_stats **)list_add ((void **)stats->packages, p); + free(stats->packages); + stats->packages = tmp; return p; } @@ -61,7 +63,7 @@ static struct package_stats *get_package_stats(struct ppa_stats *stats, static struct version_stats *get_version_stats(struct package_stats *package, const char *version) { - struct version_stats *v, **cur; + struct version_stats *v, **cur, **tmp; cur = package->versions; while (cur && *cur) { @@ -79,9 +81,10 @@ static struct version_stats *get_version_stats(struct package_stats *package, v->download_count = 0; v->daily_download_totals = NULL; - package->versions - = (struct version_stats **)list_add((void **)package->versions, - v); + tmp = (struct version_stats **)list_add((void **)package->versions, + v); + free((void **)package->versions); + package->versions = tmp; return v; } @@ -104,6 +107,7 @@ static struct distro_stats *get_distro_stats(struct version_stats *version, { struct distro_stats **cur = version->distros; struct distro_stats *d; + struct distro_stats **tmp; while (cur && *cur) { d = *cur; @@ -116,9 +120,11 @@ static struct distro_stats *get_distro_stats(struct version_stats *version, d = distro_stats_new(name); - version->distros - = (struct distro_stats **)list_add((void **)version->distros, + + tmp = (struct distro_stats **)list_add((void **)version->distros, d); + free(version->distros); + version->distros = tmp; return d; } @@ -128,6 +134,7 @@ static struct arch_stats *get_arch_stats(struct distro_stats *distro, { struct arch_stats **cur = distro->archs; struct arch_stats *a; + struct arch_stats **tmp; while (cur && *cur) { a = *cur; @@ -142,9 +149,10 @@ static struct arch_stats *get_arch_stats(struct distro_stats *distro, a->name = strdup(name); a->download_count = 0; - distro->archs - = (struct arch_stats **)list_add((void **)distro->archs, - a); + tmp = (struct arch_stats **)list_add((void **)distro->archs, + a); + free((void **)distro->archs); + distro->archs = tmp; return a; } @@ -153,7 +161,7 @@ static struct arch_stats *get_arch_stats(struct distro_stats *distro, static struct daily_download_total **add_total (struct daily_download_total **totals, struct daily_download_total *total) { - struct daily_download_total **cur; + struct daily_download_total **cur, **result; struct daily_download_total *item; if (totals) { @@ -175,8 +183,12 @@ static struct daily_download_total **add_total item = malloc(sizeof(struct daily_download_total)); memcpy(item, total, sizeof(struct daily_download_total)); - return (struct daily_download_total **) + result = (struct daily_download_total **) list_add((void **)totals, (void *)item); + + free(totals); + + return result; } struct daily_download_total **add_totals @@ -202,7 +214,7 @@ pkg_add_distro(struct package_stats *pkg, int distro_count, struct daily_download_total **ddts) { - struct distro_stats **pkg_distros, *pkg_distro; + struct distro_stats **pkg_distros, *pkg_distro, **tmp; pkg_distros = pkg->distros; pkg_distro = NULL; @@ -219,9 +231,11 @@ pkg_add_distro(struct package_stats *pkg, if (!pkg_distro) { pkg_distro = distro_stats_new(distro_name); - pkg->distros + tmp = (struct distro_stats **) list_add((void **)pkg->distros, (void *)pkg_distro); + free(pkg->distros); + pkg->distros = tmp; } pkg_distro->download_count += distro_count; -- 2.7.4