On 10/29/07, Nathan Jones <nathanj@insightbb.com> wrote:
_alpm_pkg_dup() should create copies of all objects inside the pmpkg_t struct. I missed this function when adding the delta list to pmpkg_t.
Signed-off-by: Nathan Jones <nathanj@insightbb.com>
How about this instead? diff --git a/lib/libalpm/alpm_list.c b/lib/libalpm/alpm_list.c index 2301411..6487753 100644 --- a/lib/libalpm/alpm_list.c +++ b/lib/libalpm/alpm_list.c @@ -361,8 +361,6 @@ alpm_list_t SYMEXPORT *alpm_list_remove_dupes(const alpm_list_t *list) /** * @brief Copy a string list, including data. * - * This is gross, assumes string data members. - * * @param list the list to copy * * @return a copy of the original list @@ -397,6 +395,30 @@ alpm_list_t SYMEXPORT *alpm_list_copy(const alpm_list_t *list) } /** + * @brief Copy a list and copy the data. + * + * The data must be constant size! + * + * @param list the list to copy + * + * @return a copy of the original list, data copied as well + */ +alpm_list_t SYMEXPORT *alpm_list_copy_data(const alpm_list_t *list) +{ + const alpm_list_t *lp = list; + alpm_list_t *newlist = NULL; + while(lp) { + void *newdata = calloc(1, sizeof(lp->data)); + if(newdata) { + memcpy(newdata, lp->data, sizeof(lp->data)); + newlist = alpm_list_add(newlist, newdata); + lp = lp->next; + } + } + return(newlist); +} + +/** * @brief Create a new list in reverse order. * * @param list the list to copy diff --git a/lib/libalpm/alpm_list.h b/lib/libalpm/alpm_list.h index 8fce280..addf950 100644 --- a/lib/libalpm/alpm_list.h +++ b/lib/libalpm/alpm_list.h @@ -61,6 +61,7 @@ alpm_list_t *alpm_list_remove_node(alpm_list_t *node); alpm_list_t *alpm_list_remove_dupes(const alpm_list_t *list); alpm_list_t *alpm_list_strdup(const alpm_list_t *list); alpm_list_t *alpm_list_copy(const alpm_list_t *list); +alpm_list_t *alpm_list_copy_data(const alpm_list_t *list); alpm_list_t *alpm_list_reverse(alpm_list_t *list); /* item accessors */ diff --git a/lib/libalpm/package.c b/lib/libalpm/package.c index 9c166a5..5103a38 100644 --- a/lib/libalpm/package.c +++ b/lib/libalpm/package.c @@ -46,6 +46,7 @@ #include "error.h" #include "db.h" #include "cache.h" +#include "delta.h" #include "provide.h" #include "handle.h" #include "alpm.h" @@ -703,6 +704,7 @@ pmpkg_t *_alpm_pkg_dup(pmpkg_t *pkg) newpkg->groups = alpm_list_strdup(alpm_pkg_get_groups(pkg)); newpkg->provides = alpm_list_strdup(alpm_pkg_get_provides(pkg)); newpkg->replaces = alpm_list_strdup(alpm_pkg_get_replaces(pkg)); + newpkg->deltas = alpm_list_copy_data(alpm_pkg_get_deltas(pkg)); /* internal */ if(newpkg->origin == PKG_FROM_FILE) { newpkg->origin_data.file = strdup(pkg->origin_data.file);