#define FLAG_DELETE (1<<0)
#define SAME_MODE (1<<1)
#define EXTENDED_FLAGS (1<<2)
-#define OLD_SAME_RDEV EXTENDED_FLAGS
+#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 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 28
#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 {
int flist_size;
int num_files;
int num_transferred_files;
+ int current_file_index;
};