diff options
author | ticktock35 <ticktock35@e8e0d7a0-c8d9-11dd-a880-a1081c7ac358> | 2008-12-15 00:18:44 (EST) |
---|---|---|
committer | ticktock35 <ticktock35@e8e0d7a0-c8d9-11dd-a880-a1081c7ac358> | 2008-12-15 00:18:44 (EST) |
commit | f7eccd4bb54039f94312a56b40599d7cb446951e (patch) | |
tree | 4dec467a1f7c7827dfdf306bf22944e51c7a7d3b /libopkg/pkg.c | |
parent | 90299e3df5c5d5eb4ae2189b11e44ec83995ca62 (diff) |
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
Diffstat (limited to 'libopkg/pkg.c')
-rw-r--r-- | libopkg/pkg.c | 53 |
1 files changed, 34 insertions, 19 deletions
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; } |