]> git.meshlink.io Git - catta/blobdiff - avahi-utils/avahi-browse.c
Allow storing the service type database as Solaris DBM file, alternatively to gdbm...
[catta] / avahi-utils / avahi-browse.c
index 4d427cf2f465601858392be907f7d4f7fd57984c..248b6518b28b5af36420f2177791f858beaa2a7b 100644 (file)
@@ -43,7 +43,7 @@
 
 #include "sigint.h"
 
-#ifdef HAVE_GDBM
+#if defined(HAVE_GDBM) || defined(HAVE_DBM)
 #include "stdb.h"
 #endif
 
@@ -65,7 +65,7 @@ typedef struct Config {
     Command command;
     int resolve;
     int no_fail;
-#ifdef HAVE_GDBM
+#if defined(HAVE_GDBM) || defined(HAVE_DBM)
     int no_db_lookup;
 #endif
 } Config;
@@ -127,8 +127,8 @@ static ServiceInfo *find_service(AvahiIfIndex interface, AvahiProtocol protocol,
         if (i->interface == interface &&
             i->protocol == protocol &&
             strcasecmp(i->name, name) == 0 &&
-            avahi_domain_equal(i->type, type) == 0 &&
-            avahi_domain_equal(i->domain, domain) == 0)
+            avahi_domain_equal(i->type, type) &&
+            avahi_domain_equal(i->domain, domain))
 
             return i;
 
@@ -138,7 +138,7 @@ static ServiceInfo *find_service(AvahiIfIndex interface, AvahiProtocol protocol,
 static void print_service_line(Config *config, char c, AvahiIfIndex interface, AvahiProtocol protocol, const char *name, const char *type, const char *domain) {
     char ifname[IF_NAMESIZE];
 
-#ifdef HAVE_GDBM
+#if defined(HAVE_GDBM) || defined(HAVE_DBM)
     if (!config->no_db_lookup)
         type = stdb_lookup(type);
 #endif
@@ -148,6 +148,7 @@ static void print_service_line(Config *config, char c, AvahiIfIndex interface, A
            interface != AVAHI_IF_UNSPEC ? if_indextoname(interface, ifname) : "n/a",
            protocol != AVAHI_PROTO_UNSPEC ? avahi_proto_to_string(protocol) : "n/a", 
            n_columns-35, name, type, domain);
+    fflush(stdout);
 }
 
 static void service_resolver_callback(
@@ -206,6 +207,7 @@ static void service_resolver_callback(
     assert(n_resolving > 0);
     n_resolving--;
     check_terminate(i->config);
+    fflush(stdout);
 }
 
 static ServiceInfo *add_service(Config *c, AvahiIfIndex interface, AvahiProtocol protocol, const char *name, const char *type, const char *domain) {
@@ -568,15 +570,21 @@ static void client_callback(AvahiClient *c, AvahiClientState state, AVAHI_GCC_UN
             if (config->verbose)
                 fprintf(stderr, "Waiting for daemon ...\n");
 
-                break;
+            break;
     }
 }
 
 static void help(FILE *f, const char *argv0) {
-    fprintf(f,
-            "%s [options] <service type>\n"
-            "%s [options] -a\n"
-            "%s [options] -D\n\n"
+    if (strstr(argv0, "domain"))
+        fprintf(f, "%s [options] \n\n", argv0);
+    else
+        fprintf(f,
+                "%s [options] <service type>\n"
+                "%s [options] -a\n"
+                "%s [options] -D\n\n",
+                argv0, argv0, argv0);
+
+            fprintf(f, 
             "    -h --help            Show this help\n"
             "    -V --version         Show version\n"
             "    -D --browse-domains  Browse for browsing domains instead of services\n"
@@ -587,14 +595,14 @@ static void help(FILE *f, const char *argv0) {
             "    -c --cache           Terminate after dumping all entries from the cache\n"
             "    -l --ignore-local    Ignore local services\n"
             "    -r --resolve         Resolve services found\n"
-            "    -f --no-fail         Don't fail if the server is not available\n"
-#ifdef HAVE_GDBM
+            "    -f --no-fail         Don't fail if the daemon is not available\n"
+#if defined(HAVE_GDBM) || defined(HAVE_DBM)
             "    -k --no-db-lookup    Don't lookup service types\n"
 #endif
-            , argv0, argv0, argv0);
+            );
 }
 
-static int parse_command_line(Config *c, int argc, char *argv[]) {
+static int parse_command_line(Config *c, const char *argv0, int argc, char *argv[]) {
     int o;
 
     static const struct option long_options[] = {
@@ -609,7 +617,7 @@ static int parse_command_line(Config *c, int argc, char *argv[]) {
         { "ignore-local",   no_argument,       NULL, 'l' },
         { "resolve",        no_argument,       NULL, 'r' },
         { "no-fail",        no_argument,       NULL, 'f' },
-#ifdef HAVE_GDBM
+#if defined(HAVE_GDBM) || defined(HAVE_DBM)
         { "no-db-lookup",   no_argument,       NULL, 'k' },
 #endif
         { NULL, 0, NULL, 0 }
@@ -617,7 +625,7 @@ static int parse_command_line(Config *c, int argc, char *argv[]) {
 
     assert(c);
 
-    c->command = COMMAND_BROWSE_SERVICES;
+    c->command = strstr(argv0, "domain") ? COMMAND_BROWSE_DOMAINS : COMMAND_BROWSE_SERVICES;
     c->verbose =
         c->terminate_on_cache_exhausted =
         c->terminate_on_all_for_now =
@@ -626,13 +634,13 @@ static int parse_command_line(Config *c, int argc, char *argv[]) {
         c->no_fail = 0;
     c->domain = c->stype = NULL;
 
-#ifdef HAVE_GDBM
+#if defined(HAVE_GDBM) || defined(HAVE_DBM)
     c->no_db_lookup = 0;
 #endif
     
     opterr = 0;
     while ((o = getopt_long(argc, argv, "hVd:avtclrDf"
-#ifdef HAVE_GDBM
+#if defined(HAVE_GDBM) || defined(HAVE_DBM)
                             "k"
 #endif
                             , long_options, NULL)) >= 0) {
@@ -651,6 +659,7 @@ static int parse_command_line(Config *c, int argc, char *argv[]) {
                 c->command = COMMAND_BROWSE_DOMAINS;
                 break;
             case 'd':
+                avahi_free(c->domain);
                 c->domain = avahi_strdup(optarg);
                 break;
             case 'v':
@@ -671,7 +680,7 @@ static int parse_command_line(Config *c, int argc, char *argv[]) {
             case 'f':
                 c->no_fail = 1;
                 break;
-#ifdef HAVE_GDBM
+#if defined(HAVE_GDBM) || defined(HAVE_DBM)
             case 'k':
                 c->no_db_lookup = 1;
                 break;
@@ -719,7 +728,7 @@ int main(int argc, char *argv[]) {
     if (n_columns < 40)
         n_columns = 40;
     
-    if (parse_command_line(&config, argc, argv) < 0)
+    if (parse_command_line(&config, argv0, argc, argv) < 0)
         goto fail;
 
     switch (config.command) {
@@ -774,7 +783,7 @@ fail:
 
     avahi_string_list_free(browsed_types);
 
-#ifdef HAVE_GDBM
+#if defined(HAVE_GDBM) || defined(HAVE_DBM)
     stdb_shutdown();
 #endif