release 0.0.3
[ppastats.git] / src / ppastats.c
index 70f6c6f..1fa0e81 100644 (file)
@@ -100,7 +100,6 @@ static struct distro_stats *get_distro_stats(struct version_stats *version,
        d->name = strdup(name);
        d->archs = NULL;
        d->download_count = 0;
-       d->daily_download_totals = NULL;
 
        version->distros
                = (struct distro_stats **)list_add((void **)version->distros,
@@ -126,7 +125,6 @@ static struct arch_stats *get_arch_stats(struct distro_stats *distro,
 
        a = malloc(sizeof(struct arch_stats));
        a->name = strdup(name);
-       a->daily_download_totals = NULL;
        a->download_count = 0;
 
        distro->archs
@@ -137,25 +135,26 @@ 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)
+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 *item;
 
-       cur = totals;
-       while (*cur) {
-               item = *cur;
+       if (totals) {
+               cur = totals;
+               while (*cur) {
+                       item = *cur;
+
+                       if (item->date.tm_year == total->date.tm_year &&
+                           item->date.tm_mon == total->date.tm_mon &&
+                           item->date.tm_mday == total->date.tm_mday) {
+                               item->count += total->count;
+                               return totals;
+                       }
 
-               if (item->date.tm_year == total->date.tm_year &&
-                   item->date.tm_mon == total->date.tm_mon &&
-                   item->date.tm_mday == total->date.tm_mday) {
-                       item->count += total->count;
-                       return totals;
+                       cur++;
                }
-               
-               cur++;
        }
 
        item = malloc(sizeof(struct daily_download_total));
@@ -165,16 +164,12 @@ add_total(struct daily_download_total **totals,
                list_add((void **)totals, (void *)item);
 }
 
-struct daily_download_total **
-add_totals(struct daily_download_total **total1,
-          struct daily_download_total **total2)
+struct daily_download_total **add_totals
+(struct daily_download_total **total1, struct daily_download_total **total2)
 {
        struct daily_download_total **cur;
        struct daily_download_total **result;
 
-       if (!total1)
-               return total2;
-
        result = total1;
        cur = total2;
        while (*cur) {
@@ -249,12 +244,20 @@ create_ppa_stats(const char *owner,
                ppastats->download_count += count;
 
                totals = get_daily_download_totals(h->self_link);
-               ppastats->daily_download_totals 
+
+               ppastats->daily_download_totals
                        = add_totals(ppastats->daily_download_totals,
                                     totals);
 
-               if (ppastats->daily_download_totals != totals)
-                       daily_download_total_list_free(totals);
+               package->daily_download_totals
+                       = add_totals(package->daily_download_totals,
+                                    totals);
+
+               version->daily_download_totals
+                       = add_totals(version->daily_download_totals,
+                                    totals);
+
+               daily_download_total_list_free(totals);
 
                h_cur++;
        }
@@ -337,5 +340,7 @@ void ppa_stats_free(struct ppa_stats *ppastats)
        free(ppastats->owner);
        free(ppastats->name);
 
+       daily_download_total_list_free(ppastats->daily_download_totals);
+
        free(ppastats);
 }