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
3 changed files with 20 additions and 3 deletions
|
@ -314,11 +314,25 @@ pmdelta_t *_alpm_delta_parse(char *line)
|
||||||
|
|
||||||
void _alpm_delta_free(pmdelta_t *delta)
|
void _alpm_delta_free(pmdelta_t *delta)
|
||||||
{
|
{
|
||||||
FREE(delta->from);
|
|
||||||
FREE(delta->to);
|
|
||||||
FREE(delta->delta);
|
FREE(delta->delta);
|
||||||
FREE(delta->delta_md5);
|
FREE(delta->delta_md5);
|
||||||
|
FREE(delta->from);
|
||||||
|
FREE(delta->to);
|
||||||
FREE(delta);
|
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: */
|
/* vim: set ts=2 sw=2 noet: */
|
||||||
|
|
|
@ -28,6 +28,7 @@
|
||||||
|
|
||||||
pmdelta_t *_alpm_delta_parse(char *line);
|
pmdelta_t *_alpm_delta_parse(char *line);
|
||||||
void _alpm_delta_free(pmdelta_t *delta);
|
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,
|
off_t _alpm_shortest_delta_path(pmhandle_t *handle, alpm_list_t *deltas,
|
||||||
const char *to, alpm_list_t **path);
|
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->optdepends = alpm_list_strdup(pkg->optdepends);
|
||||||
newpkg->conflicts = alpm_list_strdup(pkg->conflicts);
|
newpkg->conflicts = alpm_list_strdup(pkg->conflicts);
|
||||||
newpkg->provides = alpm_list_strdup(pkg->provides);
|
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 */
|
/* internal */
|
||||||
newpkg->infolevel = pkg->infolevel;
|
newpkg->infolevel = pkg->infolevel;
|
||||||
|
|
Loading…
Add table
Reference in a new issue