diff --git a/libpkgconf/dependency.c b/libpkgconf/dependency.c index 1cf7891..616c0c2 100644 --- a/libpkgconf/dependency.c +++ b/libpkgconf/dependency.c @@ -177,6 +177,31 @@ pkgconf_dependency_append(pkgconf_list_t *list, pkgconf_dependency_t *tail) pkgconf_node_insert_tail(&tail->iter, tail, list); } +/* + * !doc + * + * .. c:function:: void pkgconf_dependency_free_one(pkgconf_dependency_t *dep) + * + * Frees a dependency node. + * + * :param pkgconf_dependency_t* dep: The dependency node to free. + * :return: nothing + */ +void +pkgconf_dependency_free_one(pkgconf_dependency_t *dep) +{ + if (dep->match != NULL) + pkgconf_pkg_unref(dep->match->owner, dep->match); + + if (dep->package != NULL) + free(dep->package); + + if (dep->version != NULL) + free(dep->version); + + free(dep); +} + /* * !doc * @@ -196,16 +221,8 @@ pkgconf_dependency_free(pkgconf_list_t *list) { pkgconf_dependency_t *dep = node->data; - if (dep->match != NULL) - pkgconf_pkg_unref(dep->match->owner, dep->match); - - if (dep->package != NULL) - free(dep->package); - - if (dep->version != NULL) - free(dep->version); - - free(dep); + pkgconf_node_delete(&dep->iter, list); + pkgconf_dependency_free_one(dep); } } diff --git a/libpkgconf/libpkgconf.h b/libpkgconf/libpkgconf.h index 8c70251..d0f5f3d 100644 --- a/libpkgconf/libpkgconf.h +++ b/libpkgconf/libpkgconf.h @@ -320,6 +320,7 @@ PKGCONF_API void pkgconf_dependency_parse_str(const pkgconf_client_t *client, pk PKGCONF_API void pkgconf_dependency_parse(const pkgconf_client_t *client, pkgconf_pkg_t *pkg, pkgconf_list_t *deplist_head, const char *depends, unsigned int flags); PKGCONF_API void pkgconf_dependency_append(pkgconf_list_t *list, pkgconf_dependency_t *tail); PKGCONF_API void pkgconf_dependency_free(pkgconf_list_t *list); +PKGCONF_API void pkgconf_dependency_free_one(pkgconf_dependency_t *dep); PKGCONF_API pkgconf_dependency_t *pkgconf_dependency_add(const pkgconf_client_t *client, pkgconf_list_t *list, const char *package, const char *version, pkgconf_pkg_comparator_t compare, unsigned int flags); /* argvsplit.c */