X-Git-Url: https://mattmccutchen.net/rsync/rsync.git/blobdiff_plain/1e9f155adea9c9dca7b420749cd8a92203d9427b..a76a0039fc6f02f88dd1aba866c03ceefa7fafec:/util.c diff --git a/util.c b/util.c index 2a479458..6537717d 100644 --- a/util.c +++ b/util.c @@ -82,9 +82,9 @@ char *map_ptr(struct map_struct *map,off_t offset,int len) if (lseek(map->fd,offset,SEEK_SET) != offset || (nread=read(map->fd,map->p,len)) != len) { - fprintf(FERROR,"EOF in map_ptr! (offset=%d len=%d nread=%d errno=%d)\n", - (int)offset, len, nread, errno); - exit_cleanup(1); + fprintf(FERROR,"EOF in map_ptr! (offset=%d len=%d nread=%d errno=%d)\n", + (int)offset, len, nread, errno); + exit_cleanup(1); } map->p_offset = offset; @@ -119,7 +119,7 @@ int piped_child(char **command,int *f_in,int *f_out) } - pid = fork(); + pid = do_fork(); if (pid < 0) { fprintf(FERROR,"fork: %s\n",strerror(errno)); exit_cleanup(1); @@ -342,3 +342,38 @@ int copy_file(char *source, char *dest, mode_t mode) return 0; } + +/* sleep for a while via select */ +void u_sleep(int usec) +{ + struct timeval tv; + + tv.tv_sec = 0; + tv.tv_usec = usec; + select(0, NULL, NULL, NULL, &tv); +} + + +static pid_t all_pids[10]; +static int num_pids; + +/* fork and record the pid of the child */ +pid_t do_fork(void) +{ + pid_t newpid = fork(); + + if (newpid) { + all_pids[num_pids++] = newpid; + } + return newpid; +} + +/* kill all children */ +void kill_all(int sig) +{ + int i; + for (i=0;i