diff options
author | Dan McGee <dan@archlinux.org> | 2012-04-07 18:29:11 +0200 |
---|---|---|
committer | Dan McGee <dan@archlinux.org> | 2012-04-07 18:29:11 +0200 |
commit | 42d408e0c253beca56f640729a85badffedd8a3f (patch) | |
tree | 8f1b367dd6e0c8cc27daaca15d2583dd1c8cf6a9 /lib/libalpm/be_package.c | |
parent | cb5ae428b63c9807f855638c00720f54ea73413f (diff) | |
download | pacman-42d408e0c253beca56f640729a85badffedd8a3f.tar.gz pacman-42d408e0c253beca56f640729a85badffedd8a3f.tar.xz |
Return more useful error codes on package open failures
Failure isn't always due to the package file location not existing;
permission issues can also play a part on something like a FUSE-based
filesystem inaccessible to root.
Signed-off-by: Dan McGee <dan@archlinux.org>
Diffstat (limited to 'lib/libalpm/be_package.c')
-rw-r--r-- | lib/libalpm/be_package.c | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/lib/libalpm/be_package.c b/lib/libalpm/be_package.c index a33a591a..ce3ad55d 100644 --- a/lib/libalpm/be_package.c +++ b/lib/libalpm/be_package.c @@ -319,7 +319,14 @@ int _alpm_pkg_validate_internal(alpm_handle_t *handle, /* attempt to access the package file, ensure it exists */ if(_alpm_access(handle, NULL, pkgfile, R_OK) != 0) { - RET_ERR(handle, ALPM_ERR_PKG_NOT_FOUND, -1); + if(errno == ENOENT) { + handle->pm_errno = ALPM_ERR_PKG_NOT_FOUND; + } else if(errno == EACCES) { + handle->pm_errno = ALPM_ERR_BADPERMS; + } else { + handle->pm_errno = ALPM_ERR_PKG_OPEN; + } + return -1; } /* can we get away with skipping checksums? */ @@ -407,6 +414,10 @@ alpm_pkg_t *_alpm_pkg_load_internal(alpm_handle_t *handle, if(fd < 0) { if(errno == ENOENT) { handle->pm_errno = ALPM_ERR_PKG_NOT_FOUND; + } else if(errno == EACCES) { + handle->pm_errno = ALPM_ERR_BADPERMS; + } else { + handle->pm_errno = ALPM_ERR_PKG_OPEN; } return NULL; } |