The main motivation to separate out the range parsing from libxcpu was that it could be used in statfs.
Added a new function nodecreate_from_range in statfs.
statfs.conf now supports node ranges like
x[0-100]=10.0.0.[10-110]
x[101-200]=10.0.1.[10-109]
and so on.
It assumes the node range and address range is equal.
Signed-off-by: Abhishek Kulkarni <
kulk...@lanl.gov>
Index: statfs/statfs.c
===================================================================
--- statfs/statfs.c (revision 752)
+++ statfs/statfs.c (working copy)
@@ -199,6 +199,46 @@
np_werror(NULL, 0);
}
+static int
+nodecreate_from_range(char *namerange, char *addrrange)
+{
+ int nname, naddr, i;
+ char **name = NULL, **addr = NULL;
+ Node *nd, **lnd;
+
+ nname = parse_range(namerange, &name);
+ if (nname < 0)
+ goto error;
+
+ naddr = parse_range(addrrange, &addr);
+ if (naddr < 0)
+ goto error;
+
+ if (nname != naddr) {
+ np_werror("syntax error: name and address range mismatch", EIO);
+ return -1;
+ }
+
+ for (i = 0; i < nname; i++) {
+ nd = nodecreate(name[i], addr[i]);
+ if (!nd)
+ goto error;
+
+ nd->next = nodes;
+ nodes = nd;
+ }
+
+ free(name);
+ free(addr);
+ return nname;
+error:
+ free(name);
+ free(addr);
+ np_werror("syntax error: '%s %s' invalid node range description",
+ EIO, namerange, addrrange);
+ return -1;
+}
+
static void
nodereseterror(Node *nd)
{
@@ -333,16 +373,14 @@
int errorcount = 0;
char buf[256], *p, *s;
FILE *f;
- Node *nd, **lnd;
+
f = fopen(path, "r");
if (!f) {
np_suerror(path, errno);
return -1;
}
- lnd = &nodes;
-
/* there are few things worse than a program that feeds you
* config file errors one line at a time. So, if you get an
* error, track the fact, but keep trying to parse, so
@@ -383,19 +421,14 @@
;
p[n+1] = '\0';
- nd = nodecreate(s, p);
- if (!nd){
+ if (nodecreate_from_range(s, p) < 0) {
errorcount++;
continue;
}
-
- *lnd = nd;
- lnd = &nd->next;
}
fclose(f);
return -errorcount;
-
}
static Npfile*