libxbps: optimize rootdir access/creation by checking/creating it only once.
This commit is contained in:
parent
91344451a3
commit
18e0524287
@ -658,24 +658,6 @@ xbps_unpack_binary_pkg(struct xbps_handle *xhp, xbps_dictionary_t pkg_repod)
|
|||||||
/*
|
/*
|
||||||
* Extract archive files.
|
* Extract archive files.
|
||||||
*/
|
*/
|
||||||
if (access(xhp->rootdir, R_OK) == -1) {
|
|
||||||
if (errno != ENOENT) {
|
|
||||||
rv = errno;
|
|
||||||
goto out;
|
|
||||||
}
|
|
||||||
if (xbps_mkpath(xhp->rootdir, 0750) == -1) {
|
|
||||||
rv = errno;
|
|
||||||
goto out;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (chdir(xhp->rootdir) == -1) {
|
|
||||||
xbps_set_cb_state(xhp, XBPS_STATE_UNPACK_FAIL,
|
|
||||||
errno, pkgver,
|
|
||||||
"%s: [unpack] failed to chdir to rootdir `%s': %s",
|
|
||||||
pkgver, xhp->rootdir, strerror(errno));
|
|
||||||
rv = errno;
|
|
||||||
goto out;
|
|
||||||
}
|
|
||||||
if ((rv = unpack_archive(xhp, pkg_repod, pkgver, bpkg, ar)) != 0) {
|
if ((rv = unpack_archive(xhp, pkg_repod, pkgver, bpkg, ar)) != 0) {
|
||||||
xbps_set_cb_state(xhp, XBPS_STATE_UNPACK_FAIL, rv, pkgver,
|
xbps_set_cb_state(xhp, XBPS_STATE_UNPACK_FAIL, rv, pkgver,
|
||||||
"%s: [unpack] failed to unpack files from archive: %s",
|
"%s: [unpack] failed to unpack files from archive: %s",
|
||||||
|
@ -249,6 +249,32 @@ xbps_transaction_commit(struct xbps_handle *xhp)
|
|||||||
*/
|
*/
|
||||||
xbps_set_cb_state(xhp, XBPS_STATE_TRANS_RUN, 0, NULL, NULL);
|
xbps_set_cb_state(xhp, XBPS_STATE_TRANS_RUN, 0, NULL, NULL);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Create rootdir if necessary.
|
||||||
|
*/
|
||||||
|
if (access(xhp->rootdir, R_OK) == -1) {
|
||||||
|
if (errno != ENOENT) {
|
||||||
|
rv = errno;
|
||||||
|
xbps_set_cb_state(xhp, XBPS_STATE_TRANS_FAIL, errno, xhp->rootdir,
|
||||||
|
"[trans] failed to access rootdir `%s': %s",
|
||||||
|
xhp->rootdir, strerror(rv));
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
if (xbps_mkpath(xhp->rootdir, 0750) == -1) {
|
||||||
|
rv = errno;
|
||||||
|
xbps_set_cb_state(xhp, XBPS_STATE_TRANS_FAIL, errno, xhp->rootdir,
|
||||||
|
"[trans] failed to create rootdir `%s': %s",
|
||||||
|
xhp->rootdir, strerror(rv));
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (chdir(xhp->rootdir) == -1) {
|
||||||
|
rv = errno;
|
||||||
|
xbps_set_cb_state(xhp, XBPS_STATE_UNPACK_FAIL, rv, xhp->rootdir,
|
||||||
|
"[trans] failed to chdir to rootdir `%s': %s",
|
||||||
|
xhp->rootdir, strerror(errno));
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
while ((obj = xbps_object_iterator_next(iter)) != NULL) {
|
while ((obj = xbps_object_iterator_next(iter)) != NULL) {
|
||||||
xbps_dictionary_get_cstring_nocopy(obj, "transaction", &tract);
|
xbps_dictionary_get_cstring_nocopy(obj, "transaction", &tract);
|
||||||
xbps_dictionary_get_cstring_nocopy(obj, "pkgver", &pkgver);
|
xbps_dictionary_get_cstring_nocopy(obj, "pkgver", &pkgver);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user