]> git.meshlink.io Git - catta/blob - avahi-common/alternative.c
* drop glib from avahi-common
[catta] / avahi-common / alternative.c
1 /* $Id$ */
2
3 /***
4   This file is part of avahi.
5  
6   avahi is free software; you can redistribute it and/or modify it
7   under the terms of the GNU Lesser General Public License as
8   published by the Free Software Foundation; either version 2.1 of the
9   License, or (at your option) any later version.
10  
11   avahi is distributed in the hope that it will be useful, but WITHOUT
12   ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
13   or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General
14   Public License for more details.
15  
16   You should have received a copy of the GNU Lesser General Public
17   License along with avahi; if not, write to the Free Software
18   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
19   USA.
20 ***/
21
22 #ifdef HAVE_CONFIG_H
23 #include <config.h>
24 #endif
25
26 #include <string.h>
27 #include <stdlib.h>
28 #include <ctype.h>
29 #include <assert.h>
30
31 #include "alternative.h"
32 #include "malloc.h"
33 #include "util.h"
34
35 char * avahi_alternative_host_name(const char *s) {
36     const char *p, *e;
37     char *r;
38
39     assert(s);
40
41     e = s;
42     
43     for (p = s; *p; p++)
44         if (!isdigit(*p))
45             e = p+1;
46
47     if (*e) {
48         char *c;
49
50         if (!(c = avahi_strndup(s, e-s)))
51             return NULL;
52
53         r = avahi_strdup_printf("%s%i", c, atoi(e)+1);
54         avahi_free(c);
55         
56     } else
57         r = avahi_strdup_printf("%s2", s);
58     
59     return r;
60 }
61
62 char *avahi_alternative_service_name(const char *s) {
63     const char *e;
64     char *r;
65     
66     assert(s);
67
68     if ((e = strstr(s, " #"))) {
69         const char *n, *p;
70         e += 2;
71     
72         while ((n = strstr(e, " #")))
73             e = n + 2;
74
75         for (p = e; *p; p++)
76             if (!isdigit(*p)) {
77                 e = NULL;
78                 break;
79             }
80     }
81     
82     if (e) {
83         char *c;
84
85         if (!(c = avahi_strndup(s, e-s)))
86             return NULL;
87         
88         r = avahi_strdup_printf("%s%i", c, atoi(e)+1);
89         avahi_free(c);
90     } else
91         r = avahi_strdup_printf("%s #2", s);
92
93     return r;
94 }