]> git.ipfire.org Git - thirdparty/dhcpcd.git/commitdiff
logerr: Use macros to call log functions
authorSergey Nikiforov <Sergey.Nikiforov@kaspersky.com>
Tue, 11 Feb 2020 11:07:13 +0000 (11:07 +0000)
committerRoy Marples <roy@marples.name>
Thu, 20 Feb 2020 16:26:23 +0000 (16:26 +0000)
This allows downstream implementions to inject their own data
into the log message and/or supply new logging targets whilst
preserving macros such as __FILE__ and __LINE__.

src/dhcp.c
src/dhcp6.c
src/dhcpcd.c
src/if-linux.c
src/if.c
src/ipv6.c
src/ipv6nd.c
src/logerr.c
src/logerr.h

index dd59945f1422c38645032217dd67b523887a6e27..ac2c6ea709c97ab69cd2482aab927bc6a092df49 100644 (file)
@@ -56,6 +56,7 @@
 #include <stdlib.h>
 #include <string.h>
 #include <unistd.h>
+#include <syslog.h>
 
 #define ELOOP_QUEUE    ELOOP_DHCP
 #include "config.h"
@@ -2758,7 +2759,7 @@ whitelisted_ip(const struct if_options *ifo, in_addr_t addr)
 }
 
 static void
