diff options
author | Lennart Poettering <lennart@poettering.net> | 2005-10-04 19:22:29 +0000 |
---|---|---|
committer | Lennart Poettering <lennart@poettering.net> | 2005-10-04 19:22:29 +0000 |
commit | c26e445b409215cd2fa380c8ba8e6c8f6115aec5 (patch) | |
tree | e369ea62550f79e930d6cfe7828d504ba54bfdc6 /avahi-compat-libdns_sd/warn.c | |
parent | c26dd156ad10fbfdea9773fd7c56c63ea149ad77 (diff) |
final rename
git-svn-id: file:///home/lennart/svn/public/avahi/trunk@698 941a03a8-eaeb-0310-b9a0-b1bbd8fe43fe
Diffstat (limited to 'avahi-compat-libdns_sd/warn.c')
-rw-r--r-- | avahi-compat-libdns_sd/warn.c | 85 |
1 files changed, 85 insertions, 0 deletions
diff --git a/avahi-compat-libdns_sd/warn.c b/avahi-compat-libdns_sd/warn.c new file mode 100644 index 0000000..859cfb0 --- /dev/null +++ b/avahi-compat-libdns_sd/warn.c @@ -0,0 +1,85 @@ +/* $Id$ */ + +/*** + This file is part of avahi. + + avahi is free software; you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + avahi is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General + Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with avahi; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + USA. +***/ + +#ifdef HAVE_CONFIG_H +#include <config.h> +#endif + +#include <pthread.h> +#include <unistd.h> +#include <limits.h> +#include <stdio.h> +#include <string.h> +#include <stdlib.h> +#include <assert.h> + +#include "warn.h" + +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]; + + /* 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); + } +} + +void avahi_warn_linkage(void) { + int w; + + pthread_mutex_lock(&linkage_mutex); + w = linkage_warning; + linkage_warning = 1; + pthread_mutex_unlock(&linkage_mutex); + + if (!w && !getenv("AVAHI_BONJOUR_NOWARN")) { + char exename[256]; + get_exe_name(exename, sizeof(exename)); + + fprintf(stderr, "*** WARNING: The application '%s' uses the Bonjour compatiblity layer of Avahi. Please fix it to use the native API! ***\n", exename); + } +} + +void avahi_warn_unsupported(const char *function) { + char exename[256]; + get_exe_name(exename, sizeof(exename)); + + fprintf(stderr, "*** WARNING: The application '%s' called '%s()' which is not supported in the Bonjour compatiblity layer of Avahi. Please fix it to use the native API! ***\n", exename, function); +} + + + |