X-Git-Url: http://git.meshlink.io/?a=blobdiff_plain;f=avahi-daemon%2Fstatic-services.c;h=659d00731f532e9ad99fdfc37d26b9e35e2a3ae3;hb=e63a65b3955b173a3e8d6b78c6377a518a9922d6;hp=898edf3a2144a8f39d2cdaa8f97ff07dd98849b9;hpb=ad7b145ebe82c3a53632eaa6ec75b014d91a7bea;p=catta diff --git a/avahi-daemon/static-services.c b/avahi-daemon/static-services.c index 898edf3..659d007 100644 --- a/avahi-daemon/static-services.c +++ b/avahi-daemon/static-services.c @@ -34,10 +34,11 @@ #include #include -#include +#include #include #include "main.h" +#include "static-services.h" typedef struct StaticService StaticService; typedef struct StaticServiceGroup StaticServiceGroup; @@ -151,7 +152,8 @@ static void static_service_free(StaticService *s) { static void static_service_group_free(StaticServiceGroup *g) { g_assert(g); - remove_static_service_group_from_server(g); + if (g->entry_group) + avahi_entry_group_free(g->entry_group); while (g->services) static_service_free(g->services); @@ -191,9 +193,6 @@ static void add_static_service_group_to_server(StaticServiceGroup *g) { g_assert(g); - if (g->entry_group) - return; - if (g->chosen_name) g_free(g->chosen_name); @@ -201,8 +200,11 @@ static void add_static_service_group_to_server(StaticServiceGroup *g) { g->chosen_name = replacestr(g->name, "%h", avahi_server_get_host_name(avahi_server)); else g->chosen_name = g_strdup(g->name); - - g->entry_group = avahi_entry_group_new(avahi_server, entry_group_callback, g); + + if (!g->entry_group) + g->entry_group = avahi_entry_group_new(avahi_server, entry_group_callback, g); + + g_assert(avahi_entry_group_is_empty(g->entry_group)); for (s = g->services; s; s = s->services_next) { @@ -210,10 +212,12 @@ static void add_static_service_group_to_server(StaticServiceGroup *g) { avahi_server, g->entry_group, -1, AF_UNSPEC, - s->type, g->chosen_name, + g->chosen_name, s->type, s->domain_name, s->host_name, s->port, - avahi_string_list_copy(s->txt_records)) < 0) { - avahi_log_error("Failed to add service '%s' of type '%s', ignoring service group (%s)", g->chosen_name, s->type, g->filename); + s->txt_records) < 0) { + avahi_log_error("Failed to add service '%s' of type '%s', ignoring service group (%s): %s", + g->chosen_name, s->type, g->filename, + avahi_strerror(avahi_server_errno(avahi_server))); remove_static_service_group_from_server(g); return; } @@ -225,10 +229,8 @@ static void add_static_service_group_to_server(StaticServiceGroup *g) { static void remove_static_service_group_from_server(StaticServiceGroup *g) { g_assert(g); - if (g->entry_group) { - avahi_entry_group_free(g->entry_group); - g->entry_group = NULL; - } + if (g->entry_group) + avahi_entry_group_reset(g->entry_group); } typedef enum { @@ -590,8 +592,8 @@ void static_service_load(void) { } memset(&globbuf, 0, sizeof(globbuf)); - if (glob(AVAHI_SERVICE_DIRECTORY "/*.service", GLOB_ERR, NULL, &globbuf) != 0) - avahi_log_error("glob() failed.\n"); + if (glob(AVAHI_SERVICE_DIR "/*.service", GLOB_ERR, NULL, &globbuf) != 0) + avahi_log_error("Failed to read service directory."); else { for (p = globbuf.gl_pathv; *p; p++) load_file(*p);