git: d20e9e02db3d - main - ar: diff reduction against ELF Tool Chain
Cy Schubert
Cy.Schubert at cschubert.com
Thu Aug 12 17:29:36 UTC 2021
In message <202108112313.17BNDL1g093210 at gitrepo.freebsd.org>, Ed Maste
writes:
> The branch main has been updated by emaste:
>
> URL: https://cgit.FreeBSD.org/src/commit/?id=d20e9e02db3dde383c3de1ce8cec3a8c
> 35b3eee6
>
> commit d20e9e02db3dde383c3de1ce8cec3a8c35b3eee6
> Author: Ed Maste <emaste at FreeBSD.org>
> AuthorDate: 2021-08-04 13:54:17 +0000
> Commit: Ed Maste <emaste at FreeBSD.org>
> CommitDate: 2021-08-11 23:12:46 +0000
>
> ar: diff reduction against ELF Tool Chain
>
> - Drop exit status from bsdar_errc. ELF Tool Chain always returns
> EXIT_FAILURE in bsdar_errc.
>
> - Remove ar_mode_* wrappers and call ar_read_archive / ar_write_archive
> directly.
>
> Obtained from: ELF Tool Chain
> Reviewed by: markj
> Sponsored by: The FreeBSD Foundation
> Differential Revision: https://reviews.freebsd.org/D31496
> ---
> usr.bin/ar/acpyacc.y | 48 ++++++++++------------
> usr.bin/ar/ar.c | 52 ++++++++----------------
> usr.bin/ar/ar.h | 18 +++------
> usr.bin/ar/read.c | 34 ++++------------
> usr.bin/ar/util.c | 4 +-
> usr.bin/ar/write.c | 111 +++++++++++++++----------------------------------
> --
> 6 files changed, 85 insertions(+), 182 deletions(-)
>
[...]
> diff --git a/usr.bin/ar/ar.h b/usr.bin/ar/ar.h
> index 21b3a669a943..bcccf93a6016 100644
> --- a/usr.bin/ar/ar.h
> +++ b/usr.bin/ar/ar.h
> @@ -54,7 +54,7 @@
> */
> #define AC(CALL) do {
> \
> if ((CALL)) \
> - bsdar_errc(bsdar, EXIT_FAILURE, archive_errno(a), "%s", \
> + bsdar_errc(bsdar, archive_errno(a), "%s", \
> archive_error_string(a)); \
> } while (0)
>
> @@ -114,16 +114,8 @@ struct bsdar {
> TAILQ_HEAD(, ar_obj) v_obj; /* object(member) list */
> };
>
> -void bsdar_errc(struct bsdar *, int _eval, int _code,
> - const char *fmt, ...) __dead2;
> -void bsdar_warnc(struct bsdar *, int _code, const char *fmt, ...);
> -int ar_mode_d(struct bsdar *bsdar);
> -int ar_mode_m(struct bsdar *bsdar);
> -int ar_mode_p(struct bsdar *bsdar);
> -int ar_mode_q(struct bsdar *bsdar);
> -int ar_mode_r(struct bsdar *bsdar);
> -int ar_mode_s(struct bsdar *bsdar);
> -int ar_mode_t(struct bsdar *bsdar);
> -int ar_mode_x(struct bsdar *bsdar);
> -int ar_mode_A(struct bsdar *bsdar);
> void ar_mode_script(struct bsdar *ar);
> +int ar_read_archive(struct bsdar *ar, int mode);
> +int ar_write_archive(struct bsdar *ar, int mode);
> +void bsdar_errc(struct bsdar *, int _code, const char *fmt, ...) __dead2;
> +void bsdar_warnc(struct bsdar *, int _code, const char *fmt, ...);
> diff --git a/usr.bin/ar/read.c b/usr.bin/ar/read.c
> index 04130b859c32..81e0bfce1b7e 100644
> --- a/usr.bin/ar/read.c
> +++ b/usr.bin/ar/read.c
> @@ -34,6 +34,7 @@ __FBSDID("$FreeBSD$");
> #include <sys/stat.h>
> #include <archive.h>
> #include <archive_entry.h>
> +#include <assert.h>
> #include <errno.h>
> #include <libgen.h>
> #include <stdio.h>
> @@ -42,34 +43,11 @@ __FBSDID("$FreeBSD$");
>
> #include "ar.h"
>
> -static int read_archive(struct bsdar *bsdar, char mode);
> -
> -int
> -ar_mode_p(struct bsdar *bsdar)
> -{
> -
> - return (read_archive(bsdar, 'p'));
> -}
> -
> -int
> -ar_mode_t(struct bsdar *bsdar)
> -{
> -
> - return (read_archive(bsdar, 't'));
> -}
> -
> -int
> -ar_mode_x(struct bsdar *bsdar)
> -{
> -
> - return (read_archive(bsdar, 'x'));
> -}
> -
> /*
> * Handle read modes: 'x', 't' and 'p'.
> */
> -static int
> -read_archive(struct bsdar *bsdar, char mode)
> +int
> +ar_read_archive(struct bsdar *bsdar, int mode)
> {
> struct archive *a;
> struct archive_entry *entry;
> @@ -87,8 +65,10 @@ read_archive(struct bsdar *bsdar, char mode)
> char find;
> int exitcode, flags, r, i;
>
> + assert(mode == 'p' || mode == 't' || mode == 'x');
This is causing port build failures:
ar -cq libutil.a allwhite.o inctest.o letter.o triedump.o triepdmp.o
trieplk.o trierset.o upcmp8.o upstrcmp.o wchar.o conutil.o error.o exit.o
itoa.o lower.o malloc.o openchk.o trie.o triecnt.o upper.o whitesp.o
ranlib libutil.a
Assertion failed: (mode == 'p' || mode == 't' || mode == 'x'), function
ar_read_archive, file /usr/local/poudriere/jails/main-amd64/usr/src/usr.bin/
ar/read.c, line 68.
*** Signal 6
Notice at line 154 of ar.c that ar_read_archive() is called with mode='s'.
This certainly triggers the assertion. The assertion may also trigger by
the call to ar_read_archive() at line 330 of ar.c where mode is set to
bsdar->mode.
> +
> if ((a = archive_read_new()) == NULL)
> - bsdar_errc(bsdar, EXIT_FAILURE, 0, "archive_read_new failed");
> + bsdar_errc(bsdar, 0, "archive_read_new failed");
> archive_read_support_format_ar(a);
> AC(archive_read_open_filename(a, bsdar->filename, DEF_BLKSZ));
>
> @@ -122,7 +102,7 @@ read_archive(struct bsdar *bsdar, char mode)
> if (*av == NULL)
> continue;
> if ((bname = basename(*av)) == NULL)
> - bsdar_errc(bsdar, EXIT_FAILURE, errno,
> + bsdar_errc(bsdar, errno,
> "basename failed");
> if (strcmp(bname, name) != 0)
> continue;
[...]
--
Cheers,
Cy Schubert <Cy.Schubert at cschubert.com>
FreeBSD UNIX: <cy at FreeBSD.org> Web: https://FreeBSD.org
NTP: <cy at nwtime.org> Web: https://nwtime.org
The need of the many outweighs the greed of the few.
More information about the dev-commits-src-main
mailing list