diff options
author | Lennart Poettering <lennart@poettering.net> | 2005-10-03 22:57:57 +0000 |
---|---|---|
committer | Lennart Poettering <lennart@poettering.net> | 2005-10-03 22:57:57 +0000 |
commit | 1f8fae6b40c9289d97a025375f04009a5fa2ba3e (patch) | |
tree | ec5a44e0524ee8d4be9b6654093515e5ad688a53 /avahi-core/resolve-service.c | |
parent | d0a9e76f8f858b7dd98c9950a376dc347b230af9 (diff) |
### BACKPORT ### (only second point)
* Make use of avahi_service_name_snprint() wherever it applies
* Fix some potential memory leaks when avahi_server_add() fails
git-svn-id: file:///home/lennart/svn/public/avahi/trunk@684 941a03a8-eaeb-0310-b9a0-b1bbd8fe43fe
Diffstat (limited to 'avahi-core/resolve-service.c')
-rw-r--r-- | avahi-core/resolve-service.c | 21 |
1 files changed, 7 insertions, 14 deletions
diff --git a/avahi-core/resolve-service.c b/avahi-core/resolve-service.c index 4a3cec8..de347e2 100644 --- a/avahi-core/resolve-service.c +++ b/avahi-core/resolve-service.c @@ -398,6 +398,7 @@ AvahiSServiceResolver *avahi_s_service_resolver_new( AvahiSServiceResolver *r; AvahiKey *k; char t[256]; + int ret; assert(server); assert(type); @@ -450,23 +451,15 @@ AvahiSServiceResolver *avahi_s_service_resolver_new( r->interface = interface; r->protocol = protocol; r->user_flags = flags; - - if (name) { - char *n; - size_t l; - - n = t; - l = sizeof(t); - avahi_escape_label((const uint8_t*) name, strlen(name), &n, &l); - snprintf(n, l, ".%s.%s", r->service_type, r->domain_name); - } else - snprintf(t, sizeof(t), "%s.%s", r->service_type, r->domain_name); - + r->record_browser_a = r->record_browser_aaaa = r->record_browser_srv = r->record_browser_txt = NULL; r->time_event = NULL; - AVAHI_LLIST_PREPEND(AvahiSServiceResolver, resolver, server->service_resolvers, r); - r->record_browser_a = r->record_browser_aaaa = r->record_browser_srv = r->record_browser_txt = NULL; + if ((ret = avahi_service_name_snprint(t, sizeof(t), name, r->service_type, r->domain_name)) < 0) { + avahi_server_set_errno(server, ret); + avahi_s_service_resolver_free(r); + return NULL; + } k = avahi_key_new(t, AVAHI_DNS_CLASS_IN, AVAHI_DNS_TYPE_SRV); r->record_browser_srv = avahi_s_record_browser_new(server, interface, protocol, k, flags & ~(AVAHI_LOOKUP_NO_TXT|AVAHI_LOOKUP_NO_ADDRESS), record_browser_callback, r); |