Correctly duplicate delta objects
We were using copy_data before; this works for the struct itself but not the strings contained within. Fix it up by duplicating all the data as we do with our other structures. Signed-off-by: Dan McGee <dan@archlinux.org>
This commit is contained in:
parent
deb5601d8d
commit
0f26e3aa5b
|
@ -314,11 +314,25 @@ pmdelta_t *_alpm_delta_parse(char *line)
|
|||
|
||||
void _alpm_delta_free(pmdelta_t *delta)
|
||||
{
|
||||
FREE(delta->from);
|
||||
FREE(delta->to);
|
||||
FREE(delta->delta);
|
||||
FREE(delta->delta_md5);
|
||||
FREE(delta->from);
|
||||
FREE(delta->to);
|
||||
FREE(delta);
|
||||
}
|
||||
|
||||
pmdelta_t *_alpm_delta_dup(const pmdelta_t *delta)
|
||||
{
|
||||
pmdelta_t *newdelta;
|
||||
CALLOC(newdelta, 1, sizeof(pmdelta_t), return NULL);
|
||||
STRDUP(newdelta->delta, delta->delta, return NULL);
|
||||
STRDUP(newdelta->delta_md5, delta->delta_md5, return NULL);
|
||||
STRDUP(newdelta->from, delta->from, return NULL);
|
||||
STRDUP(newdelta->to, delta->to, return NULL);
|
||||
newdelta->delta_size = delta->delta_size;
|
||||
newdelta->download_size = delta->download_size;
|
||||
|
||||
return newdelta;
|
||||
}
|
||||
|
||||
/* vim: set ts=2 sw=2 noet: */
|
||||
|
|
|
@ -28,6 +28,7 @@
|
|||
|
||||
pmdelta_t *_alpm_delta_parse(char *line);
|
||||
void _alpm_delta_free(pmdelta_t *delta);
|
||||
pmdelta_t *_alpm_delta_dup(const pmdelta_t *delta);
|
||||
off_t _alpm_shortest_delta_path(pmhandle_t *handle, alpm_list_t *deltas,
|
||||
const char *to, alpm_list_t **path);
|
||||
|
||||
|
|
|
@ -466,7 +466,9 @@ pmpkg_t *_alpm_pkg_dup(pmpkg_t *pkg)
|
|||
newpkg->optdepends = alpm_list_strdup(pkg->optdepends);
|
||||
newpkg->conflicts = alpm_list_strdup(pkg->conflicts);
|
||||
newpkg->provides = alpm_list_strdup(pkg->provides);
|
||||
newpkg->deltas = alpm_list_copy_data(pkg->deltas, sizeof(pmdelta_t));
|
||||
for(i = pkg->deltas; i; i = alpm_list_next(i)) {
|
||||
newpkg->deltas = alpm_list_add(newpkg->deltas, _alpm_delta_dup(i->data));
|
||||
}
|
||||
|
||||
/* internal */
|
||||
newpkg->infolevel = pkg->infolevel;
|
||||
|
|
Loading…
Reference in New Issue