From 42d408e0c253beca56f640729a85badffedd8a3f Mon Sep 17 00:00:00 2001 From: Dan McGee Date: Sat, 7 Apr 2012 11:29:11 -0500 Subject: 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 --- lib/libalpm/be_package.c | 13 ++++++++++++- lib/libalpm/error.c | 2 +- 2 files changed, 13 insertions(+), 2 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; } diff --git a/lib/libalpm/error.c b/lib/libalpm/error.c index 5354a47e..86b4efb2 100644 --- a/lib/libalpm/error.c +++ b/lib/libalpm/error.c @@ -41,7 +41,7 @@ const char SYMEXPORT *alpm_strerror(alpm_errno_t err) case ALPM_ERR_SYSTEM: return _("unexpected system error"); case ALPM_ERR_BADPERMS: - return _("insufficient privileges"); + return _("permission denied"); case ALPM_ERR_NOT_A_FILE: return _("could not find or read file"); case ALPM_ERR_NOT_A_DIR: -- cgit v1.2.3-70-g09d2