X-Git-Url: https://mattmccutchen.net/rsync/rsync.git/blobdiff_plain/bfd3137246794e3eee55ae8e19968d50006050da..eefe189e1d8a7919d3b69a8db6dede3cf7f8c250:/rsync.h diff --git a/rsync.h b/rsync.h index 4b07b78e..c2a4e674 100644 --- a/rsync.h +++ b/rsync.h @@ -44,15 +44,16 @@ #define XMIT_TOP_DIR (1<<0) #define XMIT_SAME_MODE (1<<1) #define XMIT_EXTENDED_FLAGS (1<<2) -#define XMIT_SAME_RDEV_pre28 XMIT_EXTENDED_FLAGS /* Only in protocols < 28 */ +#define XMIT_SAME_RDEV_pre28 XMIT_EXTENDED_FLAGS /* protocols < 28 */ #define XMIT_SAME_UID (1<<3) #define XMIT_SAME_GID (1<<4) #define XMIT_SAME_NAME (1<<5) #define XMIT_LONG_NAME (1<<6) #define XMIT_SAME_TIME (1<<7) #define XMIT_SAME_RDEV_MAJOR (1<<8) -#define XMIT_HAS_IDEV_DATA (1<<9) -#define XMIT_SAME_DEV (1<<10) +#define XMIT_HLINKED (1<<9) +#define XMIT_SAME_DEV_pre30 (1<<10) /* protocols < 30 */ +#define XMIT_HLINK_FIRST (1<<10) /* protocols >= 30 */ #define XMIT_RDEV_MINOR_IS_SMALL (1<<11) /* These flags are used in the live flist data. */ @@ -70,6 +71,8 @@ #define BITS_SET(val,bits) (((val) & (bits)) == (bits)) #define BITS_SETnUNSET(val,onbits,offbits) (((val) & ((onbits)|(offbits))) == (onbits)) +#define BITS_EQUAL(b1,b2,mask) (((unsigned)(b1) & (unsigned)(mask)) \ + == ((unsigned)(b2) & (unsigned)(mask))) /* update this if you make incompatible changes */ #define PROTOCOL_VERSION 30 @@ -174,7 +177,7 @@ enum logcode { FNONE=0, FERROR=1, FINFO=2, FLOG=3, FCLIENT=4, FSOCKERR=5 }; enum msgcode { MSG_DATA=0, /* raw data on the multiplexed stream */ MSG_ERROR=FERROR, MSG_INFO=FINFO, /* remote logging */ - MSG_LOG=FLOG, MSG_SOCKERR=FSOCKERR, /* sibling logging */ + MSG_LOG=FLOG, MSG_CLIENT=FCLIENT, MSG_SOCKERR=FSOCKERR, /* sibling logging */ MSG_REDO=9, /* reprocess indicated flist index */ MSG_SUCCESS=100,/* successfully updated indicated flist index */ MSG_DELETED=101,/* successfully deleted a file on receiving side */ @@ -458,6 +461,11 @@ struct idev { int64 dev; }; +struct idev_node { + int64 key; + void *data; +}; + #ifndef MIN #define MIN(a,b) ((a)<(b)?(a):(b)) #endif @@ -507,7 +515,6 @@ struct file_struct { uid_t uid; /* The user ID number */ uid_t gid; /* The group ID number or GID_NONE */ struct idev *idev; /* The hard-link info during matching */ - struct hlist *hlist; /* The hard-link info after matching */ int32 num; /* A signed number */ uint32 unum; /* An unsigned number */ } extras[1]; @@ -539,8 +546,12 @@ extern int preserve_gid; /* Basename (AKA filename) and length applies to all items */ #define F_BASENAME(f) ((const char*)(f) + FILE_STRUCT_LEN) -#define F_LENGTH(f) ((OFF_T)(f)->len32 + ((f)->flags & FLAG_LENGTH64 \ - ? (OFF_T)OPT_EXTRA(f, 0)->unum << 32 : 0u)) +#if SIZEOF_INT64 < 8 +#define F_LENGTH(f) ((int64)(f)->len32) +#else +#define F_LENGTH(f) ((int64)(f)->len32 + ((f)->flags & FLAG_LENGTH64 \ + ? (int64)OPT_EXTRA(f, 0)->unum << 32 : 0)) +#endif /* If there is a symlink string, it is always right after the basename */ #define F_SYMLINK(f) (F_BASENAME(f) + strlen(F_BASENAME(f)) + 1) @@ -551,6 +562,7 @@ extern int preserve_gid; /* These items are per-entry optional and mutally exclusive: */ #define F_HL_IDEV(f) OPT_EXTRA(f, LEN64_BUMP(f))->idev +#define F_HL_GNUM(f) OPT_EXTRA(f, LEN64_BUMP(f))->num #define F_HL_PREV(f) OPT_EXTRA(f, LEN64_BUMP(f))->num /* This optional item might follow an F_HL_*() item. @@ -564,8 +576,8 @@ extern int preserve_gid; /* Some utility defines: */ #define F_IS_ACTIVE(f) F_BASENAME(f)[0] #define F_IS_HLINKED(f) ((f)->flags & FLAG_HLINKED) -#define F_NOT_HLINK_FIRST(f) BITS_SETnUNSET((f)->flags, FLAG_HLINKED, FLAG_HLINK_FIRST) -#define F_NOT_HLINK_LAST(f) BITS_SETnUNSET((f)->flags, FLAG_HLINKED, FLAG_HLINK_LAST) +#define F_HLINK_NOT_FIRST(f) BITS_SETnUNSET((f)->flags, FLAG_HLINKED, FLAG_HLINK_FIRST) +#define F_HLINK_NOT_LAST(f) BITS_SETnUNSET((f)->flags, FLAG_HLINKED, FLAG_HLINK_LAST) #define DEV_MAJOR(a) (a)[0] #define DEV_MINOR(a) (a)[1]