diff options
| -rw-r--r-- | avahi-common/alternative-test.c | 55 | ||||
| -rw-r--r-- | avahi-common/alternative.c | 30 | 
2 files changed, 67 insertions, 18 deletions
diff --git a/avahi-common/alternative-test.c b/avahi-common/alternative-test.c index 010478c..b3ee4e9 100644 --- a/avahi-common/alternative-test.c +++ b/avahi-common/alternative-test.c @@ -29,19 +29,54 @@  #include "malloc.h"  int main(AVAHI_GCC_UNUSED int argc, AVAHI_GCC_UNUSED char *argv[]) { +    const char* const test_strings[] = { +        "gurke", +        "", +        "-", +        " #", +        "1", +        "#0", +        " #0", +        " #1", +        "#-1", +        " #-1", +        "-0", +        "--0", +        "-1", +        "--1", +        "-2", +        "gurke1", +        "gurke0", +        "gurke-2", +        "gurke #0", +        "gurke #1", +        "gurke #", +        "gurke#1", +        "gurke-", +        "gurke---", +        "gurke #", +        "gurke ###", +        NULL +    }; +              char *r = NULL; -    int i, k; +    int i, j, k; + +    for (k = 0; test_strings[k]; k++) { -    for (k = 0; k < 2; k++) { +        printf(">>>>>%s<<<<\n", test_strings[k]); +         +        for (j = 0; j < 2; j++) { -        for (i = 0; i < 20; i++) { -            char *n; -             -            n = i == 0 ? avahi_strdup("gurke") : (k ? avahi_alternative_service_name(r) : avahi_alternative_host_name(r)); -            avahi_free(r); -            r = n; -             -            printf("%s\n", r); +            for (i = 0; i < 20; i++) { +                char *n; +                 +                n = i == 0 ? avahi_strdup(test_strings[k]) : (j ? avahi_alternative_service_name(r) : avahi_alternative_host_name(r)); +                avahi_free(r); +                r = n; +                 +                printf("%s\n", r); +            }          }      } diff --git a/avahi-common/alternative.c b/avahi-common/alternative.c index 436a0d4..77470ba 100644 --- a/avahi-common/alternative.c +++ b/avahi-common/alternative.c @@ -32,20 +32,31 @@  #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) {  | 
