The branch main has been updated by emaste:

URL: 
https://cgit.FreeBSD.org/src/commit/?id=c5bf58add0d523fc6e6546f3fc10d0c8b972e8e7

commit c5bf58add0d523fc6e6546f3fc10d0c8b972e8e7
Author:     Ed Maste <ema...@freebsd.org>
AuthorDate: 2021-08-12 18:26:37 +0000
Commit:     Ed Maste <ema...@freebsd.org>
CommitDate: 2021-08-12 18:26:37 +0000

    Revert "ar: diff reduction against ELF Tool Chain"
    
    This reverts commit d20e9e02db3dde383c3de1ce8cec3a8c35b3eee6.
    It caused port build failures.
    
    Reported by:    cy
---
 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, 182 insertions(+), 85 deletions(-)

diff --git a/usr.bin/ar/acpyacc.y b/usr.bin/ar/acpyacc.y
index 34156e1d2d58..5d4eb9fb6b37 100644
--- a/usr.bin/ar/acpyacc.y
+++ b/usr.bin/ar/acpyacc.y
@@ -42,6 +42,7 @@ __FBSDID("$FreeBSD$");
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
+#include <sysexits.h>
 #include <unistd.h>
 
 #include "ar.h"
@@ -249,7 +250,7 @@ arscp_open(char *fname)
        int                      r;
 
        if ((a = archive_read_new()) == NULL)
-               bsdar_errc(bsdar, 0, "archive_read_new failed");
+               bsdar_errc(bsdar, EX_SOFTWARE, 0, "archive_read_new failed");
        archive_read_support_format_ar(a);
        AC(archive_read_open_filename(a, fname, DEF_BLKSZ));
        if ((r = archive_read_next_header(a, &entry)))
@@ -276,15 +277,15 @@ arscp_create(char *in, char *out)
        /* Delete previously created temporary archive, if any. */
        if (tmpac) {
                if (unlink(tmpac) < 0)
-                       bsdar_errc(bsdar, errno, "unlink failed");
+                       bsdar_errc(bsdar, EX_IOERR, errno, "unlink failed");
                free(tmpac);
        }
 
        tmpac = strdup(TEMPLATE);
        if (tmpac == NULL)
-               bsdar_errc(bsdar, errno, "strdup failed");
+               bsdar_errc(bsdar, EX_SOFTWARE, errno, "strdup failed");
        if ((ofd = mkstemp(tmpac)) < 0)
-               bsdar_errc(bsdar, errno, "mkstemp failed");
+               bsdar_errc(bsdar, EX_IOERR, errno, "mkstemp failed");
 
        if (in) {
                /*
@@ -307,7 +308,8 @@ arscp_create(char *in, char *out)
                 * (archive with only global header)
                 */
                if ((a = archive_write_new()) == NULL)
-                       bsdar_errc(bsdar, 0, "archive_write_new failed");
+                       bsdar_errc(bsdar, EX_SOFTWARE, 0,
+                           "archive_write_new failed");
                archive_write_set_format_ar_svr4(a);
                AC(archive_write_open_fd(a, ofd));
                AC(archive_write_close(a));
@@ -348,7 +350,7 @@ arscp_copy(int ifd, int ofd)
                }
        }
        if (munmap(p, sb.st_size) < 0)
-               bsdar_errc(bsdar, errno, "munmap failed");
+               bsdar_errc(bsdar, EX_SOFTWARE, errno, "munmap failed");
        if (bytes > 0)
                return (1);
 
@@ -367,7 +369,7 @@ arscp_addlib(char *archive, struct list *list)
                return;
        arscp_mlist2argv(list);
        bsdar->addlib = archive;
-       ar_write_archive(bsdar, 'A');
+       ar_mode_A(bsdar);
        arscp_free_argv();
        arscp_free_mlist(list);
 }
@@ -380,7 +382,7 @@ arscp_addmod(struct list *list)
        if (!arscp_target_exist())
                return;
        arscp_mlist2argv(list);
