X-Git-Url: https://mattmccutchen.net/rsync/rsync.git/blobdiff_plain/0f8f98c8ff7e81e2853d8e6cd78d00275198c95d..ba35824322939b54352443461bc645c29f61cfb6:/util.c diff --git a/util.c b/util.c index 4fef0b3e..d917f07b 100644 --- a/util.c +++ b/util.c @@ -1,6 +1,7 @@ -/* - Copyright (C) Andrew Tridgell 1996 - Copyright (C) Paul Mackerras 1996 +/* -*- c-file-style: "linux" -*- + + Copyright (C) 1996-2000 by Andrew Tridgell + Copyright (C) Paul Mackerras 1996 This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -92,9 +93,9 @@ int fd_pair(int fd[2]) used to cope with badly broken rsh implementations like the one on solaris. */ -int piped_child(char **command,int *f_in,int *f_out) +pid_t piped_child(char **command,int *f_in,int *f_out) { - int pid; + pid_t pid; int to_child_pipe[2]; int from_child_pipe[2]; extern int blocking_io; @@ -107,7 +108,7 @@ int piped_child(char **command,int *f_in,int *f_out) pid = do_fork(); - if (pid < 0) { + if (pid == -1) { rprintf(FERROR,"fork: %s\n",strerror(errno)); exit_cleanup(RERR_IPC); } @@ -147,9 +148,9 @@ int piped_child(char **command,int *f_in,int *f_out) return pid; } -int local_child(int argc, char **argv,int *f_in,int *f_out) +pid_t local_child(int argc, char **argv,int *f_in,int *f_out) { - int pid; + pid_t pid; int to_child_pipe[2]; int from_child_pipe[2]; @@ -161,7 +162,7 @@ int local_child(int argc, char **argv,int *f_in,int *f_out) pid = do_fork(); - if (pid < 0) { + if (pid == -1) { rprintf(FERROR,"fork: %s\n",strerror(errno)); exit_cleanup(RERR_IPC); } @@ -930,20 +931,51 @@ char *timestring(time_t t) } -/**************************************************************************** - like waitpid but does the WEXITSTATUS -****************************************************************************/ -#ifndef WEXITSTATUS -#define WEXITSTATUS(stat) ((int)(((stat)>>8)&0xFF)) -#endif -void wait_process(pid_t pid, int *status) +/******************************************************************* +sleep for a specified number of milliseconds +********************************************************************/ +void msleep(int t) +{ + int tdiff=0; + struct timeval tval,t1,t2; + + gettimeofday(&t1, NULL); + gettimeofday(&t2, NULL); + + while (tdiff < t) { + tval.tv_sec = (t-tdiff)/1000; + tval.tv_usec = 1000*((t-tdiff)%1000); + + errno = 0; + select(0,NULL,NULL, NULL, &tval); + + gettimeofday(&t2, NULL); + tdiff = (t2.tv_sec - t1.tv_sec)*1000 + + (t2.tv_usec - t1.tv_usec)/1000; + } +} + + +/******************************************************************* + Determine if two file modification times are equivalent (either exact + or in the modification timestamp window established by --modify-window) + Returns 0 if the times should be treated as the same, 1 if the + first is later and -1 if the 2nd is later + *******************************************************************/ +int cmp_modtime(time_t file1, time_t file2) { - waitpid(pid, status, 0); - *status = WEXITSTATUS(*status); + extern int modify_window; + + if (file2 > file1) { + if (file2 - file1 <= modify_window) return 0; + return -1; + } + if (file1 - file2 <= modify_window) return 0; + return 1; } -#ifdef __INSURE__ +#ifdef __INSURE__XX #include /*******************************************************************