ar: report errno on warning/error
Previously ar would report an error like "ar: fatal: Write error" without including additional errno information. Change warnings and errors to include archive_errno() so that the user may have some idea of the reason for the failure. Reviewed by: brooks Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D17650
This commit is contained in:
parent
1f3de6dce9
commit
ccd8660b86
@ -254,7 +254,8 @@ arscp_open(char *fname)
|
||||
archive_read_support_format_ar(a);
|
||||
AC(archive_read_open_filename(a, fname, DEF_BLKSZ));
|
||||
if ((r = archive_read_next_header(a, &entry)))
|
||||
bsdar_warnc(bsdar, 0, "%s", archive_error_string(a));
|
||||
bsdar_warnc(bsdar, archive_errno(a), "%s",
|
||||
archive_error_string(a));
|
||||
AC(archive_read_close(a));
|
||||
AC(archive_read_free(a));
|
||||
if (r != ARCHIVE_OK)
|
||||
|
@ -52,10 +52,10 @@
|
||||
/*
|
||||
* Convenient wrapper for general libarchive error handling.
|
||||
*/
|
||||
#define AC(CALL) do { \
|
||||
if ((CALL)) \
|
||||
bsdar_errc(bsdar, EX_SOFTWARE, 0, "%s", \
|
||||
archive_error_string(a)); \
|
||||
#define AC(CALL) do { \
|
||||
if ((CALL)) \
|
||||
bsdar_errc(bsdar, EX_SOFTWARE, archive_errno(a), "%s", \
|
||||
archive_error_string(a)); \
|
||||
} while (0)
|
||||
|
||||
/*
|
||||
|
@ -96,7 +96,8 @@ read_archive(struct bsdar *bsdar, char mode)
|
||||
r = archive_read_next_header(a, &entry);
|
||||
if (r == ARCHIVE_WARN || r == ARCHIVE_RETRY ||
|
||||
r == ARCHIVE_FATAL)
|
||||
bsdar_warnc(bsdar, 0, "%s", archive_error_string(a));
|
||||
bsdar_warnc(bsdar, archive_errno(a), "%s",
|
||||
archive_error_string(a));
|
||||
if (r == ARCHIVE_EOF || r == ARCHIVE_FATAL)
|
||||
break;
|
||||
if (r == ARCHIVE_RETRY) {
|
||||
@ -151,7 +152,7 @@ read_archive(struct bsdar *bsdar, char mode)
|
||||
if (r == ARCHIVE_WARN || r == ARCHIVE_RETRY ||
|
||||
r == ARCHIVE_FATAL) {
|
||||
(void)fprintf(stdout, "\n");
|
||||
bsdar_warnc(bsdar, 0, "%s",
|
||||
bsdar_warnc(bsdar, archive_errno(a), "%s",
|
||||
archive_error_string(a));
|
||||
}
|
||||
|
||||
@ -205,7 +206,7 @@ read_archive(struct bsdar *bsdar, char mode)
|
||||
}
|
||||
|
||||
if (r)
|
||||
bsdar_warnc(bsdar, 0, "%s",
|
||||
bsdar_warnc(bsdar, archive_errno(a), "%s",
|
||||
archive_error_string(a));
|
||||
}
|
||||
}
|
||||
|
@ -291,12 +291,13 @@ read_objs(struct bsdar *bsdar, const char *archive, int checkargv)
|
||||
for (;;) {
|
||||
r = archive_read_next_header(a, &entry);
|
||||
if (r == ARCHIVE_FATAL)
|
||||
bsdar_errc(bsdar, EX_DATAERR, 0, "%s",
|
||||
bsdar_errc(bsdar, EX_DATAERR, archive_errno(a), "%s",
|
||||
archive_error_string(a));
|
||||
if (r == ARCHIVE_EOF)
|
||||
break;
|
||||
if (r == ARCHIVE_WARN || r == ARCHIVE_RETRY)
|
||||
bsdar_warnc(bsdar, 0, "%s", archive_error_string(a));
|
||||
bsdar_warnc(bsdar, archive_errno(a), "%s",
|
||||
archive_error_string(a));
|
||||
if (r == ARCHIVE_RETRY) {
|
||||
bsdar_warnc(bsdar, 0, "Retrying...");
|
||||
continue;
|
||||
@ -341,7 +342,7 @@ read_objs(struct bsdar *bsdar, const char *archive, int checkargv)
|
||||
bsdar_errc(bsdar, EX_SOFTWARE, errno,
|
||||
"malloc failed");
|
||||
if (archive_read_data(a, buff, size) != (ssize_t)size) {
|
||||
bsdar_warnc(bsdar, 0, "%s",
|
||||
bsdar_warnc(bsdar, archive_errno(a), "%s",
|
||||
archive_error_string(a));
|
||||
free(buff);
|
||||
continue;
|
||||
@ -594,7 +595,7 @@ write_data(struct bsdar *bsdar, struct archive *a, const void *buf, size_t s)
|
||||
while (s > 0) {
|
||||
written = archive_write_data(a, buf, s);
|
||||
if (written < 0)
|
||||
bsdar_errc(bsdar, EX_SOFTWARE, 0, "%s",
|
||||
bsdar_errc(bsdar, EX_SOFTWARE, archive_errno(a), "%s",
|
||||
archive_error_string(a));
|
||||
buf = (const char *)buf + written;
|
||||
s -= written;
|
||||
|
Loading…
Reference in New Issue
Block a user