From 235416b48f5c624b10dc1eb6046fe75156f162c5 Mon Sep 17 00:00:00 2001 From: Juan RP Date: Sun, 18 Nov 2012 04:06:13 +0100 Subject: [PATCH] pkg_metadir: redo previous without memleaks. --- lib/package_metadir.c | 46 ++++++++++++++++++------------------------- 1 file changed, 19 insertions(+), 27 deletions(-) diff --git a/lib/package_metadir.c b/lib/package_metadir.c index 566d5428..d0c545cd 100644 --- a/lib/package_metadir.c +++ b/lib/package_metadir.c @@ -59,36 +59,18 @@ metadir_get(const char *name) struct pkgmeta *pm; HASH_FIND_STR(pkgmetas, __UNCONST(name), pm); - if (pm != NULL && pm->d != NULL) - return prop_dictionary_copy(pm->d); + if (pm != NULL && + (prop_object_type(pm->d) == PROP_TYPE_DICTIONARY)) + return pm->d; return NULL; } -static void -metadir_add(const char *name, prop_dictionary_t d) -{ - struct pkgmeta *pm; - - assert(prop_object_type(d) == PROP_TYPE_DICTIONARY); - - /* Add pkg plist to hash map */ - pm = malloc(sizeof(*pm)); - assert(pm); - pm->name = name; - pm->d = d; - HASH_ADD_KEYPTR(hh, - pkgmetas, - __UNCONST(name), - strlen(__UNCONST(name)), - pm); - -} - prop_dictionary_t xbps_metadir_get_pkgd(struct xbps_handle *xhp, const char *name) { - prop_dictionary_t pkgd, opkgd; + struct pkgmeta *pm; + prop_dictionary_t pkgd; const char *savedpkgname; char *plistf; @@ -115,15 +97,25 @@ xbps_metadir_get_pkgd(struct xbps_handle *xhp, const char *name) } } - opkgd = prop_dictionary_internalize_from_zfile(plistf); + /* Add pkg plist to hash map */ + pm = malloc(sizeof(*pm)); + assert(pm); + pm->name = name; + pm->d = prop_dictionary_internalize_from_zfile(plistf); free(plistf); - if (opkgd == NULL) { + + if (pm->d == NULL) { + free(pm); xbps_dbg_printf(xhp, "cannot read %s metadata: %s\n", savedpkgname, strerror(errno)); return NULL; } - metadir_add(name, opkgd); + HASH_ADD_KEYPTR(hh, + pkgmetas, + __UNCONST(name), + strlen(__UNCONST(name)), + pm); - return opkgd; + return pm->d; }