improved error handling again. Now we report messages for the remote
[rsync/rsync.git] / util.c
diff --git a/util.c b/util.c
index 4fef0b3..d917f07 100644 (file)
--- 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 <dlfcn.h>
 
 /*******************************************************************