X-Git-Url: http://git.meshlink.io/?a=blobdiff_plain;f=avahi-daemon%2Fstatic-services.c;h=cba22c635cccf8068c820ee42a6522ad5de1700b;hb=d68819ff6dba074f1c5fac5fadd52fcfe154de24;hp=5eba8b2059a8f2461e13a75be9ba91b8eaa65a9e;hpb=58dbdd3113ff75b7262ac2e7a8474550a2dacfd3;p=catta diff --git a/avahi-daemon/static-services.c b/avahi-daemon/static-services.c index 5eba8b2..cba22c6 100644 --- a/avahi-daemon/static-services.c +++ b/avahi-daemon/static-services.c @@ -175,7 +175,7 @@ static void static_service_group_free(StaticServiceGroup *g) { avahi_free(g); } -static void entry_group_callback(AvahiServer *s, AvahiSEntryGroup *eg, AvahiEntryGroupState state, void* userdata) { +static void entry_group_callback(AvahiServer *s, AVAHI_GCC_UNUSED AvahiSEntryGroup *eg, AvahiEntryGroupState state, void* userdata) { StaticServiceGroup *g = userdata; assert(s); @@ -302,6 +302,10 @@ struct xml_userdata { char *buf; }; +#ifndef XMLCALL +#define XMLCALL +#endif + static void XMLCALL xml_start(void *data, const char *el, const char *attr[]) { struct xml_userdata *u = data; @@ -402,7 +406,7 @@ invalid_attr: return; } -static void XMLCALL xml_end(void *data, const char *el) { +static void XMLCALL xml_end(void *data, AVAHI_GCC_UNUSED const char *el) { struct xml_userdata *u = data; assert(u); @@ -609,7 +613,7 @@ static int static_service_group_load(StaticServiceGroup *g) { } if (!XML_ParseBuffer(parser, n, n == 0)) { - avahi_log_error("XML_ParseBuffer() failed at line %d: %s.\n", XML_GetCurrentLineNumber(parser), XML_ErrorString(XML_GetErrorCode(parser))); + avahi_log_error("XML_ParseBuffer() failed at line %d: %s.\n", (int) XML_GetCurrentLineNumber(parser), XML_ErrorString(XML_GetErrorCode(parser))); goto finish; } @@ -648,9 +652,10 @@ static void load_file(char *n) { } } -void static_service_load(void) { +void static_service_load(int in_chroot) { StaticServiceGroup *g, *n; glob_t globbuf; + int globret; char **p; for (g = groups; g; g = n) { @@ -677,8 +682,20 @@ void static_service_load(void) { } memset(&globbuf, 0, sizeof(globbuf)); - if (glob(AVAHI_SERVICE_DIR "/*.service", GLOB_ERR, NULL, &globbuf) != 0) - avahi_log_error("Failed to read service directory."); + if ((globret = glob(in_chroot ? "/services/*.service" : AVAHI_SERVICE_DIR "/*.service", GLOB_ERR, NULL, &globbuf)) != 0) + switch (globret) { + case GLOB_NOSPACE: + avahi_log_error("Not enough memory to read service directory."); + break; + + case GLOB_ABORTED: + avahi_log_error("Failed to read %s.", AVAHI_SERVICE_DIR); + break; + + case GLOB_NOMATCH: + avahi_log_info("No service found in %s.", AVAHI_SERVICE_DIR); + break; + } else { for (p = globbuf.gl_pathv; *p; p++) load_file(*p);