line[0] = 0;
}
s->lno++;
- for(p = line + strlen(line) - 1; p >= line; p--) {
- if(isspace(*p))
- *p = 0;
- else
- break;
+ if(line[0]) {
+ for(p = line + strlen(line) - 1; p >= line; p--) {
+ if(isspace(*p))
+ *p = 0;
+ else
+ break;
+ }
}
for(ind = 0, p = line; *p; p++) {
if(*p == ' ') {
free(s);
}
+char *findstdconf(char *name)
+{
+ char *path, *p, *p2, *t;
+
+ if((path = getenv("PATH")) == NULL)
+ return(NULL);
+ path = sstrdup(path);
+ for(p = strtok(path, ":"); p != NULL; p = strtok(NULL, ":")) {
+ if((p2 = strrchr(p, '/')) == NULL)
+ continue;
+ *p2 = 0;
+ if(!access(t = sprintf2("%s/etc/%s", p, name), R_OK)) {
+ free(path);
+ return(t);
+ }
+ free(t);
+ }
+ free(path);
+ return(NULL);
+}
+
static struct child *newchild(char *name, int type)
{
struct child *ch;
return(ch);
}
-int childhandle(struct child *ch, struct hthead *req, int fd)
+int childhandle(struct child *ch, struct hthead *req, int fd, void (*chinit)(void *), void *idata)
{
if(ch->type == CH_SOCKET) {
if(ch->fd < 0)
- ch->fd = stdmkchild(ch->argv);
+ ch->fd = stdmkchild(ch->argv, chinit, idata);
if(sendreq(ch->fd, req, fd)) {
if(errno == EPIPE) {
/* Assume that the child has crashed and restart it. */
close(ch->fd);
- ch->fd = stdmkchild(ch->argv);
+ ch->fd = stdmkchild(ch->argv, chinit, idata);
if(!sendreq(ch->fd, req, fd))
return(0);
}
return(-1);
}
} else if(ch->type == CH_FORK) {
- if(stdforkserve(ch->argv, req, fd) < 0)
+ if(stdforkserve(ch->argv, req, fd, chinit, idata) < 0)
return(-1);
}
return(0);