summaryrefslogtreecommitdiffstats
path: root/avahi-compat-libdns_sd
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2005-10-15 15:52:49 +0000
committerLennart Poettering <lennart@poettering.net>2005-10-15 15:52:49 +0000
commitede7f75563fa76ab9b67048fc508a200326938ad (patch)
tree683cd5f42767b3038dc9e3140c47df4036b6ec2b /avahi-compat-libdns_sd
parent39917dc347d738e06b81b9456d61f8415a0a0572 (diff)
* Cleanup warn.c
* Export avahi_warn() and avahi_exe_name() * Don't send \n to syslog * Improve incompatibility and linkage warning message wording git-svn-id: file:///home/lennart/svn/public/avahi/trunk@769 941a03a8-eaeb-0310-b9a0-b1bbd8fe43fe
Diffstat (limited to 'avahi-compat-libdns_sd')
-rw-r--r--avahi-compat-libdns_sd/warn.c84
-rw-r--r--avahi-compat-libdns_sd/warn.h11
2 files changed, 54 insertions, 41 deletions
diff --git a/avahi-compat-libdns_sd/warn.c b/avahi-compat-libdns_sd/warn.c
index 1bdafd0..72c101f 100644
--- a/avahi-compat-libdns_sd/warn.c
+++ b/avahi-compat-libdns_sd/warn.c
@@ -42,44 +42,56 @@
static pthread_mutex_t linkage_mutex = PTHREAD_MUTEX_INITIALIZER;
static int linkage_warning = 0;
-static void get_exe_name(char *t, size_t l) {
- int k;
- char fn[1024];
+const char *avahi_exe_name(void) {
+ static char exe_name[1024] = "";
+ static pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
- /* Yes, I know, this is not portable. But who cares? It's
- * for cosmetics only, anyway. */
+ /* Yes, I know, this is not portable. But who cares? It's for
+ * cosmetics only, anyway. */
- snprintf(fn, sizeof(fn), "/proc/%lu/exe", (unsigned long) getpid());
-
- if ((k = readlink(fn, t, l-1)) < 0)
- snprintf(t, l, "(unknown)");
- else {
- char *slash;
-
- assert((size_t) k <= l-1);
- t[k] = 0;
-
- if ((slash = strrchr(t, '/')))
- memmove(t, slash+1, strlen(slash)+1);
+ pthread_mutex_lock(&mutex);
+
+ if (exe_name[0] == 0) {
+ int k;
+ char fn[64];
+
+ snprintf(fn, sizeof(fn), "/proc/%lu/exe", (unsigned long) getpid());
+
+ if ((k = readlink(fn, exe_name, sizeof(exe_name)-1)) < 0)
+ snprintf(exe_name, sizeof(exe_name), "(unknown)");
+ else {
+ char *slash;
+
+ assert((size_t) k <= sizeof(exe_name)-1);
+ exe_name[k] = 0;
+
+ if ((slash = strrchr(exe_name, '/')))
+ memmove(exe_name, slash+1, strlen(slash)+1);
+ }
}
+
+ pthread_mutex_unlock(&mutex);
+
+ return exe_name;
}
-static void warning(const char *ident, const char *fmt, ...) {
- va_list ap, ap2;
+void avahi_warn(const char *fmt, ...) {
+ char msg[512] = "*** WARNING *** ";
+ va_list ap;
+ size_t n;
- assert(ident);
assert(fmt);
-
+
va_start(ap, fmt);
- va_copy(ap2, ap);
-
- vfprintf(stderr, fmt, ap);
+ n = strlen(msg);
+ vsnprintf(msg + n, sizeof(msg) - n, fmt, ap);
va_end(ap);
+
+ fprintf(stderr, "%s\n", msg);
- openlog(ident, LOG_PID, LOG_USER);
- vsyslog(LOG_WARNING, fmt, ap2);
+ openlog(avahi_exe_name(), LOG_PID, LOG_USER);
+ syslog(LOG_WARNING, "%s", msg);
closelog();
- va_end(ap2);
}
void avahi_warn_linkage(void) {
@@ -90,20 +102,16 @@ void avahi_warn_linkage(void) {
linkage_warning = 1;
pthread_mutex_unlock(&linkage_mutex);
- if (!w && !getenv("AVAHI_COMPAT_NOWARN")) {
- char exename[256];
-
- get_exe_name(exename, sizeof(exename));
-
- warning(exename, "*** WARNING: The application '%s' uses the "COMPAT_LAYER" compatiblity layer of Avahi. Please fix your application to use the native API of Avahi! ***\n", exename);
- }
+ if (!w && !getenv("AVAHI_COMPAT_NOWARN"))
+ avahi_warn("The programme '%s' uses the "COMPAT_LAYER" compatiblity layer of Avahi. "
+ "Please fix your application to use the native API of Avahi!",
+ avahi_exe_name());
}
void avahi_warn_unsupported(const char *function) {
- char exename[256];
- get_exe_name(exename, sizeof(exename));
-
- warning(exename, "*** WARNING: The application '%s' called '%s()' which is not supported (or only supported partially) in the "COMPAT_LAYER" compatiblity layer of Avahi. Please fix your application to use the native API of Avahi! ***\n", exename, function);
+ avahi_warn("The programme '%s' called '%s()' which is not supported (or only supported partially) in the "COMPAT_LAYER" compatiblity layer of Avahi. "
+ "Please fix your application to use the native API of Avahi!",
+ avahi_exe_name(), function);
}
diff --git a/avahi-compat-libdns_sd/warn.h b/avahi-compat-libdns_sd/warn.h
index 7e3568b..da64fab 100644
--- a/avahi-compat-libdns_sd/warn.h
+++ b/avahi-compat-libdns_sd/warn.h
@@ -22,12 +22,17 @@
USA.
***/
+/* This routine works on Linux only, so don't rely on it */
+const char *avahi_exe_name(void);
+
void avahi_warn_unsupported(const char *function);
void avahi_warn_linkage(void);
-#define AVAHI_WARN_LINKAGE { avahi_warn_linkage(); }
-#define AVAHI_WARN_UNSUPPORTED { avahi_warn_linkage(); avahi_warn_unsupported(__FUNCTION__); }
-#define AVAHI_WARN_UNSUPPORTED_ABORT { AVAHI_WARN_UNSUPPORTED; abort(); }
+void avahi_warn(const char *fmt, ...);
+
+#define AVAHI_WARN_LINKAGE do { avahi_warn_linkage(); } while(0)
+#define AVAHI_WARN_UNSUPPORTED do { avahi_warn_linkage(); avahi_warn_unsupported(__FUNCTION__); } while(0)
+#define AVAHI_WARN_UNSUPPORTED_ABORT do { AVAHI_WARN_UNSUPPORTED; abort(); } while(0)
#endif