lib/repo: change some error handling in repo_open_local.

- use less intermediate variables
- assert that archive_read_new managed to allocate memory for itself:
  not ideal, but if we ever want to move from assertions it shows us
  where we need to change things
- use libarchive's archive_error_string for better error messages

Closes: #345 [via git-merge-pr]
This commit is contained in:
Érico Rolim 2020-11-10 00:11:16 -03:00 committed by Duncan Overbruck
parent d8cf66ce36
commit 01180f9cb6
No known key found for this signature in database
GPG Key ID: 335C1D17EC3D6E35

View File

@ -134,16 +134,15 @@ static bool
repo_open_local(struct xbps_repo *repo, const char *repofile) repo_open_local(struct xbps_repo *repo, const char *repofile)
{ {
struct stat st; struct stat st;
int rv = 0;
if (fstat(repo->fd, &st) == -1) { if (fstat(repo->fd, &st) == -1) {
rv = errno;
xbps_dbg_printf(repo->xhp, "[repo] `%s' fstat repodata %s\n", xbps_dbg_printf(repo->xhp, "[repo] `%s' fstat repodata %s\n",
repofile, strerror(rv)); repofile, strerror(errno));
return false; return false;
} }
repo->ar = archive_read_new(); repo->ar = archive_read_new();
assert(repo->ar);
archive_read_support_filter_gzip(repo->ar); archive_read_support_filter_gzip(repo->ar);
archive_read_support_filter_bzip2(repo->ar); archive_read_support_filter_bzip2(repo->ar);
archive_read_support_filter_xz(repo->ar); archive_read_support_filter_xz(repo->ar);
@ -152,10 +151,9 @@ repo_open_local(struct xbps_repo *repo, const char *repofile)
archive_read_support_format_tar(repo->ar); archive_read_support_format_tar(repo->ar);
if (archive_read_open_fd(repo->ar, repo->fd, st.st_blksize) == ARCHIVE_FATAL) { if (archive_read_open_fd(repo->ar, repo->fd, st.st_blksize) == ARCHIVE_FATAL) {
rv = archive_errno(repo->ar);
xbps_dbg_printf(repo->xhp, xbps_dbg_printf(repo->xhp,
"[repo] `%s' failed to open repodata archive %s\n", "[repo] `%s' failed to open repodata archive %s\n",
repofile, strerror(rv)); repofile, archive_error_string(repo->ar));
return false; return false;
} }
if ((repo->idx = repo_get_dict(repo)) == NULL) { if ((repo->idx = repo_get_dict(repo)) == NULL) {