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:
		
				
					committed by
					
						
						Duncan Overbruck
					
				
			
			
				
	
			
			
			
						parent
						
							d8cf66ce36
						
					
				
				
					commit
					01180f9cb6
				
			@@ -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) {
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user