X-Git-Url: http://www.dolda2000.com/gitweb/?a=blobdiff_plain;f=lib%2Fcf.c;h=432f78a4a4a83161c499f636c289164207562e39;hb=6a7a868e28e79f5502cc4b37578c263f640439c8;hp=f55a620e0022d60808ad80bf21e8a2867b3d7011;hpb=0fc6fd13c5bd44e6d595b56337a95156fd42ceea;p=ashd.git diff --git a/lib/cf.c b/lib/cf.c index f55a620..432f78a 100644 --- a/lib/cf.c +++ b/lib/cf.c @@ -232,10 +232,11 @@ char *findstdconf(char *name) if((p2 = strrchr(p, '/')) == NULL) continue; *p2 = 0; - if(!access(t = sprintf3("%s/etc/%s", p, name), R_OK)) { + if(!access(t = sprintf2("%s/etc/%s", p, name), R_OK)) { free(path); - return(sstrdup(t)); + return(t); } + free(t); } free(path); return(NULL); @@ -325,16 +326,16 @@ struct child *parsechild(struct cfstate *s) 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); } @@ -344,7 +345,7 @@ int childhandle(struct child *ch, struct hthead *req, int fd) 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);