- struct ppa_stats *ppastats;
- struct binary_package_publishing_history **history;
- struct binary_package_publishing_history **h_cur;
- struct binary_package_publishing_history *h;
- char *ppa_url, *package_name, *package_version;
- struct package_stats *package;
+ struct distro_stats **pkg_distros, *pkg_distro, **tmp;
+ struct daily_download_total **tmp_ddts;
+
+ pkg_distros = pkg->distros;
+ pkg_distro = NULL;
+
+ if (pkg_distros)
+ while (*pkg_distros) {
+ if (!strcmp((*pkg_distros)->name, distro_name)) {
+ pkg_distro = *pkg_distros;
+ break;
+ }
+
+ pkg_distros++;
+ }
+
+ if (!pkg_distro) {
+ pkg_distro = distro_stats_new(distro_name);
+ tmp = (struct distro_stats **)list_add((void **)pkg->distros,
+ (void *)pkg_distro);
+ if (pkg->distros != tmp)
+ free(pkg->distros);
+ pkg->distros = tmp;
+ }
+
+ pkg_distro->download_count += distro_count;
+
+ 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;
+}
+
+static struct ppa_stats *ppa_stats_new(const char *owner, const char *ppa_name)
+{
+ struct ppa_stats *ppa;
+
+ ppa = malloc(sizeof(struct ppa_stats));
+ ppa->name = strdup(ppa_name);
+ ppa->owner = strdup(owner);
+ ppa->packages = NULL;
+ ppa->daily_download_totals = NULL;
+ ppa->download_count = 0;
+
+ return ppa;
+}
+
+struct ppa_stats *
+create_ppa_stats(const char *owner,
+ const char *ppa_name,
+ const char *package_status,
+ int ws_size)
+{
+ struct ppa_stats *ppa;
+ struct bpph **history, **h_cur, *h;
+ char *ppa_url, *pkg_name, *pkg_version;
+ struct package_stats *pkg;