]> git.meshlink.io Git - catta/blobdiff - avahi-common/alternative.c
follow Bonjour's hostname number incrementing algorithm for handling conflicts. On...
[catta] / avahi-common / alternative.c
index 436a0d47b2f1e3a3899afa308299c2cf6b33a47e..77470baa405009105be92b0cb9a0db89b17f575f 100644 (file)
 #include "malloc.h"
 
 char * avahi_alternative_host_name(const char *s) {
-    const char *p, *e;
+    const char *e;
     char *r;
 
     assert(s);
 
-    e = s;
-    
-    for (p = s; *p; p++)
-        if (!isdigit(*p))
-            e = p+1;
+    e = strrchr(s, '-');
+
+    if (e) {
+        const char *p;
+        
+        for (p = e+1; *p; p++)
+            if (!isdigit(*p)) {
+                e = NULL;
+                break;
+            }
+
+        if (e && (*(e+1) == '0' || (*(e+1) == 0)))
+            e = NULL;
+    }
 
-    if (*e) {
+    if (e) {
         char *c;
 
+        e++;
+        
         if (!(c = avahi_strndup(s, e-s)))
             return NULL;
 
@@ -53,7 +64,7 @@ char * avahi_alternative_host_name(const char *s) {
         avahi_free(c);
         
     } else
-        r = avahi_strdup_printf("%s2", s);
+        r = avahi_strdup_printf("%s-2", s);
     
     return r;
 }
@@ -76,6 +87,9 @@ char *avahi_alternative_service_name(const char *s) {
                 e = NULL;
                 break;
             }
+
+        if (e && (*e == '0' || *e == 0))
+            e = NULL;
     }
     
     if (e) {