libxbps: use a struct allocated from stack for the unpack cb.
(cherry picked from commit a658586f27fd0a0c2c78ea96f89b54055e1e73be)
This commit is contained in:
parent
01915e3030
commit
0f17197627
@ -163,7 +163,7 @@ unpack_archive(struct xbps_handle *xhp,
|
|||||||
prop_array_t array;
|
prop_array_t array;
|
||||||
const struct stat *entry_statp;
|
const struct stat *entry_statp;
|
||||||
struct stat st;
|
struct stat st;
|
||||||
struct xbps_unpack_cb_data *xucd = NULL;
|
struct xbps_unpack_cb_data xucd;
|
||||||
struct archive_entry *entry;
|
struct archive_entry *entry;
|
||||||
size_t nmetadata = 0, entry_idx = 0;
|
size_t nmetadata = 0, entry_idx = 0;
|
||||||
const char *entry_pname, *transact, *pkgname, *version, *pkgver, *fname;
|
const char *entry_pname, *transact, *pkgname, *version, *pkgver, *fname;
|
||||||
@ -191,12 +191,7 @@ unpack_archive(struct xbps_handle *xhp,
|
|||||||
|
|
||||||
if (xhp->unpack_cb != NULL) {
|
if (xhp->unpack_cb != NULL) {
|
||||||
/* initialize data for unpack cb */
|
/* initialize data for unpack cb */
|
||||||
xucd = malloc(sizeof(*xucd));
|
memset(&xucd, 0, sizeof(xucd));
|
||||||
if (xucd == NULL)
|
|
||||||
return ENOMEM;
|
|
||||||
|
|
||||||
xucd->entry_extract_count = 0;
|
|
||||||
xucd->entry_total_count = 0;
|
|
||||||
}
|
}
|
||||||
if (access(xhp->rootdir, R_OK) == -1) {
|
if (access(xhp->rootdir, R_OK) == -1) {
|
||||||
if (errno != ENOENT) {
|
if (errno != ENOENT) {
|
||||||
@ -250,11 +245,11 @@ unpack_archive(struct xbps_handle *xhp,
|
|||||||
/*
|
/*
|
||||||
* Prepare unpack callback ops.
|
* Prepare unpack callback ops.
|
||||||
*/
|
*/
|
||||||
if (xucd != NULL) {
|
if (xhp->unpack_cb != NULL) {
|
||||||
xucd->pkgver = pkgver;
|
xucd.pkgver = pkgver;
|
||||||
xucd->entry = entry_pname;
|
xucd.entry = entry_pname;
|
||||||
xucd->entry_size = archive_entry_size(entry);
|
xucd.entry_size = archive_entry_size(entry);
|
||||||
xucd->entry_is_conf = false;
|
xucd.entry_is_conf = false;
|
||||||
}
|
}
|
||||||
if (strcmp("./INSTALL", entry_pname) == 0) {
|
if (strcmp("./INSTALL", entry_pname) == 0) {
|
||||||
/*
|
/*
|
||||||
@ -355,16 +350,16 @@ unpack_archive(struct xbps_handle *xhp,
|
|||||||
* Compute total entries in progress data, if set.
|
* Compute total entries in progress data, if set.
|
||||||
* total_entries = files + conf_files + links.
|
* total_entries = files + conf_files + links.
|
||||||
*/
|
*/
|
||||||
if (xucd != NULL) {
|
if (xhp->unpack_cb != NULL) {
|
||||||
xucd->entry_total_count = 0;
|
xucd.entry_total_count = 0;
|
||||||
array = prop_dictionary_get(filesd, "files");
|
array = prop_dictionary_get(filesd, "files");
|
||||||
xucd->entry_total_count +=
|
xucd.entry_total_count +=
|
||||||
(ssize_t)prop_array_count(array);
|
(ssize_t)prop_array_count(array);
|
||||||
array = prop_dictionary_get(filesd, "conf_files");
|
array = prop_dictionary_get(filesd, "conf_files");
|
||||||
xucd->entry_total_count +=
|
xucd.entry_total_count +=
|
||||||
(ssize_t)prop_array_count(array);
|
(ssize_t)prop_array_count(array);
|
||||||
array = prop_dictionary_get(filesd, "links");
|
array = prop_dictionary_get(filesd, "links");
|
||||||
xucd->entry_total_count +=
|
xucd.entry_total_count +=
|
||||||
(ssize_t)prop_array_count(array);
|
(ssize_t)prop_array_count(array);
|
||||||
}
|
}
|
||||||
/*
|
/*
|
||||||
@ -457,8 +452,8 @@ unpack_archive(struct xbps_handle *xhp,
|
|||||||
* packages that don't have the "conf_files" array in
|
* packages that don't have the "conf_files" array in
|
||||||
* the XBPS_PKGPROPS dictionary.
|
* the XBPS_PKGPROPS dictionary.
|
||||||
*/
|
*/
|
||||||
if (xucd != NULL)
|
if (xhp->unpack_cb != NULL)
|
||||||
xucd->entry_is_conf = true;
|
xucd.entry_is_conf = true;
|
||||||
|
|
||||||
rv = xbps_entry_install_conf_file(xhp, filesd,
|
rv = xbps_entry_install_conf_file(xhp, filesd,
|
||||||
entry, entry_pname, pkgname, version);
|
entry, entry_pname, pkgname, version);
|
||||||
@ -489,9 +484,9 @@ unpack_archive(struct xbps_handle *xhp,
|
|||||||
"%s: [unpack] failed to extract file `%s': %s",
|
"%s: [unpack] failed to extract file `%s': %s",
|
||||||
pkgver, entry_pname, strerror(rv));
|
pkgver, entry_pname, strerror(rv));
|
||||||
}
|
}
|
||||||
if (xucd != NULL) {
|
if (xhp->unpack_cb != NULL) {
|
||||||
xucd->entry_extract_count++;
|
xucd.entry_extract_count++;
|
||||||
(*xhp->unpack_cb)(xhp, xucd, xhp->unpack_cb_data);
|
(*xhp->unpack_cb)(xhp, &xucd, xhp->unpack_cb_data);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/*
|
/*
|
||||||
|
Loading…
Reference in New Issue
Block a user