X-Git-Url: http://git.meshlink.io/?a=blobdiff_plain;f=avahi-daemon%2Fini-file-parser.c;h=0a99ce366cf542d3bc18aafc482236e184558ccd;hb=7a5b2f69af7d36d6cd4153142f125fa011784e03;hp=03a3f8b814523580645e65b22600d94bfc3da713;hpb=deb6bcac8d1e1ecec4aafaee2d27dbe467e4f461;p=catta diff --git a/avahi-daemon/ini-file-parser.c b/avahi-daemon/ini-file-parser.c index 03a3f8b..0a99ce3 100644 --- a/avahi-daemon/ini-file-parser.c +++ b/avahi-daemon/ini-file-parser.c @@ -1,27 +1,30 @@ -/* $Id$ */ - /*** This file is part of avahi. - + avahi is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. - + avahi is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. - + You should have received a copy of the GNU Lesser General Public License along with avahi; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. ***/ +#ifdef HAVE_CONFIG_H +#include +#endif + #include #include #include +#include #include #include @@ -33,14 +36,14 @@ AvahiIniFile* avahi_ini_file_load(const char *fname) { FILE *fo; AvahiIniFileGroup *group = NULL; unsigned line; - + assert(fname); if (!(fo = fopen(fname, "r"))) { avahi_log_error("Failed to open file '%s': %s", fname, strerror(errno)); return NULL; } - + f = avahi_new(AvahiIniFile, 1); AVAHI_LLIST_HEAD_INIT(AvahiIniFileGroup, f->groups); f->n_groups = 0; @@ -49,12 +52,12 @@ AvahiIniFile* avahi_ini_file_load(const char *fname) { while (!feof(fo)) { char ln[256], *s, *e; AvahiIniFilePair *pair; - + if (!(fgets(ln, sizeof(ln), fo))) break; line++; - + s = ln + strspn(ln, " \t"); s[strcspn(s, "\r\n")] = 0; @@ -64,19 +67,19 @@ AvahiIniFile* avahi_ini_file_load(const char *fname) { if (*s == '[') { /* new group */ - + if (!(e = strchr(s, ']'))) { avahi_log_error("Unclosed group header in %s:%u: <%s>", fname, line, s); goto fail; } *e = 0; - + group = avahi_new(AvahiIniFileGroup, 1); group->name = avahi_strdup(s+1); group->n_pairs = 0; AVAHI_LLIST_HEAD_INIT(AvahiIniFilePair, group->pairs); - + AVAHI_LLIST_PREPEND(AvahiIniFileGroup, groups, f->groups, group); f->n_groups++; } else { @@ -86,26 +89,26 @@ AvahiIniFile* avahi_ini_file_load(const char *fname) { avahi_log_error("Missing assignment in %s:%u: <%s>", fname, line, s); goto fail; } - + if (!group) { avahi_log_error("Assignment outside group in %s:%u <%s>", fname, line, s); goto fail; } - + /* Split the key and the value */ *(e++) = 0; - + pair = avahi_new(AvahiIniFilePair, 1); pair->key = avahi_strdup(s); pair->value = avahi_strdup(e); - + AVAHI_LLIST_PREPEND(AvahiIniFilePair, pairs, group->pairs, pair); group->n_pairs++; } } - + fclose(fo); - + return f; fail: @@ -125,7 +128,7 @@ void avahi_ini_file_free(AvahiIniFile *f) { while ((g = f->groups)) { AvahiIniFilePair *p; - + while ((p = g->pairs)) { avahi_free(p->key); avahi_free(p->value); @@ -155,9 +158,16 @@ char** avahi_split_csv(const char *t) { i = r = avahi_new(char*, n_comma+2); for (;;) { - size_t l = strcspn(t, ","); + size_t n, l = strcspn(t, ","); + const char *c; + + /* Ignore leading blanks */ + for (c = t, n = l; isblank(*c); c++, n--); - *(i++) = avahi_strndup(t, l); + /* Ignore trailing blanks */ + for (; n > 0 && isblank(c[n-1]); n--); + + *(i++) = avahi_strndup(c, n); t += l; @@ -178,7 +188,7 @@ void avahi_strfreev(char **p) { if (!p) return; - + for (i = p; *i; i++) avahi_free(*i);