From f7eccd4bb54039f94312a56b40599d7cb446951e Mon Sep 17 00:00:00 2001 From: ticktock35 Date: Mon, 15 Dec 2008 00:18:44 -0500 Subject: opkg: (leak fixing, day 2) lots and lots of memory leaks fixed git-svn-id: http://opkg.googlecode.com/svn/trunk@115 e8e0d7a0-c8d9-11dd-a880-a1081c7ac358 --- (limited to 'libopkg/pkg.c') diff --git a/libopkg/pkg.c b/libopkg/pkg.c index d9bae89..6793c82 100644 --- a/libopkg/pkg.c +++ b/libopkg/pkg.c @@ -142,6 +142,19 @@ int pkg_init(pkg_t *pkg) return 0; } +void compound_depend_deinit (compound_depend_t *depends) +{ + int i; + for (i = 0; i < depends->possibility_count; i++) + { + depend_t *d; + d = depends->possibilities[i]; + free (d->version); + free (d); + } + free (depends->possibilities); +} + void pkg_deinit(pkg_t *pkg) { int i; @@ -171,35 +184,39 @@ void pkg_deinit(pkg_t *pkg) pkg->state_flag = SF_OK; pkg->state_status = SS_NOT_INSTALLED; + //for (i = 0; i < pkg->replaces_count; i++) + free (pkg->replaces); + pkg->replaces = NULL; + for (i = 0; i < pkg->depends_count; i++) free (pkg->depends_str[i]); free(pkg->depends_str); pkg->depends_str = NULL; - pkg->depends_count = 0; for (i = 0; i < pkg->provides_count; i++) free (pkg->provides_str[i]); free(pkg->provides_str); pkg->provides_str = NULL; - pkg->provides_count = 0; for (i = 0; i < pkg->conflicts_count; i++) free (pkg->conflicts_str[i]); free(pkg->conflicts_str); pkg->conflicts_str = NULL; - pkg->conflicts_count = 0; for (i = 0; i < pkg->replaces_count; i++) free (pkg->replaces_str[i]); free(pkg->replaces_str); pkg->replaces_str = NULL; - pkg->replaces_count = 0; for (i = 0; i < pkg->recommends_count; i++) free (pkg->recommends_str[i]); free(pkg->recommends_str); pkg->recommends_str = NULL; - pkg->recommends_count = 0; + + for (i = 0; i < pkg->suggests_count; i++) + free (pkg->suggests_str[i]); + free(pkg->suggests_str); + pkg->suggests_str = NULL; if (pkg->depends) { @@ -207,23 +224,19 @@ void pkg_deinit(pkg_t *pkg) int x; for (x = 0; x < count; x++) - { - compound_depend_t *depends; - depends = &pkg->depends[x]; - - for (i = 0; i < depends->possibility_count; i++) - { - depend_t *d; - d = depends->possibilities[i]; - free (d->version); - free (d); - } - free (depends->possibilities); - } + compound_depend_deinit (&pkg->depends[x]); free (pkg->depends); } + + if (pkg->conflicts) + { + int x; + for (x = 0; x < pkg->conflicts_count; x++) + compound_depend_deinit (&pkg->conflicts[x]); + free (pkg->conflicts); + } + free (pkg->provides); - free (pkg->conflicts); pkg->pre_depends_count = 0; free(pkg->pre_depends_str); @@ -1398,6 +1411,7 @@ int pkg_free_installed_files(pkg_t *pkg) } str_list_deinit(pkg->installed_files); + free (pkg->installed_files); } pkg->installed_files = NULL; @@ -1800,5 +1814,6 @@ int pkg_write_changed_filelists(opkg_conf_t *conf) opkg_message(conf, OPKG_NOTICE, "pkg_write_filelist pkg=%s returned %d\n", pkg->name, err); } } + pkg_vec_free (installed_pkgs); return 0; } -- cgit v0.9.1