X-Git-Url: http://git.meshlink.io/?a=blobdiff_plain;f=avahi-compat-libdns_sd%2Fcompat.c;h=7c2686a72c9a682727b6da5bc63a9b0c72ae5b87;hb=254dfcb3542d1813dca193d494757dc24ba54b61;hp=88a98a7903b757989fdf8cc5e2d31523baa50948;hpb=fc3830c24fd0341d762a2c4f05198f27fc3ccac0;p=catta diff --git a/avahi-compat-libdns_sd/compat.c b/avahi-compat-libdns_sd/compat.c index 88a98a7..7c2686a 100644 --- a/avahi-compat-libdns_sd/compat.c +++ b/avahi-compat-libdns_sd/compat.c @@ -469,25 +469,26 @@ static void sdref_unref(DNSServiceRef sdref) { } int DNSSD_API DNSServiceRefSockFD(DNSServiceRef sdref) { - if (!sdref || sdref->n_ref <= 0) - return -1; AVAHI_WARN_LINKAGE; + if (!sdref || sdref->n_ref <= 0) + return -1; + return sdref->main_fd; } DNSServiceErrorType DNSSD_API DNSServiceProcessResult(DNSServiceRef sdref) { DNSServiceErrorType ret = kDNSServiceErr_Unknown; - assert(sdref); - assert(sdref->n_ref >= 1); - AVAHI_WARN_LINKAGE; - ASSERT_SUCCESS(pthread_mutex_lock(&sdref->mutex)); - + if (!sdref || sdref->n_ref <= 0) + return kDNSServiceErr_BadParam; + sdref_ref(sdref); + + ASSERT_SUCCESS(pthread_mutex_lock(&sdref->mutex)); /* Cleanup notification socket */ if (read_command(sdref->main_fd) != COMMAND_POLL_DONE) @@ -512,10 +513,10 @@ DNSServiceErrorType DNSSD_API DNSServiceProcessResult(DNSServiceRef sdref) { finish: - sdref_unref(sdref); - ASSERT_SUCCESS(pthread_mutex_unlock(&sdref->mutex)); + sdref_unref(sdref); + return ret; } @@ -610,10 +611,10 @@ DNSServiceErrorType DNSSD_API DNSServiceBrowse( struct type_info type_info; AVAHI_WARN_LINKAGE; - - assert(ret_sdref); - assert(regtype); - assert(callback); + + if (!ret_sdref || !regtype) + return kDNSServiceErr_BadParam; + *ret_sdref = NULL; if (interface == kDNSServiceInterfaceIndexLocalOnly || flags != 0) { AVAHI_WARN_UNSUPPORTED; @@ -707,7 +708,7 @@ static void service_resolver_callback( strcat(full_name, "."); - sdref->service_resolver_callback(sdref, 0, interface, kDNSServiceErr_NoError, full_name, host_name, htons(port), l, p, sdref->context); + sdref->service_resolver_callback(sdref, 0, interface, kDNSServiceErr_NoError, full_name, host_name, htons(port), l, (unsigned char*) p, sdref->context); avahi_free(p); break; @@ -736,11 +737,9 @@ DNSServiceErrorType DNSSD_API DNSServiceResolve( AVAHI_WARN_LINKAGE; - assert(ret_sdref); - assert(name); - assert(regtype); - assert(domain); - assert(callback); + if (!ret_sdref || !name || !regtype || !domain || !callback) + return kDNSServiceErr_BadParam; + *ret_sdref = NULL; if (interface == kDNSServiceInterfaceIndexLocalOnly || flags != 0) { AVAHI_WARN_UNSUPPORTED; @@ -789,9 +788,8 @@ int DNSSD_API DNSServiceConstructFullName ( AVAHI_WARN_LINKAGE; - assert(fullName); - assert(regtype); - assert(domain); + if (!fullName || !regtype || !domain) + return -1; if (avahi_service_name_join(fullName, kDNSServiceMaxDomainName, service, regtype, domain) < 0) return -1; @@ -850,8 +848,9 @@ DNSServiceErrorType DNSSD_API DNSServiceEnumerateDomains( AVAHI_WARN_LINKAGE; - assert(ret_sdref); - assert(callback); + if (!ret_sdref || !callback) + return kDNSServiceErr_BadParam; + *ret_sdref = NULL; if (interface == kDNSServiceInterfaceIndexLocalOnly || (flags != kDNSServiceFlagsBrowseDomains && flags != kDNSServiceFlagsRegistrationDomains)) { @@ -991,6 +990,16 @@ static void reg_client_callback(AvahiClient *s, AvahiClientState state, void* us return; } } + + if (!sdref->service_name_chosen) { + + assert(sdref->service_name); + + if (!(sdref->service_name_chosen = avahi_strdup(sdref->service_name))) { + reg_report_error(sdref, kDNSServiceErr_NoMemory); + return; + } + } /* Register the service */ @@ -1091,9 +1100,14 @@ DNSServiceErrorType DNSSD_API DNSServiceRegister ( AVAHI_WARN_LINKAGE; - assert(ret_sdref); - assert(regtype); - assert(txtRecord || txtLen == 0); + if (!ret_sdref || !regtype) + return kDNSServiceErr_BadParam; + *ret_sdref = NULL; + + if (!txtRecord) { + txtLen = 1; + txtRecord = ""; + } if (interface == kDNSServiceInterfaceIndexLocalOnly || flags) { AVAHI_WARN_UNSUPPORTED; @@ -1201,10 +1215,12 @@ DNSServiceErrorType DNSSD_API DNSServiceUpdateRecord( int ret = kDNSServiceErr_Unknown; AvahiStringList *txt = NULL; - assert(sdref); AVAHI_WARN_LINKAGE; + if (!sdref || sdref->n_ref <= 0) + return kDNSServiceErr_BadParam; + if (flags || rref) { AVAHI_WARN_UNSUPPORTED; return kDNSServiceErr_Unsupported;