- Moved the err_list* stuff here from log.c and renamed them msg_list*.
[rsync/rsync.git] / rsync.h
diff --git a/rsync.h b/rsync.h
index dd3aa98..bc00958 100644 (file)
--- a/rsync.h
+++ b/rsync.h
 
 #define FLAG_DELETE (1<<0)
 #define SAME_MODE (1<<1)
-#define SAME_RDEV (1<<2)
+#define EXTENDED_FLAGS (1<<2)
+#define SAME_RDEV_pre28 EXTENDED_FLAGS /* Only use in protocols < 28 */
 #define SAME_UID (1<<3)
 #define SAME_GID (1<<4)
 #define SAME_DIR (1<<5)
 #define SAME_NAME SAME_DIR
 #define LONG_NAME (1<<6)
 #define SAME_TIME (1<<7)
+#define SAME_HIGH_RDEV (1<<8)
+#define HAS_INODE_DATA (1<<9)
+#define SAME_DEV (1<<10)
+
+/* What flags are relevant after the transfer of the flist is complete? */
+#define LIVE_FLAGS FLAG_DELETE
 
 /* update this if you make incompatible changes */
-#define PROTOCOL_VERSION 27
+#define PROTOCOL_VERSION 28
 
 /* We refuse to interoperate with versions that are not in this range.
  * Note that we assume we'll work with later versions: the onus is on
@@ -364,28 +371,43 @@ enum logcode {FNONE=0, FERROR=1, FINFO=2, FLOG=3 };
 
 #define GID_NONE (gid_t) -1
 
-struct file_struct {
-       time_t modtime;
-       OFF_T length;
-       mode_t mode;
+struct hlink {
+       struct file_struct *head;
+       struct file_struct *next;
+};
 
+struct idev {
        INO64_T inode;
-       /** Device this file lives upon */
        DEV64_T dev;
+};
 
-       /** If this is a device node, the device number. */
-       DEV64_T rdev;
-       uid_t uid;
-       gid_t gid;
+#define F_DEV  link_u.idev->dev
+#define F_INODE        link_u.idev->inode
+
+#define F_HEAD link_u.links->head
+#define F_NEXT link_u.links->next
+
+struct file_struct {
+       time_t modtime;
+       OFF_T length;
+       mode_t mode;
+       union {
+               DEV64_T rdev;   /* The device number, if this is a device */
+               char *sum;      /* Only a normal file can have a checksum */
+               char *link;     /* Holds symlink string, if a symlink */
+       } u;
+       union {
+               struct idev *idev;
+               struct hlink *links;
+       } link_u;
        char *basename;
        char *dirname;
        char *basedir;
-       char *link;
-       char *sum;
+       uid_t uid;
+       gid_t gid;
        unsigned short flags;
 };
 
-
 #define ARENA_SIZE     (32 * 1024)
 
 struct string_area {
@@ -455,6 +477,7 @@ struct stats {
        int flist_size;
        int num_files;
        int num_transferred_files;
+       int current_file_index;
 };