diff --git a/libpkgconf/dependency.c b/libpkgconf/dependency.c index 7b6d10e..fc17f49 100644 --- a/libpkgconf/dependency.c +++ b/libpkgconf/dependency.c @@ -439,3 +439,33 @@ pkgconf_dependency_parse(pkgconf_client_t *client, pkgconf_pkg_t *pkg, pkgconf_l pkgconf_dependency_parse_str(client, deplist, kvdepends, flags); free(kvdepends); } + +/* + * !doc + * + * .. c:function:: pkgconf_dependency_t *pkgconf_dependency_copy(pkgconf_client_t *client, const pkgconf_dependency_t *dep) + * + * Copies a dependency node to a new one. + * + * :param pkgconf_client_t* client: The client object that will own this dependency. + * :param pkgconf_dependency_t* dep: The dependency node to copy. + * :return: a pointer to a new dependency node, else NULL + */ +pkgconf_dependency_t * +pkgconf_dependency_copy(pkgconf_client_t *client, const pkgconf_dependency_t *dep) +{ + pkgconf_dependency_t *new_dep; + + new_dep = calloc(sizeof(pkgconf_dependency_t), 1); + new_dep->package = strdup(dep->package); + + if (dep->version != NULL) + new_dep->version = strdup(dep->version); + + new_dep->compare = dep->compare; + new_dep->flags = dep->flags; + new_dep->owner = client; + new_dep->refcount = 0; + + return pkgconf_dependency_ref(client, new_dep); +} \ No newline at end of file diff --git a/libpkgconf/libpkgconf.h b/libpkgconf/libpkgconf.h index 89c519e..5acfe2c 100644 --- a/libpkgconf/libpkgconf.h +++ b/libpkgconf/libpkgconf.h @@ -327,6 +327,7 @@ PKGCONF_API void pkgconf_dependency_free_one(pkgconf_dependency_t *dep); PKGCONF_API pkgconf_dependency_t *pkgconf_dependency_add(pkgconf_client_t *client, pkgconf_list_t *list, const char *package, const char *version, pkgconf_pkg_comparator_t compare, unsigned int flags); PKGCONF_API pkgconf_dependency_t *pkgconf_dependency_ref(pkgconf_client_t *client, pkgconf_dependency_t *dep); PKGCONF_API void pkgconf_dependency_unref(pkgconf_client_t *client, pkgconf_dependency_t *dep); +PKGCONF_API pkgconf_dependency_t *pkgconf_dependency_copy(pkgconf_client_t *client, const pkgconf_dependency_t *dep); /* argvsplit.c */ PKGCONF_API int pkgconf_argv_split(const char *src, int *argc, char ***argv);