/** * Initialize a package array from the package database. * * @param a The array to initialize. */ void pkg_array_init_from_db(struct pkg_array *a) { struct pkgiterator *it; struct pkginfo *pkg; int i; a->n_pkgs = pkg_db_count_pkg(); a->pkgs = m_malloc(sizeof(a->pkgs[0]) * a->n_pkgs); it = pkg_db_iter_new(); for (i = 0; (pkg = pkg_db_iter_next_pkg(it)); i++) a->pkgs[i] = pkg; pkg_db_iter_free(it); assert(i == a->n_pkgs); }
void ensure_allinstfiles_available(void) { struct pkg_array array; struct pkginfo *pkg; struct progress progress; int i; if (allpackagesdone) return; if (saidread<2) { int max = pkg_db_count_pkg(); saidread=1; progress_init(&progress, _("(Reading database ... "), max); } pkg_array_init_from_db(&array); pkg_files_optimize_load(&array); for (i = 0; i < array.n_pkgs; i++) { pkg = array.pkgs[i]; ensure_packagefiles_available(pkg); if (saidread == 1) progress_step(&progress); } pkg_array_destroy(&array); allpackagesdone = true; if (saidread==1) { progress_done(&progress); printf(P_("%d file or directory currently installed.)\n", "%d files and directories currently installed.)\n", nfiles), nfiles); saidread=2; } }