-log_dhcp(logfunc_t *logfunc, const char *msg,
+log_dhcp(int loglevel, const char *msg,
     const struct interface *ifp, const struct bootp *bootp, size_t bootp_len,
     const struct in_addr *from, int ad)
 {
@@ -2805,10 +2806,10 @@ log_dhcp(logfunc_t *logfunc, const char *msg,
                print_string(sname, sizeof(sname), OT_STRING | OT_DOMAIN,
                    bootp->sname, sizeof(bootp->sname));
                if (a == NULL)
-                       logfunc("%s: %s %s %s `%s'",
+                       logmessage(loglevel, "%s: %s %s %s `%s'",
                            ifp->name, msg, tfrom, inet_ntoa(addr), sname);
                else
-                       logfunc("%s: %s %s %s %s `%s'",
+                       logmessage(loglevel, "%s: %s %s %s %s `%s'",
                            ifp->name, msg, a, tfrom, inet_ntoa(addr), sname);
        } else {
                if (r != 0) {
@@ -2816,10 +2817,10 @@ log_dhcp(logfunc_t *logfunc, const char *msg,
                        addr = *from;
                }
                if (a == NULL)
-                       logfunc("%s: %s %s %s",
+                       logmessage(loglevel, "%s: %s %s %s",
                            ifp->name, msg, tfrom, inet_ntoa(addr));
                else
-                       logfunc("%s: %s %s %s %s",
+                       logmessage(loglevel, "%s: %s %s %s %s",
                            ifp->name, msg, a, tfrom, inet_ntoa(addr));
        }
        free(a);
@@ -2949,7 +2950,7 @@ dhcp_handledhcp(struct interface *ifp, struct bootp *bootp, size_t bootp_len,
                    (uint8_t *)bootp, bootp_len, 4, type,
                    auth, auth_len) == NULL)
                {
-                       LOGDHCP0(logerrx, "authentication failed");
+                       LOGDHCP0(LOG_ERR, "authentication failed");
                        return;
                }
                if (state->auth.token)
@@ -2959,10 +2960,10 @@ dhcp_handledhcp(struct interface *ifp, struct bootp *bootp, size_t bootp_len,
                        loginfox("%s: accepted reconfigure key", ifp->name);
        } else if (ifo->auth.options & DHCPCD_AUTH_SEND) {
                if (ifo->auth.options & DHCPCD_AUTH_REQUIRE) {
-                       LOGDHCP0(logerrx, "no authentication");
+                       LOGDHCP0(LOG_ERR, "no authentication");
                        return;
                }
-               LOGDHCP0(logwarnx, "no authentication");
+               LOGDHCP0(LOG_WARNING, "no authentication");
        }
 #endif
 
@@ -2971,20 +2972,20 @@ dhcp_handledhcp(struct interface *ifp, struct bootp *bootp, size_t bootp_len,
                if (from->s_addr == INADDR_ANY ||
                    from->s_addr == INADDR_BROADCAST)
                {
-                       LOGDHCP(logerrx, "discarding Force Renew");
+                       LOGDHCP(LOG_ERR, "discarding Force Renew");
                        return;
                }
 #ifdef AUTH
                if (auth == NULL) {
-                       LOGDHCP(logerrx, "unauthenticated Force Renew");
+                       LOGDHCP(LOG_ERR, "unauthenticated Force Renew");
                        if (ifo->auth.options & DHCPCD_AUTH_REQUIRE)
                                return;
                }
                if (state->state != DHS_BOUND && state->state != DHS_INFORM) {
-                       LOGDHCP(logdebugx, "not bound, ignoring Force Renew");
+                       LOGDHCP(LOG_DEBUG, "not bound, ignoring Force Renew");
                        return;
                }
-               LOGDHCP(loginfox, "Force Renew from");
+               LOGDHCP(LOG_INFO, "Force Renew from");
                /* The rebind and expire timings are still the same, we just
                 * enter the renew state early */
                if (state->state == DHS_BOUND)
@@ -2995,19 +2996,19 @@ dhcp_handledhcp(struct interface *ifp, struct bootp *bootp, size_t bootp_len,
                        dhcp_inform(ifp);
                }
 #else
-               LOGDHCP(logerrx, "unauthenticated Force Renew");
+               LOGDHCP(LOG_ERR, "unauthenticated Force Renew");
 #endif
                return;
        }
 
        if (state->state == DHS_BOUND) {
-               LOGDHCP(logdebugx, "bound, ignoring");
+               LOGDHCP(LOG_DEBUG, "bound, ignoring");
                return;
        }
 
        if (state->state == DHS_PROBE) {
                /* Ignore any DHCP messages whilst probing a lease to bind. */
-               LOGDHCP(logdebugx, "probing, ignoring");
+               LOGDHCP(LOG_DEBUG, "probing, ignoring");
                return;
        }
 
@@ -3020,7 +3021,7 @@ dhcp_handledhcp(struct interface *ifp, struct bootp *bootp, size_t bootp_len,
                    get_option_uint8(ifp->ctx, &tmp,
                    bootp, bootp_len, (uint8_t)i) == 0)
                {
-                       LOGDHCP(logwarnx, "reject DHCP");
+                       LOGDHCP(LOG_WARNING, "reject DHCP");
                        return;
                }
        }
@@ -3031,12 +3032,12 @@ dhcp_handledhcp(struct interface *ifp, struct bootp *bootp, size_t bootp_len,
                    get_option_addr(ifp->ctx, &addr,
                    bootp, bootp_len, DHO_SERVERID) == -1)
                {
-                       LOGDHCP(logwarnx, "reject NAK");
+                       LOGDHCP(LOG_WARNING, "reject NAK");
                        return;
                }
 
                /* We should restart on a NAK */
-               LOGDHCP(logwarnx, "NAK:");
+               LOGDHCP(LOG_WARNING, "NAK:");
                if ((msg = get_option_string(ifp->ctx,
                    bootp, bootp_len, DHO_MESSAGE)))
                {
@@ -3076,14 +3077,14 @@ dhcp_handledhcp(struct interface *ifp, struct bootp *bootp, size_t bootp_len,
                         * always true. */
                        if (type == 0 && i == DHO_SERVERID)
                                continue;
-                       LOGDHCP(logwarnx, "reject DHCP");
+                       LOGDHCP(LOG_WARNING, "reject DHCP");
                        return;
                }
        }
 
        /* DHCP Auto-Configure, RFC 2563 */
        if (type == DHCP_OFFER && bootp->yiaddr == 0) {
-               LOGDHCP(logwarnx, "no address given");
+               LOGDHCP(LOG_WARNING, "no address given");
                if ((msg = get_option_string(ifp->ctx,
                    bootp, bootp_len, DHO_MESSAGE)))
                {
@@ -3097,14 +3098,14 @@ dhcp_handledhcp(struct interface *ifp, struct bootp *bootp, size_t bootp_len,
                {
                        switch (tmp) {
                        case 0:
-                               LOGDHCP(logwarnx, "IPv4LL disabled from");
+                               LOGDHCP(LOG_WARNING, "IPv4LL disabled from");
                                ipv4ll_drop(ifp);
 #ifdef ARP
                                arp_drop(ifp);
 #endif
                                break;
                        case 1:
-                               LOGDHCP(logwarnx, "IPv4LL enabled from");
+                               LOGDHCP(LOG_WARNING, "IPv4LL enabled from");
                                ipv4ll_start(ifp);
                                break;
                        default:
@@ -3127,14 +3128,14 @@ dhcp_handledhcp(struct interface *ifp, struct bootp *bootp, size_t bootp_len,
            &&
            (bootp->yiaddr == INADDR_ANY || bootp->yiaddr == INADDR_BROADCAST))
        {
-               LOGDHCP(logwarnx, "reject invalid address");
+               LOGDHCP(LOG_WARNING, "reject invalid address");
                return;
        }
 
 #ifdef IN_IFF_DUPLICATED
        ia = ipv4_iffindaddr(ifp, &lease->addr, NULL);
        if (ia && ia->addr_flags & IN_IFF_DUPLICATED) {
-               LOGDHCP(logwarnx, "declined duplicate address");
+               LOGDHCP(LOG_WARNING, "declined duplicate address");
                if (type)
                        dhcp_decline(ifp);
                ipv4_deladdr(ia, 0);
@@ -3165,7 +3166,7 @@ dhcp_handledhcp(struct interface *ifp, struct bootp *bootp, size_t bootp_len,
                        goto rapidcommit;
                }
 
-               LOGDHCP(loginfox, "offered");
+               LOGDHCP(LOG_INFO, "offered");
                if (state->offer_len < bootp_len) {
                        free(state->offer);
                        if ((state->offer = malloc(bootp_len)) == NULL) {
@@ -3207,13 +3208,13 @@ dhcp_handledhcp(struct interface *ifp, struct bootp *bootp, size_t bootp_len,
 
        if (type) {
                if (type == DHCP_OFFER) {
-                       LOGDHCP(logwarnx, "ignoring offer of");
+                       LOGDHCP(LOG_WARNING, "ignoring offer of");
                        return;
                }
 
                /* We should only be dealing with acks */
                if (type != DHCP_ACK) {
-                       LOGDHCP(logerr, "not ACK or OFFER");
+                       LOGDHCP(LOG_ERR, "not ACK or OFFER");
                        return;
                }
 
@@ -3225,14 +3226,14 @@ dhcp_handledhcp(struct interface *ifp, struct bootp *bootp, size_t bootp_len,
                            DHO_RAPIDCOMMIT, NULL))
                                state->state = DHS_REQUEST;
                        else {
-                               LOGDHCP(logdebugx, "ignoring ack of");
+                               LOGDHCP(LOG_DEBUG, "ignoring ack of");
                                return;
                        }
                }
 
 rapidcommit:
                if (!(ifo->options & DHCPCD_INFORM))
-                       LOGDHCP(logdebugx, "acknowledged");
+                       LOGDHCP(LOG_DEBUG, "acknowledged");
                else
                    ifo->options &= ~DHCPCD_STATIC;
        }
index 45f87b7bc66ced6c95ee6d3971092ee26a6e79a0..3ad5d9ca72c9cdb2a1fc86402c6238ac8f0e0f3a 100644 (file)
@@ -44,6 +44,7 @@
 #include <string.h>
 #include <unistd.h>
 #include <fcntl.h>
+#include <syslog.h>
 
 #define ELOOP_QUEUE    ELOOP_DHCP6
 #include "config.h"
@@ -1903,7 +1904,7 @@ dhcp6_checkstatusok(const struct interface *ifp,
        void * (*f)(void *, size_t, uint16_t, uint16_t *), *farg;
        char buf[32], *sbuf;
        const char *status;
-       logfunc_t *logfunc;
+       int loglevel;
 
        state = D6_STATE(ifp);
        f = p ? dhcp6_findoption : dhcp6_findmoption;
@@ -1952,10 +1953,10 @@ dhcp6_checkstatusok(const struct interface *ifp,
        }
 
        if (state->lerror == code || state->state == DH6S_INIT)
-               logfunc = logdebugx;
+               loglevel = LOG_DEBUG;
        else
-               logfunc = logerrx;
-       logfunc("%s: DHCPv6 REPLY: %s", ifp->name, status);
+               loglevel = LOG_ERR;
+       logmessage(loglevel, "%s: DHCPv6 REPLY: %s", ifp->name, status);
        free(sbuf);
        state->lerror = code;
        errno = 0;
@@ -2793,16 +2794,16 @@ dhcp6_delegate_prefix(struct interface *ifp)
                        if (!(ap->flags & IPV6_AF_DELEGATEDPFX))
                                continue;
                        if (!(ap->flags & IPV6_AF_DELEGATEDLOG)) {
-                               logfunc_t *logfunc;
+                               int loglevel;
 
                                if (ap->flags & IPV6_AF_NEW)
-                                       logfunc = loginfox;
+                                       loglevel = LOG_INFO;
                                else
-                                       logfunc = logdebugx;
+                                       loglevel = LOG_DEBUG;
                                /* We only want to log this the once as we loop
                                 * through many interfaces first. */
                                ap->flags |= IPV6_AF_DELEGATEDLOG;
-                               logfunc("%s: delegated prefix %s",
+                               logmessage(loglevel, "%s: delegated prefix %s",
                                    ifp->name, ap->saddr);
                                ap->flags &= ~IPV6_AF_NEW;
                        }
@@ -2936,7 +2937,7 @@ dhcp6_bind(struct interface *ifp, const char *op, const char *sfrom)
        struct dhcp6_state *state = D6_STATE(ifp);
        bool timedout = (op == NULL), has_new = false, confirmed;
        struct ipv6_addr *ia;
-       logfunc_t *lognewinfo;
+       int loglevel;
        struct timespec now;
 
        TAILQ_FOREACH(ia, &state->addrs, next) {
@@ -2945,9 +2946,10 @@ dhcp6_bind(struct interface *ifp, const char *op, const char *sfrom)
                        break;
                }
        }
-       lognewinfo = has_new ? loginfox : logdebugx;
+       loglevel = has_new ? LOG_INFO : LOG_DEBUG;
        if (!timedout) {
-               lognewinfo("%s: %s received from %s", ifp->name, op, sfrom);
+               logmessage(loglevel, "%s: %s received from %s",
+                   ifp->name, op, sfrom);
                /* If we delegated from an unconfirmed lease we MUST drop
                 * them now. Hopefully we have new delegations. */
                if (state->reason != NULL &&
@@ -3107,20 +3109,21 @@ dhcp6_bind(struct interface *ifp, const char *op, const char *sfrom)
                        dhcp6_deprecateaddrs(&state->addrs);
 
                if (state->state == DH6S_INFORMED)
-                       lognewinfo("%s: refresh in %"PRIu32" seconds",
+                       logmessage(loglevel, "%s: refresh in %"PRIu32" seconds",
                            ifp->name, state->renew);
                else if (state->renew == ND6_INFINITE_LIFETIME)
-                       lognewinfo("%s: leased for infinity", ifp->name);
+                       logmessage(loglevel, "%s: leased for infinity",
+                           ifp->name);
                else if (state->renew || state->rebind)
-                       lognewinfo("%s: renew in %"PRIu32", "
+                       logmessage(loglevel, "%s: renew in %"PRIu32", "
                            "rebind in %"PRIu32", "
                            "expire in %"PRIu32" seconds",
                            ifp->name,
                            state->renew, state->rebind, state->expire);
                else if (state->expire == 0)
-                       lognewinfo("%s: will expire", ifp->name);
+                       logmessage(loglevel, "%s: will expire", ifp->name);
                else
-                       lognewinfo("%s: expire in %"PRIu32" seconds",
+                       logmessage(loglevel, "%s: expire in %"PRIu32" seconds",
                            ifp->name, state->expire);
                rt_build(ifp->ctx, AF_INET6);
                if (!confirmed && !timedout)
index 7d55020ba96053c980a2320d22955c35ab71f16c..581050e0a293cbf8101d310b27e5604b8d912da8 100644 (file)
@@ -47,6 +47,7 @@ const char dhcpcd_copyright[] = "Copyright (c) 2006-2019 Roy Marples";
 #include <string.h>
 #include <unistd.h>
 #include <time.h>
+#include <syslog.h>
 
 #include "config.h"
 #include "arp.h"
@@ -2044,11 +2045,11 @@ printpidfile:
        }
        if (ifp == NULL) {
                if (ctx.ifc == 0) {
-                       logfunc_t *logfunc;
+                       int loglevel;
 
-                       logfunc = ctx.options & DHCPCD_INACTIVE ?
-                           logdebugx : logerrx;
-                       logfunc("no valid interfaces found");
+                       loglevel = ctx.options & DHCPCD_INACTIVE ?
+                           LOG_DEBUG : LOG_ERR;
+                       logmessage(loglevel, "no valid interfaces found");
                } else
                        goto exit_failure;
                if (!(ctx.options & DHCPCD_LINK)) {
@@ -2092,11 +2093,11 @@ printpidfile:
                    ctx.options & DHCPCD_LINK &&
                    !(ctx.options & DHCPCD_WAITIP))
                {
-                       logfunc_t *logfunc;
+                       int loglevel;
 
-                       logfunc = ctx.options & DHCPCD_INACTIVE ?
-                           logdebugx : logwarnx;
-                       logfunc("no interfaces have a carrier");
+                       loglevel = ctx.options & DHCPCD_INACTIVE ?
+                           LOG_DEBUG : LOG_WARNING;
+                       logmessage(loglevel, "no interfaces have a carrier");
                        if (dhcpcd_daemonise(&ctx))
                                goto exit_success;
                } else if (t > 0 &&
index 40a9f47b378ae46e0cca1b84f5a78eb2052e9de0..d75d76240f57841330c8aaeee6a004931692e327 100644 (file)
@@ -1873,11 +1873,10 @@ if_setup_inet6(const struct interface *ifp)
        snprintf(path, sizeof(path), "%s/%s/accept_ra", p_conf, ifp->name);
        ra = check_proc_int(path);
        if (ra == -1) {
-               logfunc_t *logfunc = errno == ENOENT? logdebug : logwarn;
-
                /* The sysctl probably doesn't exist, but this isn't an
                 * error as such so just log it and continue */
-               logfunc("%s", path);
+               if (errno != ENOENT)
+                       logerr("%s: %s", __func__, path);
        } else if (ra != 0) {
                if (if_writepathuint(path, 0) == -1)
                        logerr("%s: %s", __func__, path);
index b2d390874827cf86ad33480c45fba8de7cd18ab6..76df1e16fe3329dda3da3090e75990862349d139 100644 (file)
--- a/src/if.c
+++ b/src/if.c
@@ -30,6 +30,7 @@
 #include <sys/types.h>
 #include <sys/ioctl.h>
 #include <sys/socket.h>
+#include <syslog.h>
 
 #include "config.h"
 
@@ -408,8 +409,9 @@ if_discover(struct dhcpcd_ctx *ctx, struct ifaddrs **ifaddrs,
 #endif
 
                if (if_vimaster(ctx, spec.devname) == 1) {
-                       logfunc_t *logfunc = argc != 0 ? logerrx : logdebugx;
-                       logfunc("%s: is a Virtual Interface Master, skipping",
+                       int loglevel = argc != 0 ? LOG_ERR : LOG_DEBUG;
+                       logmessage(loglevel,
+                           "%s: is a Virtual Interface Master, skipping",
                            spec.devname);
                        continue;
                }
index c81aac86053018f1490e06503eab9f3477662cd8..008f522cd78053336d300b3eb3a8d5cf3d609d01 100644 (file)
@@ -36,6 +36,7 @@
 #include <net/route.h>
 #include <netinet/in.h>
 #include <netinet/if_ether.h>
+#include <syslog.h>
 
 #include "config.h"
 
@@ -616,7 +617,7 @@ ipv6_addaddr1(struct ipv6_addr *ia, const struct timespec *now)
 {
        struct interface *ifp;
        uint32_t pltime, vltime;
-       __printflike(1, 2) void (*logfunc)(const char *, ...);
+       int loglevel;
 #ifdef ND6_ADVERTISE
        bool vltime_was_zero = ia->prefix_vltime == 0;
 #endif
@@ -677,8 +678,8 @@ ipv6_addaddr1(struct ipv6_addr *ia, const struct timespec *now)
                }
        }
 
-       logfunc = ia->flags & IPV6_AF_NEW ? loginfox : logdebugx;
-       logfunc("%s: adding %saddress %s", ifp->name,
+       loglevel = ia->flags & IPV6_AF_NEW ? LOG_INFO : LOG_DEBUG;
+       logmessage(loglevel, "%s: adding %saddress %s", ifp->name,
 #ifdef IPV6_AF_TEMPORARY
            ia->flags & IPV6_AF_TEMPORARY ? "temporary " : "",
 #else
index b33ef31e3e905511e21e778c65ca735f9e17f133..586ad943a10e70aeab69e9e2d870b9871654fae9 100644 (file)
@@ -42,6 +42,7 @@
 #include <stdlib.h>
 #include <string.h>
 #include <unistd.h>
+#include <syslog.h>
 
 #define ELOOP_QUEUE    ELOOP_IPV6ND
 #include "common.h"
@@ -996,7 +997,7 @@ ipv6nd_handlera(struct dhcpcd_ctx *ctx,
        bool new_rap, new_data, has_address;
        uint32_t old_lifetime;
        int ifmtu;
-       __printflike(1, 2) void (*logfunc)(const char *, ...);
+       int loglevel;
 #ifdef IPV6_MANAGETEMPADDR
        uint8_t new_ap;
 #endif
@@ -1097,8 +1098,9 @@ ipv6nd_handlera(struct dhcpcd_ctx *ctx,
         * much needless log spam. */
        if (rap->willexpire)
                new_data = true;
-       logfunc = new_data || !rap->isreachable ? loginfox : logdebugx,
-       logfunc("%s: Router Advertisement from %s", ifp->name, rap->sfrom);
+       loglevel = new_data || !rap->isreachable ? LOG_INFO : LOG_DEBUG,
+       logmessage(loglevel, "%s: Router Advertisement from %s",
+           ifp->name, rap->sfrom);
 
        clock_gettime(CLOCK_MONOTONIC, &rap->acquired);
        rap->flags = nd_ra->nd_ra_flags_reserved;
@@ -1181,15 +1183,15 @@ ipv6nd_handlera(struct dhcpcd_ctx *ctx,
 
                switch (ndo.nd_opt_type) {
                case ND_OPT_PREFIX_INFORMATION:
-                       logfunc = new_data ? logerrx : logdebugx;
+                       loglevel = new_data ? LOG_ERR : LOG_DEBUG;
                        if (ndo.nd_opt_len != 4) {
-                               logfunc("%s: invalid option len for prefix",
+                               logmessage(loglevel, "%s: invalid option len for prefix",
                                    ifp->name);
                                continue;
                        }
                        memcpy(&pi, p, sizeof(pi));
                        if (pi.nd_opt_pi_prefix_len > 128) {
-                               logfunc("%s: invalid prefix len", ifp->name);
+                               logmessage(loglevel, "%s: invalid prefix len", ifp->name);
                                continue;
                        }
                        /* nd_opt_pi_prefix is not aligned. */
@@ -1198,13 +1200,13 @@ ipv6nd_handlera(struct dhcpcd_ctx *ctx,
                        if (IN6_IS_ADDR_MULTICAST(&pi_prefix) ||
                            IN6_IS_ADDR_LINKLOCAL(&pi_prefix))
                        {
-                               logfunc("%s: invalid prefix in RA", ifp->name);
+                               logmessage(loglevel, "%s: invalid prefix in RA", ifp->name);
                                continue;
                        }
                        if (ntohl(pi.nd_opt_pi_preferred_time) >
                            ntohl(pi.nd_opt_pi_valid_time))
                        {
-                               logfunc("%s: pltime > vltime", ifp->name);
+                               logmessage(loglevel, "%s: pltime > vltime", ifp->name);
                                continue;
                        }
                        TAILQ_FOREACH(ap, &rap->addrs, next)
@@ -1284,13 +1286,13 @@ ipv6nd_handlera(struct dhcpcd_ctx *ctx,
 
                case ND_OPT_MTU:
                        if (len < sizeof(mtu)) {
-                               logfunc("%s: short MTU option", ifp->name);
+                               logmessage(loglevel, "%s: short MTU option", ifp->name);
                                break;
                        }
                        memcpy(&mtu, p, sizeof(mtu));
                        mtu.nd_opt_mtu_mtu = ntohl(mtu.nd_opt_mtu_mtu);
                        if (mtu.nd_opt_mtu_mtu < IPV6_MMTU) {
-                               logfunc("%s: invalid MTU %d",
+                               logmessage(loglevel, "%s: invalid MTU %d",
                                    ifp->name, mtu.nd_opt_mtu_mtu);
                                break;
                        }
@@ -1298,7 +1300,7 @@ ipv6nd_handlera(struct dhcpcd_ctx *ctx,
                        if (ifmtu == -1)
                                logerr("if_getmtu");
                        else if (mtu.nd_opt_mtu_mtu > (uint32_t)ifmtu) {
-                               logfunc("%s: advertised MTU %d"
+                               logmessage(loglevel, "%s: advertised MTU %d"
                                    " is greater than link MTU %d",
                                    ifp->name, mtu.nd_opt_mtu_mtu, ifmtu);
                                rap->mtu = (uint32_t)ifmtu;
@@ -1307,7 +1309,7 @@ ipv6nd_handlera(struct dhcpcd_ctx *ctx,
                        break;
                case ND_OPT_RDNSS:
                        if (len < sizeof(rdnss)) {
-                               logfunc("%s: short RDNSS option", ifp->name);
+                               logmessage(loglevel, "%s: short RDNSS option", ifp->name);
                                break;
                        }
                        memcpy(&rdnss, p, sizeof(rdnss));
index 59f8cb611241be5788fa1c670dc811a039570ca5..310d1ce093f57f6a13053b3fa72e6e011abe9a69 100644 (file)
@@ -224,7 +224,7 @@ vlogmessage(int pri, const char *fmt, va_list args)
 #pragma GCC diagnostic pop
 #endif
 
-__printflike(2, 3) static void
+__printflike(2, 3) void
 logmessage(int pri, const char *fmt, ...)
 {
        va_list args;
@@ -244,8 +244,18 @@ vlogerrmessage(int pri, const char *fmt, va_list args)
        logmessage(pri, "%s: %s", buf, strerror(_errno));
 }
 
+__printflike(2, 3) void
+logerrmessage(int pri, const char *fmt, ...)
+{
+       va_list args;
+
+       va_start(args, fmt);
+       vlogerrmessage(pri, fmt, args);
+       va_end(args);
+}
+
 void
-logdebug(const char *fmt, ...)
+log_debug(const char *fmt, ...)
 {
        va_list args;
 
@@ -255,7 +265,7 @@ logdebug(const char *fmt, ...)
 }
 
 void
-logdebugx(const char *fmt, ...)
+log_debugx(const char *fmt, ...)
 {
        va_list args;
 
@@ -265,7 +275,7 @@ logdebugx(const char *fmt, ...)
 }
 
 void
-loginfo(const char *fmt, ...)
+log_info(const char *fmt, ...)
 {
        va_list args;
 
@@ -275,7 +285,7 @@ loginfo(const char *fmt, ...)
 }
 
 void
-loginfox(const char *fmt, ...)
+log_infox(const char *fmt, ...)
 {
        va_list args;
 
@@ -285,7 +295,7 @@ loginfox(const char *fmt, ...)
 }
 
 void
-logwarn(const char *fmt, ...)
+log_warn(const char *fmt, ...)
 {
        va_list args;
 
@@ -295,7 +305,7 @@ logwarn(const char *fmt, ...)
 }
 
 void
-logwarnx(const char *fmt, ...)
+log_warnx(const char *fmt, ...)
 {
        va_list args;
 
@@ -305,7 +315,7 @@ logwarnx(const char *fmt, ...)
 }
 
 void
-logerr(const char *fmt, ...)
+log_err(const char *fmt, ...)
 {
        va_list args;
 
@@ -315,7 +325,7 @@ logerr(const char *fmt, ...)
 }
 
 void
-logerrx(const char *fmt, ...)
+log_errx(const char *fmt, ...)
 {
        va_list args;
 
index cca1956ced472548231750142b71e02fa0ef1b95..0d8078dfc5e5c81cfed454839d0923415b8ad531 100644 (file)
 #endif
 #endif /* !__printflike */
 
-__printflike(1, 2) typedef void logfunc_t(const char *, ...);
-
-__printflike(1, 2) void logdebug(const char *, ...);
-__printflike(1, 2) void logdebugx(const char *, ...);
-__printflike(1, 2) void loginfo(const char *, ...);
-__printflike(1, 2) void loginfox(const char *, ...);
-__printflike(1, 2) void logwarn(const char *, ...);
-__printflike(1, 2) void logwarnx(const char *, ...);
-__printflike(1, 2) void logerr(const char *, ...);
+/* Please do not call log_* functions directly, use macros below */
+__printflike(1, 2) void log_debug(const char *, ...);
+__printflike(1, 2) void log_debugx(const char *, ...);
+__printflike(1, 2) void log_info(const char *, ...);
+__printflike(1, 2) void log_infox(const char *, ...);
+__printflike(1, 2) void log_warn(const char *, ...);
+__printflike(1, 2) void log_warnx(const char *, ...);
+__printflike(1, 2) void log_err(const char *, ...);
+__printflike(1, 2) void log_errx(const char *, ...);
 #define        LOGERROR        logerr("%s: %d", __FILE__, __LINE__)
-__printflike(1, 2) void logerrx(const char *, ...);
+
+__printflike(2, 3) void logmessage(int pri, const char *fmt, ...);
+__printflike(2, 3) void logerrmessage(int pri, const char *fmt, ...);
+
+/*
+ * These are macros to prevent taking address of them so
+ * __FILE__, __LINE__, etc can easily be added.
+ *
+ * We should be using
+ * #define loginfox(fmt, __VA_OPT__(,) __VA_ARGS__)
+ * but that requires gcc-8 or clang-6 and we still have a need to support
+ * old OS's without modern compilers.
+ *
+ * Likewise, ##__VA_ARGS__ can't be used as that's a gcc only extension.
+ *
+ * The solution is to put fmt into __VA_ARGS__.
+ * It's not pretty but it's 100% portable.
+ */
+#define logdebug(...)  log_debug(__VA_ARGS__)
+#define logdebugx(...) log_debugx(__VA_ARGS__)
+#define loginfo(...)   log_info(__VA_ARGS__)
+#define loginfox(...)  log_infox(__VA_ARGS__)
+#define logwarn(...)   log_warn(__VA_ARGS__)
+#define logwarnx(...)  log_warnx(__VA_ARGS__)
+#define logerr(...)    log_err(__VA_ARGS__)
+#define logerrx(...)   log_errx(__VA_ARGS__)
 
 void logsetopts(unsigned int);
 #define        LOGERR_DEBUG    (1U << 6)