From d4fd0d73b1d646f3708f1fdcbca0d494dda7e475 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Mon, 21 Aug 2006 16:43:44 +0000 Subject: allow passing NULL as callback function in DNSServiceRegister() as documented by Apple. (closes #57) git-svn-id: file:///home/lennart/svn/public/avahi/trunk@1248 941a03a8-eaeb-0310-b9a0-b1bbd8fe43fe --- avahi-compat-libdns_sd/Makefile.am | 10 ++++++++- avahi-compat-libdns_sd/compat.c | 4 ++-- avahi-compat-libdns_sd/null-test.c | 46 ++++++++++++++++++++++++++++++++++++++ avahi-compat-libdns_sd/txt-test.c | 2 +- 4 files changed, 58 insertions(+), 4 deletions(-) create mode 100644 avahi-compat-libdns_sd/null-test.c diff --git a/avahi-compat-libdns_sd/Makefile.am b/avahi-compat-libdns_sd/Makefile.am index fc1421b..f822135 100644 --- a/avahi-compat-libdns_sd/Makefile.am +++ b/avahi-compat-libdns_sd/Makefile.am @@ -32,7 +32,7 @@ avahi_compat_libdns_sd_HEADERS = dns_sd.h lib_LTLIBRARIES = libdns_sd.la if ENABLE_TESTS -noinst_PROGRAMS = txt-test +noinst_PROGRAMS = txt-test null-test endif libdns_sd_la_SOURCES = \ @@ -52,6 +52,14 @@ txt_test_SOURCES = \ txt_test_CFLAGS = $(AM_CFLAGS) $(PTHREAD_CFLAGS) txt_test_LDADD = $(AM_LDADD) $(PTHREAD_LIBS) $(PTHREAD_CFLAGS) ../avahi-common/libavahi-common.la +null_test_SOURCES = \ + dns_sd.h \ + compat.c \ + null-test.c \ + warn.c warn.h +null_test_CFLAGS = $(AM_CFLAGS) $(PTHREAD_CFLAGS) +null_test_LDADD = $(AM_LDADD) $(PTHREAD_LIBS) $(PTHREAD_CFLAGS) ../avahi-common/libavahi-common.la ../avahi-client/libavahi-client.la + # You can test the compatibility layer by sticking in mDNSResponder's # dns-sd.c source here, naming it "libdns_sd-test.c" and running "make # libdns_sd-test" manually. We do not distribute that file due to diff --git a/avahi-compat-libdns_sd/compat.c b/avahi-compat-libdns_sd/compat.c index effa0e7..b4f2fc6 100644 --- a/avahi-compat-libdns_sd/compat.c +++ b/avahi-compat-libdns_sd/compat.c @@ -790,7 +790,8 @@ static void reg_report_error(DNSServiceRef sdref, DNSServiceErrorType error) { assert(sdref); assert(sdref->n_ref >= 1); - assert(sdref->service_register_callback); + if (!sdref->service_register_callback) + return; regtype = add_trailing_dot(sdref->service_regtype, regtype_fixed, sizeof(regtype_fixed)); domain = add_trailing_dot(sdref->service_domain, domain_fixed, sizeof(domain_fixed)); @@ -983,7 +984,6 @@ DNSServiceErrorType DNSSD_API DNSServiceRegister ( AVAHI_WARN_LINKAGE; assert(ret_sdref); - assert(callback); assert(regtype); if (interface == kDNSServiceInterfaceIndexLocalOnly || flags) { diff --git a/avahi-compat-libdns_sd/null-test.c b/avahi-compat-libdns_sd/null-test.c new file mode 100644 index 0000000..272e9c3 --- /dev/null +++ b/avahi-compat-libdns_sd/null-test.c @@ -0,0 +1,46 @@ +/* $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 +#endif + +#include +#include +#include +#include +#include + +#include +#include + +int main(AVAHI_GCC_UNUSED int argc, AVAHI_GCC_UNUSED char*argv[]) { + + DNSServiceRef ref; + + DNSServiceRegister(&ref, 0, 0, "fucker", "_fuck._tcp", NULL, NULL, 4711, 0, NULL, NULL, NULL); + + sleep(20); + + DNSServiceRefDeallocate(ref); + + return 0; +} diff --git a/avahi-compat-libdns_sd/txt-test.c b/avahi-compat-libdns_sd/txt-test.c index 5999dd4..149a38c 100644 --- a/avahi-compat-libdns_sd/txt-test.c +++ b/avahi-compat-libdns_sd/txt-test.c @@ -28,7 +28,7 @@ #include #include -#include "dns_sd.h" +#include static void hexdump(const void* p, size_t size) { const uint8_t *c = p; -- cgit