some cleanup
authorJean-Philippe Orsini <jeanfi@gmail.com>
Sun, 23 Feb 2014 11:02:23 +0000 (11:02 +0000)
committerJean-Philippe Orsini <jeanfi@gmail.com>
Sun, 23 Feb 2014 11:02:23 +0000 (11:02 +0000)
src/lp.c
src/lp.h
src/lp_ws.c
src/ppastats.c

index 47d024e..3219f11 100644 (file)
--- 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;
index 47c861f..1428229 100644 (file)
--- 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
index 8df7153..64db1d7 100644 (file)
@@ -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;
 }
index 5fb0be1..74ed02b 100644 (file)
@@ -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;