From 90299e3df5c5d5eb4ae2189b11e44ec83995ca62 Mon Sep 17 00:00:00 2001 From: ticktock35 Date: Mon, 15 Dec 2008 00:18:11 -0500 Subject: opkg: (leak fixing, day 1) lots and lots of memory leaks fixed git-svn-id: http://opkg.googlecode.com/svn/trunk@114 e8e0d7a0-c8d9-11dd-a880-a1081c7ac358 --- (limited to 'libopkg/pkg.c') diff --git a/libopkg/pkg.c b/libopkg/pkg.c index 3038b4b..d9bae89 100644 --- a/libopkg/pkg.c +++ b/libopkg/pkg.c @@ -144,6 +144,8 @@ int pkg_init(pkg_t *pkg) void pkg_deinit(pkg_t *pkg) { + int i; + free(pkg->name); pkg->name = NULL; pkg->epoch = 0; @@ -168,18 +170,65 @@ void pkg_deinit(pkg_t *pkg) pkg->state_want = SW_UNKNOWN; pkg->state_flag = SF_OK; pkg->state_status = SS_NOT_INSTALLED; + + 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->depends_count = 0; - /* XXX: CLEANUP: MEMORY_LEAK: how to free up pkg->depends ? */ + 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; + + if (pkg->depends) + { + int count = pkg->pre_depends_count + pkg->depends_count + pkg->recommends_count + pkg->suggests_count; + 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); + } + free (pkg->depends); + } + free (pkg->provides); + free (pkg->conflicts); + pkg->pre_depends_count = 0; free(pkg->pre_depends_str); pkg->pre_depends_str = NULL; pkg->provides_count = 0; - /* XXX: CLEANUP: MEMORY_LEAK: how to free up pkg->provides ? */ - /* XXX: CLEANUP: MEMORY_LEAK: how to free up pkg->suggests ? */ free(pkg->filename); pkg->filename = NULL; free(pkg->local_filename); -- cgit v0.9.1