From: Vincent Bernat Date: Tue, 29 Sep 2009 15:10:10 +0000 (+0200) Subject: Add support for libc not defining __progname symbol. X-Git-Tag: 0.5.0~37^2~4 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=6bb9c4e01fd8a032f8c8aaad2b2f35aca7814c4e;p=thirdparty%2Flldpd.git Add support for libc not defining __progname symbol. This may happen with ancient releases of uClibc. --- 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(); }