-       ar_write_archive(bsdar, 'q');
+       ar_mode_q(bsdar);
        arscp_free_argv();
        arscp_free_mlist(list);
 }
@@ -393,7 +395,7 @@ arscp_delete(struct list *list)
        if (!arscp_target_exist())
                return;
        arscp_mlist2argv(list);
-       ar_write_archive(bsdar, 'd');
+       ar_mode_d(bsdar);
        arscp_free_argv();
        arscp_free_mlist(list);
 }
@@ -406,7 +408,7 @@ arscp_extract(struct list *list)
        if (!arscp_target_exist())
                return;
        arscp_mlist2argv(list);
-       ar_read_archive(bsdar, 'x');
+       ar_mode_x(bsdar);
        arscp_free_argv();
        arscp_free_mlist(list);
 }
@@ -422,7 +424,7 @@ arscp_list(void)
        bsdar->argv = NULL;
        /* Always verbose. */
        bsdar->options |= AR_V;
-       ar_read_archive(bsdar, 't');
+       ar_mode_t(bsdar);
        bsdar->options &= ~AR_V;
 }
 
@@ -437,7 +439,8 @@ arscp_dir(char *archive, struct list *list, char *rlt)
        if (rlt) {
                out = stdout;
                if ((stdout = fopen(rlt, "w")) == NULL)
-                       bsdar_errc(bsdar, errno, "fopen %s failed", rlt);
+                       bsdar_errc(bsdar, EX_IOERR, errno,
+                           "fopen %s failed", rlt);
        }
 
        bsdar->filename = archive;
@@ -449,12 +452,13 @@ arscp_dir(char *archive, struct list *list, char *rlt)
        }
        if (verbose)
                bsdar->options |= AR_V;
-       ar_read_archive(bsdar, 't');
+       ar_mode_t(bsdar);
        bsdar->options &= ~AR_V;
 
        if (rlt) {
                if (fclose(stdout) == EOF)
-                       bsdar_errc(bsdar, errno, "fclose %s failed", rlt);
+                       bsdar_errc(bsdar, EX_IOERR, errno,
+                           "fclose %s failed", rlt);
                stdout = out;
                free(rlt);
        }
@@ -473,7 +477,7 @@ arscp_replace(struct list *list)
        if (!arscp_target_exist())
                return;
        arscp_mlist2argv(list);
-       ar_write_archive(bsdar, 'r');
+       ar_mode_r(bsdar);
        arscp_free_argv();
        arscp_free_mlist(list);
 }
