From dc207e4669c73203f2fe834294157616a82d6287 Mon Sep 17 00:00:00 2001 From: Jean-Yves Migeon Date: Fri, 6 Sep 2013 17:17:57 +0200 Subject: [PATCH] Hide *lafe_progname and provide getter/setter instead. This factorizes some code between binaries like bsdtar, bsdcpio, and the soon-to-be mtree. --- cpio/cpio.c | 21 ++++++--------------- libarchive_fe/err.c | 22 ++++++++++++++++++++++ libarchive_fe/err.h | 5 +++-- tar/bsdtar.c | 21 +++++---------------- 4 files changed, 36 insertions(+), 33 deletions(-) diff --git a/cpio/cpio.c b/cpio/cpio.c index 3889290af..933bedf3c 100644 --- a/cpio/cpio.c +++ b/cpio/cpio.c @@ -149,20 +149,11 @@ main(int argc, char *argv[]) } #endif - /* Need lafe_progname before calling lafe_warnc. */ + /* Set lafe_progname before calling lafe_warnc. */ if (*argv == NULL) - lafe_progname = "bsdcpio"; - else { -#if defined(_WIN32) && !defined(__CYGWIN__) - lafe_progname = strrchr(*argv, '\\'); - if (strrchr(*argv, '/') > lafe_progname) -#endif - lafe_progname = strrchr(*argv, '/'); - if (lafe_progname != NULL) - lafe_progname++; - else - lafe_progname = *argv; - } + *argv = "bsdcpio"; + lafe_setprogname(*argv); + #if HAVE_SETLOCALE if (setlocale(LC_ALL, "") == NULL) lafe_warnc(0, "Failed to set default locale"); @@ -437,7 +428,7 @@ usage(void) { const char *p; - p = lafe_progname; + p = lafe_getprogname(); fprintf(stderr, "Brief Usage:\n"); fprintf(stderr, " List: %s -it < archive\n", p); @@ -475,7 +466,7 @@ long_help(void) const char *prog; const char *p; - prog = lafe_progname; + prog = lafe_getprogname(); fflush(stderr); diff --git a/libarchive_fe/err.c b/libarchive_fe/err.c index a0173983a..408c2029f 100644 --- a/libarchive_fe/err.c +++ b/libarchive_fe/err.c @@ -44,6 +44,28 @@ static void lafe_vwarnc(int, const char *, va_list) __LA_PRINTFLIKE(2, 0); const char *lafe_progname; +const char * +lafe_getprogname(void) +{ + + return lafe_progname; +} + +void +lafe_setprogname(const char *name) +{ + +#if defined(_WIN32) && !defined(__CYGWIN__) + lafe_progname = strrchr(name, '\\'); + if (strrchr(name, '/') > lafe_progname) +#endif + lafe_progname = strrchr(name, '/'); + if (lafe_progname != NULL) + lafe_progname++; + else + lafe_progname = name; +} + static void lafe_vwarnc(int code, const char *fmt, va_list ap) { diff --git a/libarchive_fe/err.h b/libarchive_fe/err.h index ca1af3563..c351cba88 100644 --- a/libarchive_fe/err.h +++ b/libarchive_fe/err.h @@ -40,10 +40,11 @@ #define __LA_PRINTFLIKE(f,a) #endif -extern const char *lafe_progname; - void lafe_warnc(int code, const char *fmt, ...) __LA_PRINTFLIKE(2, 3); void lafe_errc(int eval, int code, const char *fmt, ...) __LA_DEAD __LA_PRINTFLIKE(3, 4); +const char * lafe_getprogname(void); +void lafe_setprogname(const char *); + #endif diff --git a/tar/bsdtar.c b/tar/bsdtar.c index 47267579f..8b05b4015 100644 --- a/tar/bsdtar.c +++ b/tar/bsdtar.c @@ -178,21 +178,10 @@ main(int argc, char **argv) } #endif - - /* Need lafe_progname before calling lafe_warnc. */ + /* Set lafe_progname before calling lafe_warnc. */ if (*argv == NULL) - lafe_progname = "bsdtar"; - else { -#if defined(_WIN32) && !defined(__CYGWIN__) - lafe_progname = strrchr(*argv, '\\'); - if (strrchr(*argv, '/') > lafe_progname) -#endif - lafe_progname = strrchr(*argv, '/'); - if (lafe_progname != NULL) - lafe_progname++; - else - lafe_progname = *argv; - } + *argv = "bsdtar"; + lafe_setprogname(*argv); #if HAVE_SETLOCALE if (setlocale(LC_ALL, "") == NULL) @@ -844,7 +833,7 @@ usage(void) { const char *p; - p = lafe_progname; + p = lafe_getprogname(); fprintf(stderr, "Usage:\n"); fprintf(stderr, " List: %s -tf \n", p); @@ -904,7 +893,7 @@ long_help(void) const char *prog; const char *p; - prog = lafe_progname; + prog = lafe_getprogname(); fflush(stderr); -- 2.47.2