X-Git-Url: http://git.meshlink.io/?a=blobdiff_plain;f=avahi-common%2Falternative.c;h=77470baa405009105be92b0cb9a0db89b17f575f;hb=fc3830c24fd0341d762a2c4f05198f27fc3ccac0;hp=c9a0f48ac73a7c04fa245dbeceda6a73de35a6c2;hpb=c5544522f6409095627dc3d1129560195ab4ec40;p=catta diff --git a/avahi-common/alternative.c b/avahi-common/alternative.c index c9a0f48..77470ba 100644 --- a/avahi-common/alternative.c +++ b/avahi-common/alternative.c @@ -26,39 +26,57 @@ #include #include #include +#include #include "alternative.h" +#include "malloc.h" -gchar * avahi_alternative_host_name(const gchar *s) { - const gchar *p, *e = NULL; - gchar *c, *r; - gint n; +char * avahi_alternative_host_name(const char *s) { + const char *e; + char *r; - g_assert(s); - - for (p = s; *p; p++) - if (!isdigit(*p)) - e = p+1; - - if (e && *e) - n = atoi(e)+1; - else - n = 2; - - c = e ? g_strndup(s, e-s) : g_strdup(s); - r = g_strdup_printf("%s%i", c, n); - g_free(c); + assert(s); + + 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) { + char *c; + + e++; + + if (!(c = avahi_strndup(s, e-s))) + return NULL; + + r = avahi_strdup_printf("%s%i", c, atoi(e)+1); + avahi_free(c); + + } else + r = avahi_strdup_printf("%s-2", s); return r; - } -gchar *avahi_alternative_service_name(const gchar *s) { - const gchar *e; - g_assert(s); +char *avahi_alternative_service_name(const char *s) { + const char *e; + char *r; + + assert(s); if ((e = strstr(s, " #"))) { - const gchar *n, *p; + const char *n, *p; e += 2; while ((n = strstr(e, " #"))) @@ -69,13 +87,21 @@ gchar *avahi_alternative_service_name(const gchar *s) { e = NULL; break; } + + if (e && (*e == '0' || *e == 0)) + e = NULL; } if (e) { - gchar *r, *c = g_strndup(s, e-s); - r = g_strdup_printf("%s%i", c, atoi(e)+1); - g_free(c); - return r; + char *c; + + if (!(c = avahi_strndup(s, e-s))) + return NULL; + + r = avahi_strdup_printf("%s%i", c, atoi(e)+1); + avahi_free(c); } else - return g_strdup_printf("%s #2", s); + r = avahi_strdup_printf("%s #2", s); + + return r; }