int ListHubs(List **list) { AvahiClient *client = NULL; AvahiServiceBrowser *sb = NULL; int error; hublist = ListNew(&CompareHosts, NULL, &free); if (!hublist) { return -1; } spoll = NULL; avahi_handle = NULL; RegisterAtExitFunction(&AtExitDlClose); if (loadavahi() == -1) { CfOut(OUTPUT_LEVEL_ERROR, "", "Avahi was not found"); return -1; } if (!(spoll = avahi_simple_poll_new_ptr())) { CfOut(OUTPUT_LEVEL_ERROR, "", "Failed to create simple poll object."); if (spoll) { avahi_simple_poll_free_ptr(spoll); } return -1; } client = avahi_client_new_ptr(avahi_simple_poll_get_ptr(spoll), 0, client_callback, NULL, &error); if (!client) { CfOut(OUTPUT_LEVEL_ERROR, "", "Failed to create client %s", avahi_strerror_ptr(error)); if (client) { avahi_client_free_ptr(client); } if (spoll) { avahi_simple_poll_free_ptr(spoll); } return -1; } if (!(sb = avahi_service_browser_new_ptr(client, AVAHI_IF_UNSPEC, AVAHI_PROTO_UNSPEC, "_cfenginehub._tcp", NULL, 0, browse_callback, client))) { CfOut(OUTPUT_LEVEL_ERROR, "", "Failed to create service browser: %s", avahi_strerror_ptr(avahi_client_errno_ptr(client))); if (spoll) { avahi_simple_poll_free_ptr(spoll); } if (client) { avahi_client_free_ptr(client); } if (sb) { avahi_service_browser_free_ptr(sb); } return -1; } avahi_simple_poll_loop_ptr(spoll); if (sb) avahi_service_browser_free_ptr(sb); if (client) avahi_client_free_ptr(client); if (spoll) avahi_simple_poll_free_ptr(spoll); *list = hublist; return ListCount(*list); }
static void RegisterPidCleanup(void) { RegisterAtExitFunction(&CleanPidFile); }
static void RegisterLockCleanup(void) { RegisterAtExitFunction(&LocksCleanup); }