On Mon, Jan 05, 2015 at 08:23:59AM -0600, Brent Cook wrote:
> On Sun, Jan 04, 2015 at 12:38:37PM +0100, Peter Hessler wrote:
> > fatal should completely be variadic, a printf-alike.
> >
>
> How about something like this for making fatal variadic first.
> This factors out the guts of log_warn and adds logerr that they both can
> share.
>
we have variadic fatal/x in smtpd in case you're interested ;-)
> ---
> src/usr.sbin/ntpd/log.c | 54
> +++++++++++++++++++++++++++---------------------
> src/usr.sbin/ntpd/ntpd.h | 4 ++--
> 2 files changed, 32 insertions(+), 26 deletions(-)
>
> diff --git a/src/usr.sbin/ntpd/log.c b/src/usr.sbin/ntpd/log.c
> index 618f4cc..e92924e 100644
> --- a/src/usr.sbin/ntpd/log.c
> +++ b/src/usr.sbin/ntpd/log.c
> @@ -71,29 +71,33 @@ vlog(int pri, const char *fmt, va_list ap)
> vsyslog(pri, fmt, ap);
> }
>
> -
> void
> -log_warn(const char *emsg, ...)
> +vlogerr(int pri, const char *fmt, va_list ap)
> {
> char *nfmt;
> - va_list ap;
>
> /* best effort to even work in out of memory situations */
> - if (emsg == NULL)
> - logit(LOG_CRIT, "%s", strerror(errno));
> - else {
> - va_start(ap, emsg);
> -
> - if (asprintf(&nfmt, "%s: %s", emsg, strerror(errno)) == -1) {
> + if (fmt) {
> + if (asprintf(&nfmt, "%s: %s", fmt, strerror(errno)) == -1) {
> /* we tried it... */
> - vlog(LOG_CRIT, emsg, ap);
> + vlog(LOG_CRIT, fmt, ap);
> logit(LOG_CRIT, "%s", strerror(errno));
> } else {
> vlog(LOG_CRIT, nfmt, ap);
> free(nfmt);
> }
> - va_end(ap);
> - }
> + } else
> + logit(LOG_CRIT, "%s", strerror(errno));
> +}
> +
> +void
> +log_warn(const char *emsg, ...)
> +{
> + va_list ap;
> +
> + va_start(ap, emsg);
> + vlogerr(LOG_CRIT, emsg, ap);
> + va_end(ap);
> }
>
> void
> @@ -129,25 +133,27 @@ log_debug(const char *emsg, ...)
> }
>
> void
> -fatal(const char *emsg)
> +fatal(const char *emsg, ...)
> {
> - if (emsg == NULL)
> - logit(LOG_CRIT, "fatal: %s", strerror(errno));
> - else
> - if (errno)
> - logit(LOG_CRIT, "fatal: %s: %s",
> - emsg, strerror(errno));
> - else
> - logit(LOG_CRIT, "fatal: %s", emsg);
> + va_list ap;
> +
> + va_start(ap, emsg);
> + vlogerr(LOG_CRIT, emsg, ap);
> + va_end(ap);
>
> exit(1);
> }
>
> void
> -fatalx(const char *emsg)
> +fatalx(const char *emsg, ...)
> {
> - errno = 0;
> - fatal(emsg);
> + va_list ap;
> +
> + va_start(ap, emsg);
> + vlog(LOG_CRIT, emsg, ap);
> + va_end(ap);
> +
> + exit(1);
> }
>
> const char *
> diff --git a/src/usr.sbin/ntpd/ntpd.h b/src/usr.sbin/ntpd/ntpd.h
> index 4a768d8..31bc5a0 100644
> --- a/src/usr.sbin/ntpd/ntpd.h
> +++ b/src/usr.sbin/ntpd/ntpd.h
> @@ -269,8 +269,8 @@ void log_warn(const char *, ...);
> void log_warnx(const char *, ...);
> void log_info(const char *, ...);
> void log_debug(const char *, ...);
> -void fatal(const char *);
> -void fatalx(const char *);
> +void fatal(const char *, ...);
> +void fatalx(const char *, ...);
> const char *log_sockaddr(struct sockaddr *);
>
> /* ntp.c */
> --
> 1.9.1
>
--
Gilles Chehade
https://www.poolp.org @poolpOrg