=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/rdist/child.c,v retrieving revision 1.11 retrieving revision 1.12 diff -c -r1.11 -r1.12 *** src/usr.bin/rdist/child.c 2002/06/12 06:07:16 1.11 --- src/usr.bin/rdist/child.c 2003/05/14 01:34:35 1.12 *************** *** 1,4 **** ! /* $OpenBSD: child.c,v 1.11 2002/06/12 06:07:16 mpech Exp $ */ /* * Copyright (c) 1983 Regents of the University of California. --- 1,4 ---- ! /* $OpenBSD: child.c,v 1.12 2003/05/14 01:34:35 millert Exp $ */ /* * Copyright (c) 1983 Regents of the University of California. *************** *** 33,50 **** * SUCH DAMAGE. */ #ifndef lint #if 0 ! static char RCSid[] = ! "$From: child.c,v 6.28 1996/02/22 19:30:09 mcooper Exp $"; #else ! static char RCSid[] = ! "$OpenBSD: child.c,v 1.11 2002/06/12 06:07:16 mpech Exp $"; #endif ! static char sccsid[] = "@(#)docmd.c 5.1 (Berkeley) 6/6/85"; ! static char copyright[] = "@(#) Copyright (c) 1983 Regents of the University of California.\n\ All rights reserved.\n"; #endif /* not lint */ --- 33,53 ---- * SUCH DAMAGE. */ + #include "defs.h" + #ifndef lint #if 0 ! static char RCSid[] __attribute__((__unused__)) = ! "$From: child.c,v 1.3 1999/11/01 00:20:55 christos Exp $"; #else ! static char RCSid[] __attribute__((__unused__)) = ! "$OpenBSD: child.c,v 1.12 2003/05/14 01:34:35 millert Exp $"; #endif ! static char sccsid[] __attribute__((__unused__)) = ! "@(#)docmd.c 5.1 (Berkeley) 6/6/85"; ! static char copyright[] __attribute__((__unused__)) = "@(#) Copyright (c) 1983 Regents of the University of California.\n\ All rights reserved.\n"; #endif /* not lint */ *************** *** 53,59 **** * Functions for rdist related to children */ - #include "defs.h" #include #include #if defined(NEED_SYS_SELECT_H) --- 56,61 ---- *************** *** 82,98 **** extern int maxchildren; /* Max active children */ static int needscan = FALSE; /* Need to scan children */ /* * Remove a child that has died (exited) * from the list of active children */ ! static void removechild(child) ! CHILD *child; { CHILD *pc, *prevpc; ! debugmsg(DM_CALL, "removechild(%s, %ld, %d) start", ! child->c_name, (long)child->c_pid, child->c_readfd); /* * Find the child in the list --- 84,108 ---- extern int maxchildren; /* Max active children */ static int needscan = FALSE; /* Need to scan children */ + static void removechild(CHILD *); + static CHILD *copychild(CHILD *); + static void addchild(CHILD *); + static void readchild(CHILD *); + static pid_t waitproc(int *, int); + static void reap(int); + static void childscan(void); + /* * Remove a child that has died (exited) * from the list of active children */ ! static void ! removechild(CHILD *child) { CHILD *pc, *prevpc; ! debugmsg(DM_CALL, "removechild(%s, %d, %d) start", ! child->c_name, child->c_pid, child->c_readfd); /* * Find the child in the list *************** *** 103,110 **** break; if (pc == NULL) ! error("RemoveChild called with bad child %s %ld %d", ! child->c_name, (long)child->c_pid, child->c_readfd); else { /* * Remove the child --- 113,120 ---- break; if (pc == NULL) ! error("RemoveChild called with bad child %s %d %d", ! child->c_name, child->c_pid, child->c_readfd); else { /* * Remove the child *************** *** 144,151 **** /* * Create a totally new copy of a child. */ ! static CHILD *copychild(child) ! CHILD *child; { CHILD *newc; --- 154,161 ---- /* * Create a totally new copy of a child. */ ! static CHILD * ! copychild(CHILD *child) { CHILD *newc; *************** *** 163,170 **** /* * Add a child to the list of children. */ ! static void addchild(child) ! CHILD *child; { CHILD *pc; --- 173,180 ---- /* * Add a child to the list of children. */ ! static void ! addchild(CHILD *child) { CHILD *pc; *************** *** 177,205 **** ++activechildren; debugmsg(DM_MISC, ! "addchild() created '%s' pid %ld fd %d (active=%d)\n", ! child->c_name, (long)child->c_pid, child->c_readfd, ! activechildren); } /* * Read input from a child process. */ ! static void readchild(child) ! CHILD *child; { char rbuf[BUFSIZ]; int amt; ! debugmsg(DM_CALL, "[readchild(%s, %ld, %d) start]", ! child->c_name, (long)child->c_pid, child->c_readfd); /* * Check that this is a valid child. */ if (child->c_name == NULL || child->c_readfd <= 0) { ! debugmsg(DM_MISC, "[readchild(%s, %ld, %d) bad child]", ! child->c_name, (long)child->c_pid, child->c_readfd); return; } --- 187,214 ---- ++activechildren; debugmsg(DM_MISC, ! "addchild() created '%s' pid %d fd %d (active=%d)\n", ! child->c_name, child->c_pid, child->c_readfd, activechildren); } /* * Read input from a child process. */ ! static void ! readchild(CHILD *child) { char rbuf[BUFSIZ]; int amt; ! debugmsg(DM_CALL, "[readchild(%s, %d, %d) start]", ! child->c_name, child->c_pid, child->c_readfd); /* * Check that this is a valid child. */ if (child->c_name == NULL || child->c_readfd <= 0) { ! debugmsg(DM_MISC, "[readchild(%s, %d, %d) bad child]", ! child->c_name, child->c_pid, child->c_readfd); return; } *************** *** 208,231 **** */ while ((amt = read(child->c_readfd, rbuf, sizeof(rbuf))) > 0) { /* XXX remove these debug calls */ ! debugmsg(DM_MISC, "[readchild(%s, %ld, %d) got %d bytes]", ! child->c_name, (long)child->c_pid, child->c_readfd, amt); (void) xwrite(fileno(stdout), rbuf, amt); ! debugmsg(DM_MISC, "[readchild(%s, %ld, %d) write done]", ! child->c_name, (long)child->c_pid, child->c_readfd); } ! debugmsg(DM_MISC, "readchild(%s, %ld, %d) done: amt = %d errno = %d\n", ! child->c_name, (long)child->c_pid, child->c_readfd, amt, errno); /* * See if we've reached EOF */ if (amt == 0) ! debugmsg(DM_MISC, "readchild(%s, %ld, %d) at EOF\n", ! child->c_name, (long)child->c_pid, child->c_readfd); } /* --- 217,240 ---- */ while ((amt = read(child->c_readfd, rbuf, sizeof(rbuf))) > 0) { /* XXX remove these debug calls */ ! debugmsg(DM_MISC, "[readchild(%s, %d, %d) got %d bytes]", ! child->c_name, child->c_pid, child->c_readfd, amt); (void) xwrite(fileno(stdout), rbuf, amt); ! debugmsg(DM_MISC, "[readchild(%s, %d, %d) write done]", ! child->c_name, child->c_pid, child->c_readfd); } ! debugmsg(DM_MISC, "readchild(%s, %d, %d) done: amt = %d errno = %d\n", ! child->c_name, child->c_pid, child->c_readfd, amt, errno); /* * See if we've reached EOF */ if (amt == 0) ! debugmsg(DM_MISC, "readchild(%s, %d, %d) at EOF\n", ! child->c_name, child->c_pid, child->c_readfd); } /* *************** *** 234,246 **** * a process does exit, then the pointer "statval" is set to the * exit status of the exiting process, if statval is not NULL. */ ! static pid_t waitproc(statval, block) ! int *statval; ! int block; { WAIT_ARG_TYPE status; - int exitval; pid_t pid; debugmsg(DM_CALL, "waitproc() %s, active children = %d...\n", (block) ? "blocking" : "nonblocking", activechildren); --- 243,254 ---- * a process does exit, then the pointer "statval" is set to the * exit status of the exiting process, if statval is not NULL. */ ! static pid_t ! waitproc(int *statval, int block) { WAIT_ARG_TYPE status; pid_t pid; + int exitval; debugmsg(DM_CALL, "waitproc() %s, active children = %d...\n", (block) ? "blocking" : "nonblocking", activechildren); *************** *** 262,269 **** if (pid > 0 && exitval != 0) { nerrs++; debugmsg(DM_MISC, ! "Child process %ld exited with status %d.\n", ! (long)pid, exitval); } if (statval) --- 270,277 ---- if (pid > 0 && exitval != 0) { nerrs++; debugmsg(DM_MISC, ! "Child process %d exited with status %d.\n", ! pid, exitval); } if (statval) *************** *** 279,285 **** * Check to see if any children have exited, and if so, read any unread * input and then remove the child from the list of children. */ ! static void reap() { CHILD *pc; int save_errno = errno; --- 287,294 ---- * Check to see if any children have exited, and if so, read any unread * input and then remove the child from the list of children. */ ! static void ! reap(int dummy) { CHILD *pc; int save_errno = errno; *************** *** 299,306 **** */ pid = waitproc(&status, FALSE); debugmsg(DM_MISC, ! "reap() pid = %ld status = %d activechildren=%d\n", ! (long)pid, status, activechildren); /* * See if a child really exited --- 308,315 ---- */ pid = waitproc(&status, FALSE); debugmsg(DM_MISC, ! "reap() pid = %d status = %d activechildren=%d\n", ! pid, status, activechildren); /* * See if a child really exited *************** *** 337,343 **** * Scan the children list to find the child that just exited, * read any unread input, then remove it from the list of active children. */ ! static void childscan() { CHILD *pc, *nextpc; --- 346,353 ---- * Scan the children list to find the child that just exited, * read any unread input, then remove it from the list of active children. */ ! static void ! childscan(void) { CHILD *pc, *nextpc; *************** *** 366,372 **** * #endif */ ! extern void waitup() { #if defined(HAVE_SELECT) int count; --- 376,383 ---- * #endif */ ! void ! waitup(void) { #if defined(HAVE_SELECT) int count; *************** *** 446,453 **** if (pc->c_name && kill(pc->c_pid, 0) < 0 && errno == ESRCH) { debugmsg(DM_MISC, ! "waitup() proc %ld (%s) died unexpectedly!", ! (long)pc->c_pid, pc->c_name); pc->c_state = PSdead; needscan = TRUE; } --- 457,464 ---- if (pc->c_name && kill(pc->c_pid, 0) < 0 && errno == ESRCH) { debugmsg(DM_MISC, ! "waitup() proc %d (%s) died unexpectedly!", ! pc->c_pid, pc->c_name); pc->c_state = PSdead; needscan = TRUE; } *************** *** 478,486 **** /* * Spawn (create) a new child process for "cmd". */ ! extern int spawn(cmd, cmdlist) ! struct cmd *cmd; ! struct cmd *cmdlist; { pid_t pid; int fildes[2]; --- 489,496 ---- /* * Spawn (create) a new child process for "cmd". */ ! int ! spawn(struct cmd *cmd, struct cmd *cmdlist) { pid_t pid; int fildes[2]; *************** *** 573,581 **** #if NBIO_TYPE == NBIO_IOCTL #include ! int setnonblocking(fd, flag) ! int fd; ! int flag; { int state; --- 583,590 ---- #if NBIO_TYPE == NBIO_IOCTL #include ! int ! setnonblocking(int fd, int flag) { int state; *************** *** 587,595 **** #if NBIO_TYPE == NBIO_FCNTL ! int setnonblocking(fd, flag) ! int fd; ! int flag; { int mode; --- 596,603 ---- #if NBIO_TYPE == NBIO_FCNTL ! int ! setnonblocking(int fd, int flag) { int mode;