#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|HAS_INODE_DATA)
/* 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
* unlikely to begin by sending a byte between MIN_PROTOCL_VERSION and
* MAX_PROTOCOL_VERSION. */
-#define MIN_PROTOCOL_VERSION 17
+#define MIN_PROTOCOL_VERSION 19
#define OLD_PROTOCOL_VERSION 20
#define MAX_PROTOCOL_VERSION 40
#define IN_LOOPBACKNET 127
#endif
+#define GID_NONE (gid_t) -1
+
struct file_struct {
- unsigned flags;
time_t modtime;
OFF_T length;
mode_t mode;
-
INO64_T inode;
- /** Device this file lives upon */
DEV64_T dev;
-
- /** If this is a device node, the device number. */
- DEV64_T rdev;
+ 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;
uid_t uid;
gid_t gid;
char *basename;
char *dirname;
char *basedir;
- char *link;
- char *sum;
+ unsigned short flags;
};
struct sum_buf {
OFF_T offset; /**< offset in file of this chunk */
- int len; /**< length of chunk of file */
+ unsigned int len; /**< length of chunk of file */
int i; /**< index of this chunk */
uint32 sum1; /**< simple checksum */
char sum2[SUM_LENGTH]; /**< checksum */
struct sum_struct {
OFF_T flength; /**< total file length */
size_t count; /**< how many chunks */
- size_t remainder; /**< flength % block_length */
- size_t blength; /**< block_length */
- size_t s2length; /**< sum2_length */
+ unsigned int blength; /**< block_length */
+ unsigned int remainder; /**< flength % block_length */
+ int s2length; /**< sum2_length */
struct sum_buf *sums; /**< points to info for each chunk */
};