@@ -486,7 +490,7 @@ arscp_save(void)
 
        if (target) {
                if (rename(tmpac, target) < 0)
-                       bsdar_errc(bsdar, errno, "rename failed");
+                       bsdar_errc(bsdar, EX_IOERR, errno, "rename failed");
                /*
                 * mkstemp creates temp files with mode 0600, here we
                 * set target archive mode per process umask.
@@ -494,7 +498,7 @@ arscp_save(void)
                mask = umask(0);
                umask(mask);
                if (chmod(target, 0666 & ~mask) < 0)
-                       bsdar_errc(bsdar, errno, "chmod failed");
+                       bsdar_errc(bsdar, EX_IOERR, errno, "chmod failed");
                free(tmpac);
                free(target);
                tmpac = NULL;
@@ -516,7 +520,7 @@ arscp_clear(void)
        if (target) {
                new_target = strdup(target);
                if (new_target == NULL)
-                       bsdar_errc(bsdar, errno, "strdup failed");
+                       bsdar_errc(bsdar, EX_SOFTWARE, errno, "strdup failed");
                arscp_create(NULL, new_target);
        }
 }
@@ -533,7 +537,7 @@ arscp_end(int eval)
                free(target);
        if (tmpac) {
                if (unlink(tmpac) == -1)
-                       bsdar_errc(bsdar, errno, "unlink %s failed",
+                       bsdar_errc(bsdar, EX_IOERR, errno, "unlink %s failed",
                            tmpac);
                free(tmpac);
        }
@@ -564,7 +568,7 @@ arscp_mlist(struct list *list, char *str)
 
        l = malloc(sizeof(*l));
        if (l == NULL)
-               bsdar_errc(bsdar, errno, "malloc failed");
+               bsdar_errc(bsdar, EX_SOFTWARE, errno, "malloc failed");
        l->str = str;
        l->next = list;
 
@@ -606,12 +610,12 @@ arscp_mlist2argv(struct list *list)
        n = arscp_mlist_len(list);
        argv = malloc(n * sizeof(*argv));
        if (argv == NULL)
-               bsdar_errc(bsdar, errno, "malloc failed");
+               bsdar_errc(bsdar, EX_SOFTWARE, errno, "malloc failed");
 
        /* Note that module names are stored in reverse order in mlist. */
        for(i = n - 1; i >= 0; i--, list = list->next) {
                if (list == NULL)
-                       bsdar_errc(bsdar, errno, "invalid mlist");
+                       bsdar_errc(bsdar, EX_SOFTWARE, errno, "invalid mlist");
                argv[i] = list->str;
        }
 
diff --git a/usr.bin/ar/ar.c b/usr.bin/ar/ar.c
index 3012f81cfa97..b131163342a6 100644
--- a/usr.bin/ar/ar.c
+++ b/usr.bin/ar/ar.c
@@ -151,7 +151,7 @@ main(int argc, char **argv)
                        bsdar->options |= AR_D;
                bsdar->options |= AR_S;
                while ((bsdar->filename = *argv++) != NULL)
-                       if (ar_read_archive(bsdar, 's'))
+                       if (ar_mode_s(bsdar))
                                exitcode = EXIT_FAILURE;
 
                exit(exitcode);
@@ -162,7 +162,8 @@ main(int argc, char **argv)
                if (*argv[1] != '-') {
                        len = strlen(argv[1]) + 2;
                        if ((p = malloc(len)) == NULL)
-                               bsdar_errc(bsdar, errno, "malloc failed");
+                               bsdar_errc(bsdar, EXIT_FAILURE, errno,
+                                   "malloc failed");
                        *p = '-';
                        (void)strlcpy(p + 1, argv[1], len - 1);
                        argv[1] = p;
@@ -262,20 +263,24 @@ main(int argc, char **argv)
                bsdar_usage();
 
        if (bsdar->options & AR_A && bsdar->options & AR_B)
-               bsdar_errc(bsdar, 0,
+               bsdar_errc(bsdar, EXIT_FAILURE, 0,
                    "only one of -a and -[bi] options allowed");
 
        if (bsdar->options & AR_J && bsdar->options & AR_Z)
-               bsdar_errc(bsdar, 0, "only one of -j and -z options allowed");
+               bsdar_errc(bsdar, EXIT_FAILURE, 0,
+                   "only one of -j and -z options allowed");
 
        if (bsdar->options & AR_S && bsdar->options & AR_SS)
-               bsdar_errc(bsdar, 0, "only one of -s and -S options allowed");
+               bsdar_errc(bsdar, EXIT_FAILURE, 0,
+                   "only one of -s and -S options allowed");
 
        if (bsdar->options & (AR_A | AR_B)) {
                if (*argv == NULL)
-                       bsdar_errc(bsdar, 0, "no position operand specified");
+                       bsdar_errc(bsdar, EXIT_FAILURE, 0,
+                           "no position operand specified");
                if ((bsdar->posarg = basename(*argv)) == NULL)
-                       bsdar_errc(bsdar, errno, "basename failed");
+                       bsdar_errc(bsdar, EXIT_FAILURE, errno,
+                           "basename failed");
                argc--;
                argv++;
        }
@@ -317,17 +322,32 @@ main(int argc, char **argv)
 
        if ((!bsdar->mode || strchr("ptx", bsdar->mode)) &&
            bsdar->options & AR_S) {
-               exitcode = ar_write_archive(bsdar, 's');
+               exitcode = ar_mode_s(bsdar);
                if (!bsdar->mode)
                        exit(exitcode);
        }
 
        switch(bsdar->mode) {
-       case 'd': case 'm': case 'q': case 'r':
-               exitcode = ar_write_archive(bsdar, bsdar->mode);
+       case 'd':
+               exitcode = ar_mode_d(bsdar);
                break;
-       case 'p': case 't': case 'x':
-               exitcode = ar_read_archive(bsdar, bsdar->mode);
+       case 'm':
+               exitcode = ar_mode_m(bsdar);
+               break;
+       case 'p':
+               exitcode = ar_mode_p(bsdar);
+               break;
+       case 'q':
+               exitcode = ar_mode_q(bsdar);
+               break;
+       case 'r':
+               exitcode = ar_mode_r(bsdar);
+               break;
+       case 't':
+               exitcode = ar_mode_t(bsdar);
+               break;
+       case 'x':
+               exitcode = ar_mode_x(bsdar);
                break;
        default:
                bsdar_usage();
@@ -350,8 +370,8 @@ set_mode(struct bsdar *bsdar, char opt)
 {
 
        if (bsdar->mode != '\0' && bsdar->mode != opt)
-               bsdar_errc(bsdar, 0, "Can't specify both -%c and -%c",
-                   opt, bsdar->mode);
+               bsdar_errc(bsdar, EXIT_FAILURE, 0,
+                   "Can't specify both -%c and -%c", opt, bsdar->mode);
        bsdar->mode = opt;
 }
 
@@ -360,8 +380,8 @@ only_mode(struct bsdar *bsdar, const char *opt, const char 
*valid_modes)
 {
 
        if (strchr(valid_modes, bsdar->mode) == NULL)
-               bsdar_errc(bsdar, 0, "Option %s is not permitted in mode -%c",
-                   opt, bsdar->mode);
+               bsdar_errc(bsdar, EXIT_FAILURE, 0,
+                   "Option %s is not permitted in mode -%c", opt, bsdar->mode);
 }
 
 static void
diff --git a/usr.bin/ar/ar.h b/usr.bin/ar/ar.h
index bcccf93a6016..21b3a669a943 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, archive_errno(a), "%s",               \
+               bsdar_errc(bsdar, EXIT_FAILURE, archive_errno(a), "%s", \
                    archive_error_string(a));                           \
 } while (0)
 
@@ -114,8 +114,16 @@ struct bsdar {
        TAILQ_HEAD(, ar_obj) v_obj;     /* object(member) list */
 };
 
-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_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);
diff --git a/usr.bin/ar/read.c b/usr.bin/ar/read.c
index 81e0bfce1b7e..04130b859c32 100644
--- a/usr.bin/ar/read.c
+++ b/usr.bin/ar/read.c
@@ -34,7 +34,6 @@ __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>
@@ -43,11 +42,34 @@ __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'.
  */
-int
-ar_read_archive(struct bsdar *bsdar, int mode)
+static int
+read_archive(struct bsdar *bsdar, char mode)
 {
        struct archive           *a;
        struct archive_entry     *entry;
@@ -65,10 +87,8 @@ ar_read_archive(struct bsdar *bsdar, int mode)
        char                      find;
        int                       exitcode, flags, r, i;
 
-       assert(mode == 'p' || mode == 't' || mode == 'x');
-
        if ((a = archive_read_new()) == NULL)
-               bsdar_errc(bsdar, 0, "archive_read_new failed");
+               bsdar_errc(bsdar, EXIT_FAILURE, 0, "archive_read_new failed");
        archive_read_support_format_ar(a);
        AC(archive_read_open_filename(a, bsdar->filename, DEF_BLKSZ));
 
@@ -102,7 +122,7 @@ ar_read_archive(struct bsdar *bsdar, int mode)
                                if (*av == NULL)
                                        continue;
                                if ((bname = basename(*av)) == NULL)
-                                       bsdar_errc(bsdar, errno,
+                                       bsdar_errc(bsdar, EXIT_FAILURE, errno,
                                            "basename failed");
                                if (strcmp(bname, name) != 0)
                                        continue;
diff --git a/usr.bin/ar/util.c b/usr.bin/ar/util.c
index b130d6195e47..1823c5eba84a 100644
--- a/usr.bin/ar/util.c
+++ b/usr.bin/ar/util.c
@@ -77,12 +77,12 @@ bsdar_verrc(struct bsdar *bsdar, int code, const char *fmt, 
va_list ap)
 }
 
 void
-bsdar_errc(struct bsdar *bsdar, int code, const char *fmt, ...)
+bsdar_errc(struct bsdar *bsdar, int eval, int code, const char *fmt, ...)
 {
        va_list ap;
 
        va_start(ap, fmt);
        bsdar_verrc(bsdar, code, fmt, ap);
        va_end(ap);
-       exit(EXIT_FAILURE);
+       exit(eval);
 }
diff --git a/usr.bin/ar/write.c b/usr.bin/ar/write.c
index d3dd71556bb3..4177f57d064a 100644
--- a/usr.bin/ar/write.c
+++ b/usr.bin/ar/write.c
@@ -35,7 +35,6 @@ __FBSDID("$FreeBSD$");
 #include <sys/stat.h>
 #include <archive.h>
 #include <archive_entry.h>
-#include <assert.h>
 #include <errno.h>
 #include <fcntl.h>
 #include <gelf.h>
@@ -43,6 +42,7 @@ __FBSDID("$FreeBSD$");
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
+#include <sysexits.h>
 #include <unistd.h>
 
 #include "ar.h"
@@ -67,11 +67,54 @@ static void insert_obj(struct bsdar *bsdar, struct ar_obj 
*obj,
 static void    prefault_buffer(const char *buf, size_t s);
 static void    read_objs(struct bsdar *bsdar, const char *archive,
                    int checkargv);
+static int     write_archive(struct bsdar *bsdar, char mode);
 static void    write_cleanup(struct bsdar *bsdar);
 static void    write_data(struct bsdar *bsdar, struct archive *a,
                    const void *buf, size_t s);
 static void    write_objs(struct bsdar *bsdar);
 
+int
+ar_mode_d(struct bsdar *bsdar)
+{
+
+       return (write_archive(bsdar, 'd'));
+}
+
+int
+ar_mode_m(struct bsdar *bsdar)
+{
+
+       return (write_archive(bsdar, 'm'));
+}
+
+int
+ar_mode_q(struct bsdar *bsdar)
+{
+
+       return (write_archive(bsdar, 'q'));
+}
+
+int
+ar_mode_r(struct bsdar *bsdar)
+{
+
+       return (write_archive(bsdar, 'r'));
+}
+
+int
+ar_mode_s(struct bsdar *bsdar)
+{
+
+       return (write_archive(bsdar, 's'));
+}
+
+int
+ar_mode_A(struct bsdar *bsdar)
+{
+
+       return (write_archive(bsdar, 'A'));
+}
+
 /*
  * Create object from file, return created obj upon success, or NULL
  * when an error occurs or the member is not newer than existing
@@ -90,7 +133,7 @@ create_obj_from_file(struct bsdar *bsdar, const char *name, 
time_t mtime)
 
        obj = malloc(sizeof(struct ar_obj));
        if (obj == NULL)
-               bsdar_errc(bsdar, errno, "malloc failed");
+               bsdar_errc(bsdar, EX_SOFTWARE, errno, "malloc failed");
        if ((obj->fd = open(name, O_RDONLY, 0)) < 0) {
                bsdar_warnc(bsdar, errno, "can't open file: %s", name);
                free(obj);
@@ -99,17 +142,17 @@ create_obj_from_file(struct bsdar *bsdar, const char 
*name, time_t mtime)
 
        tmpname = strdup(name);
        if (tmpname == NULL)
-               bsdar_errc(bsdar, errno, "strdup failed");
+               bsdar_errc(bsdar, EX_SOFTWARE, errno, "strdup failed");
        if ((bname = basename(tmpname)) == NULL)
-               bsdar_errc(bsdar, errno, "basename failed");
+               bsdar_errc(bsdar, EX_SOFTWARE, errno, "basename failed");
        if (bsdar->options & AR_TR && strlen(bname) > _TRUNCATE_LEN) {
                if ((obj->name = malloc(_TRUNCATE_LEN + 1)) == NULL)
-                       bsdar_errc(bsdar, errno, "malloc failed");
+                       bsdar_errc(bsdar, EX_SOFTWARE, errno, "malloc failed");
                (void)strncpy(obj->name, bname, _TRUNCATE_LEN);
                obj->name[_TRUNCATE_LEN] = '\0';
        } else
                if ((obj->name = strdup(bname)) == NULL)
-                   bsdar_errc(bsdar, errno, "strdup failed");
+                   bsdar_errc(bsdar, EX_SOFTWARE, errno, "strdup failed");
        free(tmpname);
 
        if (fstat(obj->fd, &sb) < 0) {
@@ -162,14 +205,14 @@ create_obj_from_file(struct bsdar *bsdar, const char 
*name, time_t mtime)
                goto giveup;
        }
        if (close(obj->fd) < 0)
-               bsdar_errc(bsdar, errno, "close failed: %s",
+               bsdar_errc(bsdar, EX_SOFTWARE, errno, "close failed: %s",
                    obj->name);
 
        return (obj);
 
 giveup:
        if (close(obj->fd) < 0)
-               bsdar_errc(bsdar, errno, "close failed: %s",
+               bsdar_errc(bsdar, EX_SOFTWARE, errno, "close failed: %s",
                    obj->name);
        free(obj->name);
        free(obj);
@@ -199,7 +242,7 @@ static void
 insert_obj(struct bsdar *bsdar, struct ar_obj *obj, struct ar_obj *pos)
 {
        if (obj == NULL)
-               bsdar_errc(bsdar, 0, "try to insert a null obj");
+               bsdar_errc(bsdar, EX_SOFTWARE, 0, "try to insert a null obj");
 
        if (pos == NULL || obj == pos)
                /*
@@ -242,13 +285,13 @@ read_objs(struct bsdar *bsdar, const char *archive, int 
checkargv)
        int                       i, r, find;
 
        if ((a = archive_read_new()) == NULL)
-               bsdar_errc(bsdar, 0, "archive_read_new failed");
+               bsdar_errc(bsdar, EX_SOFTWARE, 0, "archive_read_new failed");
        archive_read_support_format_ar(a);
        AC(archive_read_open_filename(a, archive, DEF_BLKSZ));
        for (;;) {
                r = archive_read_next_header(a, &entry);
                if (r == ARCHIVE_FATAL)
-                       bsdar_errc(bsdar, archive_errno(a), "%s",
+                       bsdar_errc(bsdar, EX_DATAERR, archive_errno(a), "%s",
                            archive_error_string(a));
                if (r == ARCHIVE_EOF)
                        break;
@@ -279,7 +322,7 @@ read_objs(struct bsdar *bsdar, const char *archive, int 
checkargv)
                                if (*av == NULL)
                                        continue;
                                if ((bname = basename(*av)) == NULL)
-                                       bsdar_errc(bsdar, errno,
+                                       bsdar_errc(bsdar, EX_SOFTWARE, errno,
                                            "basename failed");
                                if (strcmp(bname, name) != 0)
                                        continue;
@@ -296,7 +339,8 @@ read_objs(struct bsdar *bsdar, const char *archive, int 
checkargv)
 
                if (size > 0) {
                        if ((buff = malloc(size)) == NULL)
-                               bsdar_errc(bsdar, errno, "malloc failed");
+                               bsdar_errc(bsdar, EX_SOFTWARE, errno,
+                                   "malloc failed");
                        if (archive_read_data(a, buff, size) != (ssize_t)size) {
                                bsdar_warnc(bsdar, archive_errno(a), "%s",
                                    archive_error_string(a));
@@ -308,10 +352,10 @@ read_objs(struct bsdar *bsdar, const char *archive, int 
checkargv)
 
                obj = malloc(sizeof(struct ar_obj));
                if (obj == NULL)
-                       bsdar_errc(bsdar, errno, "malloc failed");
+                       bsdar_errc(bsdar, EX_SOFTWARE, errno, "malloc failed");
                obj->maddr = buff;
                if ((obj->name = strdup(name)) == NULL)
-                       bsdar_errc(bsdar, errno, "strdup failed");
+                       bsdar_errc(bsdar, EX_SOFTWARE, errno, "strdup failed");
                obj->size = size;
                obj->uid = archive_entry_uid(entry);
                obj->gid = archive_entry_gid(entry);
@@ -334,8 +378,8 @@ read_objs(struct bsdar *bsdar, const char *archive, int 
checkargv)
 /*
  * Determine the constitution of resulting archive.
  */
-int
-ar_write_archive(struct bsdar *bsdar, int mode)
+static int
+write_archive(struct bsdar *bsdar, char mode)
 {
        struct ar_obj            *nobj, *obj, *obj_temp, *pos;
        struct stat               sb;
@@ -349,9 +393,6 @@ ar_write_archive(struct bsdar *bsdar, int mode)
        pos = NULL;
        memset(&sb, 0, sizeof(sb));
 
-       assert(mode == 'A' || mode == 'd' || mode == 'm' || mode == 'q' ||
-           mode == 'r' || mode == 's');
-
        /*
         * Test if the specified archive exists, to figure out
         * whether we are creating one here.
@@ -435,7 +476,8 @@ ar_write_archive(struct bsdar *bsdar, int mode)
 
                TAILQ_FOREACH_SAFE(obj, &bsdar->v_obj, objs, obj_temp) {
                        if ((bname = basename(*av)) == NULL)
-                               bsdar_errc(bsdar, errno, "basename failed");
+                               bsdar_errc(bsdar, EX_SOFTWARE, errno,
+                                   "basename failed");
                        if (bsdar->options & AR_TR) {
                                if (strncmp(bname, obj->name, _TRUNCATE_LEN))
                                        continue;
@@ -563,7 +605,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, archive_errno(a), "%s",
+                       bsdar_errc(bsdar, EX_SOFTWARE, archive_errno(a), "%s",
                            archive_error_string(a));
                buf = (const char *)buf + written;
                s -= written;
@@ -587,7 +629,7 @@ write_objs(struct bsdar *bsdar)
        uint32_t                 nr32;
 
        if (elf_version(EV_CURRENT) == EV_NONE)
-               bsdar_errc(bsdar, 0,
+               bsdar_errc(bsdar, EX_SOFTWARE, 0,
                    "ELF library initialization failed: %s", elf_errmsg(-1));
 
        bsdar->rela_off = 0;
@@ -653,7 +695,7 @@ write_objs(struct bsdar *bsdar)
        }
 
        if ((a = archive_write_new()) == NULL)
-               bsdar_errc(bsdar, 0, "archive_write_new failed");
+               bsdar_errc(bsdar, EX_SOFTWARE, 0, "archive_write_new failed");
 
        archive_write_set_format_ar_svr4(a);
 
@@ -668,7 +710,8 @@ write_objs(struct bsdar *bsdar)
            bsdar->options & AR_S) {
                entry = archive_entry_new();
                if (entry == NULL)
-                       bsdar_errc(bsdar, 0, "archive_entry_new failed");
+                       bsdar_errc(bsdar, EX_SOFTWARE, 0,
+                           "archive_entry_new failed");
                if (w_sz == sizeof(uint64_t))
                        archive_entry_copy_pathname(entry, "/SYM64/");
                else
@@ -694,7 +737,8 @@ write_objs(struct bsdar *bsdar)
        if (bsdar->as != NULL) {
                entry = archive_entry_new();
                if (entry == NULL)
-                       bsdar_errc(bsdar, 0, "archive_entry_new failed");
+                       bsdar_errc(bsdar, EX_SOFTWARE, 0,
+                           "archive_entry_new failed");
                archive_entry_copy_pathname(entry, "//");
                archive_entry_set_size(entry, bsdar->as_sz);
                AC(archive_write_header(a, entry));
@@ -706,7 +750,8 @@ write_objs(struct bsdar *bsdar)
        TAILQ_FOREACH(obj, &bsdar->v_obj, objs) {
                entry = archive_entry_new();
                if (entry == NULL)
-                       bsdar_errc(bsdar, 0, "archive_entry_new failed");
+                       bsdar_errc(bsdar, EX_SOFTWARE, 0,
+                           "archive_entry_new failed");
                archive_entry_copy_pathname(entry, obj->name);
                archive_entry_set_uid(entry, obj->uid);
                archive_entry_set_gid(entry, obj->gid);
@@ -848,7 +893,7 @@ add_to_ar_str_table(struct bsdar *bsdar, const char *name)
                bsdar->as_cap = _INIT_AS_CAP;
                bsdar->as_sz = 0;
                if ((bsdar->as = malloc(bsdar->as_cap)) == NULL)
-                       bsdar_errc(bsdar, errno, "malloc failed");
+                       bsdar_errc(bsdar, EX_SOFTWARE, errno, "malloc failed");
        }
 
        /*
@@ -859,7 +904,7 @@ add_to_ar_str_table(struct bsdar *bsdar, const char *name)
                bsdar->as_cap *= 2;
                bsdar->as = realloc(bsdar->as, bsdar->as_cap);
                if (bsdar->as == NULL)
-                       bsdar_errc(bsdar, errno, "realloc failed");
+                       bsdar_errc(bsdar, EX_SOFTWARE, errno, "realloc failed");
        }
        strncpy(&bsdar->as[bsdar->as_sz], name, strlen(name));
        bsdar->as_sz += strlen(name);
@@ -877,14 +922,14 @@ add_to_ar_sym_table(struct bsdar *bsdar, const char *name)
        if (bsdar->s_so == NULL) {
                if ((bsdar->s_so = malloc(_INIT_SYMOFF_CAP)) ==
                    NULL)
-                       bsdar_errc(bsdar, errno, "malloc failed");
+                       bsdar_errc(bsdar, EX_SOFTWARE, errno, "malloc failed");
                bsdar->s_so_cap = _INIT_SYMOFF_CAP;
                bsdar->s_cnt = 0;
        }
 
        if (bsdar->s_sn == NULL) {
                if ((bsdar->s_sn = malloc(_INIT_SYMNAME_CAP)) == NULL)
-                       bsdar_errc(bsdar, errno, "malloc failed");
+                       bsdar_errc(bsdar, EX_SOFTWARE, errno, "malloc failed");
                bsdar->s_sn_cap = _INIT_SYMNAME_CAP;
                bsdar->s_sn_sz = 0;
        }
@@ -893,7 +938,7 @@ add_to_ar_sym_table(struct bsdar *bsdar, const char *name)
                bsdar->s_so_cap *= 2;
                bsdar->s_so = realloc(bsdar->s_so, bsdar->s_so_cap);
                if (bsdar->s_so == NULL)
-                       bsdar_errc(bsdar, errno, "realloc failed");
+                       bsdar_errc(bsdar, EX_SOFTWARE, errno, "realloc failed");
        }
        bsdar->s_so[bsdar->s_cnt] = bsdar->rela_off;
        if ((uint64_t)bsdar->rela_off > bsdar->s_so_max)
@@ -908,7 +953,7 @@ add_to_ar_sym_table(struct bsdar *bsdar, const char *name)
                bsdar->s_sn_cap *= 2;
                bsdar->s_sn = realloc(bsdar->s_sn, bsdar->s_sn_cap);
                if (bsdar->s_sn == NULL)
-                       bsdar_errc(bsdar, errno, "realloc failed");
+                       bsdar_errc(bsdar, EX_SOFTWARE, errno, "realloc failed");
        }
        strncpy(&bsdar->s_sn[bsdar->s_sn_sz], name, strlen(name));
        bsdar->s_sn_sz += strlen(name);
_______________________________________________
dev-commits-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/dev-commits-src-all
To unsubscribe, send any mail to "dev-commits-src-all-unsubscr...@freebsd.org"

Reply via email to