Undo last setting of blocking_io. I hadn't reviewed the code well enough;
[rsync.git] / compat.c
index 1c28c253177a7aa9d162dbde8d2a2f3990d86a54..ee9e05208a7ea89a5971a70d5f22d30c7b012f07 100644 (file)
--- a/compat.c
+++ b/compat.c
@@ -23,8 +23,6 @@
 
 extern int am_server;
 
-extern int csum_length;
-
 extern int preserve_links;
 extern int preserve_perms;
 extern int preserve_devices;
@@ -36,188 +34,40 @@ extern int checksum_seed;
 
 
 extern int remote_version;
-
- void (*send_file_entry)(struct file_struct *file,int f) = NULL;
- void (*receive_file_entry)(struct file_struct *file,
-                           unsigned char flags,int f) = NULL;
-
-
-void send_file_entry_v10(struct file_struct *file,int f)
-{
-  unsigned char flags;
-  static mode_t last_mode=0;
-  static dev_t last_rdev=0;
-  static uid_t last_uid=0;
-  static gid_t last_gid=0;
-  static char lastdir[MAXPATHLEN]="";
-  char *p=NULL;
-
-  if (f == -1) return;
-
-  if (!file) {
-    write_byte(f,0);
-    return;
-  }
-
-  flags = FILE_VALID;
-
-  if (file->mode == last_mode) flags |= SAME_MODE;
-  if (file->rdev == last_rdev) flags |= SAME_RDEV;
-  if (file->uid == last_uid) flags |= SAME_UID;
-  if (file->gid == last_gid) flags |= SAME_GID;
-    
-  if (strncmp(file->name,lastdir,strlen(lastdir)) == 0) {
-    flags |= SAME_DIR;
-    p = file->name + strlen(lastdir);
-  } else {
-    p = file->name;
-  }
-
-  write_byte(f,flags);
-  if (flags & SAME_DIR)
-    write_byte(f,strlen(p));
-  else
-    write_int(f,strlen(p));
-  write_buf(f,p,strlen(p));
-  write_int(f,(int)file->modtime);
-  write_int(f,(int)file->length);
-  if (!(flags & SAME_MODE))
-    write_int(f,(int)file->mode);
-  if (preserve_uid && !(flags & SAME_UID))
-    write_int(f,(int)file->uid);
-  if (preserve_gid && !(flags & SAME_GID))
-    write_int(f,(int)file->gid);
-  if (preserve_devices && IS_DEVICE(file->mode) && !(flags & SAME_RDEV))
-    write_int(f,(int)file->rdev);
-
-#if SUPPORT_LINKS
-  if (preserve_links && S_ISLNK(file->mode)) {
-    write_int(f,strlen(file->link));
-    write_buf(f,file->link,strlen(file->link));
-  }
-#endif
-
-  if (always_checksum) {
-    write_buf(f,file->sum,csum_length);
-  }       
-
-  last_mode = file->mode;
-  last_rdev = file->rdev;
-  last_uid = file->uid;
-  last_gid = file->gid;
-  p = strrchr(file->name,'/');
-  if (p) {
-    int l = (int)(p - file->name) + 1;
-    strncpy(lastdir,file->name,l);
-    lastdir[l] = 0;
-  } else {
-    strcpy(lastdir,"");
-  }
-}
-
-
-
-void receive_file_entry_v10(struct file_struct *file,
-                           unsigned char flags,int f)
-{
-  static mode_t last_mode=0;
-  static dev_t last_rdev=0;
-  static uid_t last_uid=0;
-  static gid_t last_gid=0;
-  static char lastdir[MAXPATHLEN]="";
-  char *p=NULL;
-  int l1,l2;
-
-  if (flags & SAME_DIR) {
-    l1 = read_byte(f);
-    l2 = strlen(lastdir);
-  } else {
-    l1 = read_int(f);
-    l2 = 0;
-  }
-
-  file->name = (char *)malloc(l1+l2+1);
-  if (!file->name) out_of_memory("receive_file_entry");
-
-  strncpy(file->name,lastdir,l2);
-  read_buf(f,file->name+l2,l1);
-  file->name[l1+l2] = 0;
-
-  file->modtime = (time_t)read_int(f);
-  file->length = (off_t)read_int(f);
-  file->mode = (flags & SAME_MODE) ? last_mode : (mode_t)read_int(f);
-  if (preserve_uid)
-    file->uid = (flags & SAME_UID) ? last_uid : (uid_t)read_int(f);
-  if (preserve_gid)
-    file->gid = (flags & SAME_GID) ? last_gid : (gid_t)read_int(f);
-  if (preserve_devices && IS_DEVICE(file->mode))
-    file->rdev = (flags & SAME_RDEV) ? last_rdev : (dev_t)read_int(f);
-
-#if SUPPORT_LINKS
-  if (preserve_links && S_ISLNK(file->mode)) {
-    int l = read_int(f);
-    file->link = (char *)malloc(l+1);
-    if (!file->link) out_of_memory("receive_file_entry");
-    read_buf(f,file->link,l);
-    file->link[l] = 0;
-  }
-#endif
-  
-  if (always_checksum)
-    read_buf(f,file->sum,csum_length);
-  
-  last_mode = file->mode;
-  last_rdev = file->rdev;
-  last_uid = file->uid;
-  last_gid = file->gid;
-  p = strrchr(file->name,'/');
-  if (p) {
-    int l = (int)(p - file->name) + 1;
-    strncpy(lastdir,file->name,l);
-    lastdir[l] = 0;
-  } else {
-    strcpy(lastdir,"");
-  }
-}
-
-
-
+extern int verbose;
 
 void setup_protocol(int f_out,int f_in)
 {
-  if (am_server) {
-    remote_version = read_int(f_in);
-    write_int(f_out,PROTOCOL_VERSION);
-    write_flush(f_out);
-  } else {
-    write_int(f_out,PROTOCOL_VERSION);
-    write_flush(f_out);
-    remote_version = read_int(f_in);
-  }
-
-  if (remote_version < MIN_PROTOCOL_VERSION ||
-      remote_version > MAX_PROTOCOL_VERSION) {
-    fprintf(FERROR,"protocol version mismatch - is your shell clean?\n");
-    exit_cleanup(1);
-  }    
-
-  if (remote_version == 10) {
-    send_file_entry = send_file_entry_v10;
-    receive_file_entry = receive_file_entry_v10;
-  } else {
-    send_file_entry = send_file_entry_v11;
-    receive_file_entry = receive_file_entry_v11;
-  }
-
-  if (remote_version >= 12) {
-    if (am_server) {
-      checksum_seed = time(NULL);
-      write_int(f_out,checksum_seed);
-    } else {
-      checksum_seed = read_int(f_in);
-    }
-  }
-
-  checksum_init();
+       if (remote_version == 0) {
+               if (am_server) {
+                       remote_version = read_int(f_in);
+                       write_int(f_out,PROTOCOL_VERSION);
+               } else {
+                       write_int(f_out,PROTOCOL_VERSION);
+                       remote_version = read_int(f_in);
+               }
+       }
+
+       if (remote_version < MIN_PROTOCOL_VERSION ||
+           remote_version > MAX_PROTOCOL_VERSION) {
+               rprintf(FERROR,"protocol version mismatch - is your shell clean?\n");
+               rprintf(FERROR,"(see the rsync man page for an explanation)\n");
+               exit_cleanup(RERR_PROTOCOL);
+       }       
+       
+       if (verbose > 2)
+               rprintf(FINFO, "local_version=%d remote_version=%d\n",
+                       PROTOCOL_VERSION, remote_version);
+       
+       if (remote_version >= 12) {
+               if (am_server) {
+                       checksum_seed = time(NULL);
+                       write_int(f_out,checksum_seed);
+               } else {
+                       checksum_seed = read_int(f_in);
+               }
+       }
+       
+       checksum_init();
 }