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;
}
}
- 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++;
}
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;
}
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 *
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);
= 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;