From 6bb9c4e01fd8a032f8c8aaad2b2f35aca7814c4e Mon Sep 17 00:00:00 2001 From: Vincent Bernat Date: Tue, 29 Sep 2009 17:10:10 +0200 Subject: [PATCH] Add support for libc not defining __progname symbol. This may happen with ancient releases of uClibc. --- configure.ac | 1 + m4/progname.m4 | 14 ++++++++++++++ src/agent.c | 4 ++++ src/lldpctl.c | 10 +++++++--- src/lldpd.c | 8 ++++++-- src/lldpd.h | 2 +- src/log.c | 6 ++---- 7 files changed, 35 insertions(+), 10 deletions(-) create mode 100644 m4/progname.m4 diff --git a/configure.ac b/configure.ac index 99ca1401..fba0ae1a 100644 --- a/configure.ac +++ b/configure.ac @@ -116,6 +116,7 @@ AC_TYPE_SSIZE_T AC_TYPE_UINT16_T AC_TYPE_UINT32_T AC_TYPE_UINT8_T +lldp_CHECK___PROGNAME # Checks for library functions. AC_FUNC_CHOWN diff --git a/m4/progname.m4 b/m4/progname.m4 new file mode 100644 index 00000000..28ac1748 --- /dev/null +++ b/m4/progname.m4 @@ -0,0 +1,14 @@ +# +# lldp_CHECK___PROGNAME +# +AC_DEFUN([lldp_CHECK___PROGNAME],[ + AC_CACHE_CHECK([whether libc defines __progname], lldp_cv_check___progname, [ + AC_TRY_LINK([], + [ extern char *__progname; printf("%s", __progname); ], + [ lldp_cv_check___progname="yes" ], + [ lldp_cv_check___progname="no" ]) + ]) + if test x"$lldp_cv_check___progname" = x"yes"; then + AC_DEFINE([HAVE___PROGNAME], [1], [Define if libc defines __progname]) + fi +]) diff --git a/src/agent.c b/src/agent.c index 01b50a18..a1bfc8f9 100644 --- a/src/agent.c +++ b/src/agent.c @@ -1262,7 +1262,11 @@ void agent_init(struct lldpd *cfg, int debug) { int rc; +#ifdef HAVE___PROGNAME extern char *__progname; +#else +# define __progname "lldpd" +#endif LLOG_INFO("Enable SNMP subagent"); netsnmp_enable_subagent(); diff --git a/src/lldpctl.c b/src/lldpctl.c index e0509a39..92256115 100644 --- a/src/lldpctl.c +++ b/src/lldpctl.c @@ -35,6 +35,12 @@ TAILQ_HEAD(vlans, lldpd_vlan); (unsigned int)ntohl(((int)(x >> 32)))) #define htonll(x) ntohll(x) +#ifdef HAVE___PROGNAME +extern const char *__progname; +#else +# define __progname "lldpctl" +#endif + struct value_string { int value; @@ -131,8 +137,6 @@ static const struct value_string operational_mau_type_values[] = { static void usage(void) { - extern const char *__progname; - fprintf(stderr, "usage: %s [options]\n", __progname); fprintf(stderr, "see manual page lldpctl(8) for more information\n"); exit(1); @@ -1150,7 +1154,7 @@ main(int argc, char *argv[]) } } - log_init(debug); + log_init(debug, __progname); if ((s = ctl_connect(LLDPD_CTL_SOCKET)) == -1) fatalx("unable to connect to socket " LLDPD_CTL_SOCKET); diff --git a/src/lldpd.c b/src/lldpd.c index 2d1b336a..be643252 100644 --- a/src/lldpd.c +++ b/src/lldpd.c @@ -86,11 +86,15 @@ static void lldpd_med(struct lldpd_chassis *); #endif static char **saved_argv; +#ifdef HAVE___PROGNAME +extern const char *__progname; +#else +# define __progname "lldpd" +#endif static void usage(void) { - extern const char *__progname; fprintf(stderr, "usage: %s [options]\n", __progname); fprintf(stderr, "see manual page lldpd(8) for more information\n"); exit(1); @@ -811,7 +815,7 @@ lldpd_main(int argc, char *argv[]) } } - log_init(debug); + log_init(debug, __progname); if (!debug) { int pid; diff --git a/src/lldpd.h b/src/lldpd.h index 7ec53642..4db9a07e 100644 --- a/src/lldpd.h +++ b/src/lldpd.h @@ -414,7 +414,7 @@ char *dmi_asset(void); #endif /* log.c */ -void log_init(int); +void log_init(int, const char *); void log_warn(const char *, ...); #define LLOG_WARN(x,...) log_warn("%s: " x, __FUNCTION__ , ## __VA_ARGS__) void log_warnx(const char *, ...); diff --git a/src/log.c b/src/log.c index 3f85eda9..8e0c0de4 100644 --- a/src/log.c +++ b/src/log.c @@ -32,14 +32,12 @@ static void vlog(int, const char *, va_list); static void logit(int, const char *, ...); void -log_init(int n_debug) +log_init(int n_debug, const char *progname) { - extern char *__progname; - debug = n_debug; if (!debug) - openlog(__progname, LOG_PID | LOG_NDELAY, LOG_DAEMON); + openlog(progname, LOG_PID | LOG_NDELAY, LOG_DAEMON); tzset(); } -- 2.39.5