X-Git-Url: http://mj.ucw.cz/gitweb/?a=blobdiff_plain;f=lib%2Fconf.c;h=50c3511a293d5a83ffd2f8a20c82c692426609dd;hb=e23b57dd8b0ac4da53451625be99ca1fa75caa48;hp=2293cdae84a836ab7b22e0d6504e2003c80d228f;hpb=9ddcbc0dd25d5ac6baacdf404dd9510e5da2534b;p=libucw.git diff --git a/lib/conf.c b/lib/conf.c index 2293cdae..50c3511a 100644 --- a/lib/conf.c +++ b/lib/conf.c @@ -58,6 +58,16 @@ cfg_strdup(byte *s) return mp_strdup(cfpool, s); } +byte * +cfg_printf(char *fmt, ...) +{ + va_list args; + va_start(args, fmt); + byte *res = mp_vprintf(cfpool, fmt, args); + va_end(args); + return res; +} + void cf_register(struct cfitem *items) { if(items[0].type!=CT_SECTION && items[0].type!=CT_INCOMPLETE_SECTION) @@ -112,6 +122,7 @@ static const struct unit units[] = { { 0, 0, 0 } }; +#if 0 static const struct unit *cf_lookup_unit(byte *value, byte *end, char **msg) { if (end && *end) { @@ -208,6 +219,46 @@ byte *cf_parse_double(byte *value, double *varp) return msg; } +byte * +cf_parse_ip(byte **p, u32 *varp) +{ + while (Cspace(**p)) + (*p)++; + if (!**p) + return "Missing IP address"; + uns x = 0; + if (**p == '0' && *(*p + 1) | 32 == 'X') + { + errno = 0; + x = strtoul(*p + 2, (char **)p, 16); + if (errno == ERANGE || x > 0xffffffff) + goto error; + } + else + for (uns i = 0; i < 4; i++) + { + if (i) + { + while (Cspace(**p)) + (*p)++; + if (*(*p)++ != '.') + goto error; + } + while (Cspace(**p)) + (*p)++; + errno = 0; + uns y = strtoul(*p, (char **)p, 10); + if (errno == ERANGE || y > 255) + goto error; + x = (x << 8) + y; + } + *varp = x; + return NULL; +error: + return "Invalid IP address"; +} +#endif + byte *cf_set_item(byte *sect, byte *name, byte *value) { struct cfitem *item;