From a733daccce972d7d8ca3701b810032abc4a6daea Mon Sep 17 00:00:00 2001 From: rusty Date: Sun, 27 Aug 2000 07:47:46 +0000 Subject: Patch-o-matic! now included. --- ippool/libippool.c | 72 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 ippool/libippool.c (limited to 'ippool/libippool.c') diff --git a/ippool/libippool.c b/ippool/libippool.c new file mode 100644 index 0000000..7f3ac76 --- /dev/null +++ b/ippool/libippool.c @@ -0,0 +1,72 @@ +/* support functions for ip_pool modules */ + +#include +#include +#include +#include + +#include + +void ip_pool_init(void) +{ +} + +ip_pool_t ip_pool_get_index(char *name) +{ + FILE *fp; + char buf[256]; + + if (isdigit(*name)) + return atoi(name); + fp = fopen(IPPOOL_CONF, "r"); + if (!fp) exit_error(PARAMETER_PROBLEM, + "cannot open %s - no pool names", IPPOOL_CONF); + while (fgets(buf, sizeof(buf), fp)) { + char *p = strtok(buf, " \t\n"); + ip_pool_t index; + + if (!p || *p == '#') continue; + index = atoi(p); + p = strtok(0, " \t\n"); + if (p && 0 == strcmp(p, name)) { + fclose(fp); + return index; + } + } + exit_error(PARAMETER_PROBLEM, + "pool '%s' not found in %s\n", name, IPPOOL_CONF); +} + +char *ip_pool_get_name(char *buf, int size, ip_pool_t index, int numeric) +{ + FILE *fp; + int ok = 0; + + /* make sure we have enough room, at least for a %d */ + if (size < 16) + exit_error(PARAMETER_PROBLEM, + "ip_pool_support:get_name buf too small (%d vs. 16)\n", + size); + if (numeric) + goto do_numeric; + fp = fopen(IPPOOL_CONF, "r"); + if (fp) { + while (fgets(buf, size, fp)) { + char *p = strtok(buf, " \t\n"); + + if (!p || *p == '#') continue; + if (index != atoi(p)) continue; + p = strtok(0, " \t\n"); + if (!p || *p == '#') continue; + memmove(buf, p, strlen(p)+1); + ok = 1; + break; + } + fclose(fp); + } + if (!ok) { +do_numeric: + sprintf(buf, "%d", index); + } + return buf; +} -- cgit v1.2.3