X-Git-Url: https://mattmccutchen.net/rsync/rsync.git/blobdiff_plain/b37b7c9949060919e326226b6799186815d3b5a3..234844915e81c9ebc3e95b2e312982d3d1eb59a3:/rsync.h diff --git a/rsync.h b/rsync.h index ddda83d6..e5a40194 100644 --- a/rsync.h +++ b/rsync.h @@ -65,7 +65,11 @@ #define FLAG_HLINKED (1<<5) /* receiver/generator */ #define FLAG_HLINK_FIRST (1<<6) /* receiver/generator */ #define FLAG_HLINK_LAST (1<<7) /* receiver/generator */ -#define FLAG_LENGTH64 (1<<8) /* sender/receiver/generator */ +#define FLAG_HLINK_DONE (1<<8) /* receiver/generator */ +#define FLAG_LENGTH64 (1<<9) /* sender/receiver/generator */ + +#define BITS_SET(val,bits) (((val) & (bits)) == (bits)) +#define BITS_SETnUNSET(val,onbits,offbits) (((val) & ((onbits)|(offbits))) == (onbits)) /* update this if you make incompatible changes */ #define PROTOCOL_VERSION 30 @@ -170,7 +174,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 */ @@ -498,21 +502,11 @@ struct idev { #define GID_NONE ((gid_t)-1) -#define HL_CHECK_MASTER 0 -#define HL_SKIP 1 - -struct hlist { - int32 next; - int32 hlindex; - unsigned short dest_used; -}; - struct file_struct { union flist_extras { 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]; @@ -544,8 +538,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) @@ -556,7 +554,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_LIST(f) OPT_EXTRA(f, LEN64_BUMP(f))->hlist +#define F_HL_PREV(f) OPT_EXTRA(f, LEN64_BUMP(f))->num /* This optional item might follow an F_HL_*() item. * (Note: a device doesn't need to check LEN64_BUMP(f).) */ @@ -567,8 +565,10 @@ extern int preserve_gid; + SUM_EXTRA_CNT - 1)) /* Some utility defines: */ -#define F_IS_HLINKED(f) ((f)->flags & FLAG_HLINKED) #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 DEV_MAJOR(a) (a)[0] #define DEV_MINOR(a) (a)[1] @@ -592,13 +592,9 @@ extern int preserve_gid; #define FILE_EXTENT (256 * 1024) #define HLINK_EXTENT (128 * 1024) -#define WITH_HLINK 1 -#define WITHOUT_HLINK 0 - struct file_list { struct file_struct **files; alloc_pool_t file_pool; - alloc_pool_t hlink_pool; int count, malloced; int low, high; /* 0-relative index values excluding empties */ };