From b1db548b56f7b188d70efff5eb4c73797727c862 Mon Sep 17 00:00:00 2001 From: Jean-Philippe Orsini Date: Sun, 23 Feb 2014 11:02:23 +0000 Subject: [PATCH] some cleanup --- src/lp.c | 4 ++-- src/lp.h | 3 +++ src/lp_ws.c | 4 ++-- src/ppastats.c | 46 +++++++++++++++++++++++++++------------------- 4 files changed, 34 insertions(+), 23 deletions(-) diff --git a/src/lp.c b/src/lp.c index 47d024e..3219f11 100644 --- a/src/lp.c +++ b/src/lp.c @@ -237,7 +237,7 @@ int ddts_length(struct daily_download_total **ddts) return n; } -static struct daily_download_total *ddt_clone(struct daily_download_total *ddt) +struct daily_download_total *ddt_clone(struct daily_download_total *ddt) { struct daily_download_total *new; @@ -249,7 +249,7 @@ static struct daily_download_total *ddt_clone(struct daily_download_total *ddt) return new; } -static struct daily_download_total ** +struct daily_download_total ** ddts_clone(struct daily_download_total **ddts) { int n, i; diff --git a/src/lp.h b/src/lp.h index 47c861f..1428229 100644 --- a/src/lp.h +++ b/src/lp.h @@ -99,4 +99,7 @@ ddts_merge(struct daily_download_total **, int ddts_get_count(struct daily_download_total **); +struct daily_download_total *ddt_clone(struct daily_download_total *); +struct daily_download_total **ddts_clone(struct daily_download_total **); + #endif diff --git a/src/lp_ws.c b/src/lp_ws.c index 8df7153..64db1d7 100644 --- a/src/lp_ws.c +++ b/src/lp_ws.c @@ -430,8 +430,8 @@ struct daily_download_total **get_daily_download_totals(const char *binary_url) free(key); if (ddts != cached_ddts) - free(cached_ddts); - free(retrieved_ddts); + daily_download_total_list_free(cached_ddts); + daily_download_total_list_free(retrieved_ddts); return ddts; } diff --git a/src/ppastats.c b/src/ppastats.c index 5fb0be1..74ed02b 100644 --- a/src/ppastats.c +++ b/src/ppastats.c @@ -161,8 +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, **result; - struct daily_download_total *item; + struct daily_download_total **cur, **result, *item; if (totals) { cur = totals; @@ -180,26 +179,24 @@ static struct daily_download_total **add_total } } - item = malloc(sizeof(struct daily_download_total)); - memcpy(item, total, sizeof(struct daily_download_total)); - result = (struct daily_download_total **)list_add((void **)totals, - (void *)item); - - free(totals); + ddt_clone(total)); return result; } -struct daily_download_total **add_totals +static struct daily_download_total **add_totals (struct daily_download_total **total1, struct daily_download_total **total2) { - struct daily_download_total **cur, **result; + struct daily_download_total **cur, **result, **tmp; result = total1; cur = total2; while (*cur) { - result = add_total(result, *cur); + tmp = add_total(result, *cur); + if (result != total1 && result != tmp) + free(result); + result = tmp; cur++; } @@ -213,6 +210,7 @@ pkg_add_distro(struct package_stats *pkg, struct daily_download_total **ddts) { struct distro_stats **pkg_distros, *pkg_distro, **tmp; + struct daily_download_total **tmp_ddts; pkg_distros = pkg->distros; pkg_distro = NULL; @@ -236,7 +234,11 @@ pkg_add_distro(struct package_stats *pkg, } pkg_distro->download_count += distro_count; - pkg_distro->ddts = add_totals(pkg_distro->ddts, ddts); + + tmp_ddts = add_totals(pkg_distro->ddts, ddts); + if (pkg_distro->ddts && pkg_distro->ddts != tmp_ddts) + free(pkg_distro->ddts); + pkg_distro->ddts = tmp_ddts; } struct ppa_stats * @@ -255,7 +257,7 @@ create_ppa_stats(const char *owner, struct distro_stats *distro; struct arch_stats *arch; int count; - struct daily_download_total **totals; + struct daily_download_total **totals, **tmp; ppa_url = get_archive_url(owner, ppa_name); history = get_bpph_list(ppa_url, package_status, ws_size); @@ -290,18 +292,24 @@ create_ppa_stats(const char *owner, = get_distro_series(arch_series->distroseries_link); ppa->download_count += count; - ppa->daily_download_totals - = add_totals(ppa->daily_download_totals, totals); + tmp = add_totals(ppa->daily_download_totals, totals); + if (ppa->daily_download_totals != tmp) + free(ppa->daily_download_totals); + ppa->daily_download_totals = tmp; pkg = get_package_stats(ppa, pkg_name); pkg->download_count += count; - pkg->daily_download_totals - = add_totals(pkg->daily_download_totals, totals); + tmp = add_totals(pkg->daily_download_totals, totals); + if (pkg->daily_download_totals != tmp) + free(pkg->daily_download_totals); + pkg->daily_download_totals = tmp; version = get_version_stats(pkg, pkg_version); version->download_count += count; - version->daily_download_totals - = add_totals(version->daily_download_totals, totals); + tmp = add_totals(version->daily_download_totals, totals); + if (version->daily_download_totals != tmp) + free(version->daily_download_totals); + version->daily_download_totals = tmp; distro = get_distro_stats(version, distro_series->name); distro->download_count += count; -- 2.7.4