#include <proc.h>
#include <req.h>
-int stdmkchild(char **argv)
+int stdmkchild(char **argv, void (*chinit)(void *), void *idata)
{
int i;
pid_t pid;
if((pid = fork()) < 0)
return(-1);
if(pid == 0) {
+ if(chinit != NULL)
+ chinit(idata);
for(i = 3; i < FD_SETSIZE; i++) {
if(i != fd[0])
close(i);
int recvfd(int sock, char **data, size_t *datalen)
{
int ret, fd;
- char *buf, cbuf[1024];;
+ char *buf, cbuf[1024];
struct msghdr msg;
struct cmsghdr *cmsg;
struct iovec bufvec;
return(fd);
}
-pid_t stdforkserve(char **argv, struct hthead *req, int fd)
+pid_t stdforkserve(char **argv, struct hthead *req, int fd, void (*chinit)(void *), void *idata)
{
int i;
char *ebuf, *p;
if((pid = fork()) < 0)
return(-1);
if(pid == 0) {
+ if(chinit != NULL)
+ chinit(idata);
+
dup2(fd, 0);
dup2(fd, 1);
for(i = 3; i < FD_SETSIZE; i++)