aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEd Maste <emaste@FreeBSD.org>2018-10-23 13:07:03 +0000
committerEd Maste <emaste@FreeBSD.org>2018-10-23 13:07:03 +0000
commitccd8660b866e61f62922b4933e263b2269b9a7c7 (patch)
tree30ef83924f9d265e8203b8b1a1b85b6c0102aac1
parent1f3de6dce9cb5ef6e154316483c55f09c12a5a15 (diff)
downloadsrc-ccd8660b866e61f62922b4933e263b2269b9a7c7.tar.gz
src-ccd8660b866e61f62922b4933e263b2269b9a7c7.zip
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
Notes
Notes: svn path=/head/; revision=339648
-rw-r--r--usr.bin/ar/acpyacc.y3
-rw-r--r--usr.bin/ar/ar.h8
-rw-r--r--usr.bin/ar/read.c7
-rw-r--r--usr.bin/ar/write.c9
4 files changed, 15 insertions, 12 deletions
diff --git a/usr.bin/ar/acpyacc.y b/usr.bin/ar/acpyacc.y
index b9a688224d3e..113b3818bff1 100644
--- a/usr.bin/ar/acpyacc.y
+++ b/usr.bin/ar/acpyacc.y
@@ -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)
diff --git a/usr.bin/ar/ar.h b/usr.bin/ar/ar.h
index 536c5d66a7bc..a4c9febea97c 100644
--- a/usr.bin/ar/ar.h
+++ b/usr.bin/ar/ar.h
@@ -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)
/*
diff --git a/usr.bin/ar/read.c b/usr.bin/ar/read.c
index df7ba3754011..645081db378b 100644
--- a/usr.bin/ar/read.c
+++ b/usr.bin/ar/read.c
@@ -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));
}
}
diff --git a/usr.bin/ar/write.c b/usr.bin/ar/write.c
index a0121ef33a21..53efe74b4516 100644
--- a/usr.bin/ar/write.c
+++ b/usr.bin/ar/write.c
@@ -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;