- Changes to handle new default of --delete-during for --delete.
[rsync/rsync.git] / rsync.h
diff --git a/rsync.h b/rsync.h
index 79c8ccf..3245565 100644 (file)
--- a/rsync.h
+++ b/rsync.h
@@ -216,6 +216,9 @@ enum msgcode {
 #ifdef HAVE_STRINGS_H
 # include <strings.h>
 #endif
+#ifdef HAVE_INTTYPES_H
+# include <inttypes.h>
+#endif
 #ifdef HAVE_UNISTD_H
 # include <unistd.h>
 #endif
@@ -355,11 +358,30 @@ enum msgcode {
 #define schar char
 #endif
 
+#ifndef int16
+#if SIZEOF_INT16_T == 2
+# define int16 int16_t
+#else
+# define int16 short
+#endif
+#endif
+
+#ifndef uint16
+#if SIZEOF_UINT16_T == 2
+# define uint16 uint16_t
+#else
+# define uint16 unsigned int16
+#endif
+#endif
+
 /* Find a variable that is either exactly 32-bits or longer.
  * If some code depends on 32-bit truncation, it will need to
  * take special action in a "#if SIZEOF_INT32 > 4" section. */
 #ifndef int32
-#if SIZEOF_INT == 4
+#if SIZEOF_INT32_T == 4
+# define int32 int32_t
+# define SIZEOF_INT32 4
+#elif SIZEOF_INT == 4
 # define int32 int
 # define SIZEOF_INT32 4
 #elif SIZEOF_LONG == 4
@@ -382,7 +404,11 @@ enum msgcode {
 #endif
 
 #ifndef uint32
-#define uint32 unsigned int32
+#if SIZEOF_UINT32_T == 4
+# define uint32 uint32_t
+#else
+# define uint32 unsigned int32
+#endif
 #endif
 
 #if SIZEOF_OFF_T == 8 || !SIZEOF_OFF64_T || !defined HAVE_STRUCT_STAT64
@@ -400,7 +426,10 @@ enum msgcode {
  * to ensure that any code that really requires a 64-bit integer has
  * it (e.g. the checksum code uses two 32-bit integers for its 64-bit
  * counter). */
-#if SIZEOF_LONG == 8
+#if SIZEOF_INT64_T == 8
+# define int64 int64_t
+# define SIZEOF_INT64 8
+#elif SIZEOF_LONG == 8
 # define int64 long
 # define SIZEOF_INT64 8
 #elif SIZEOF_INT == 8
@@ -456,11 +485,6 @@ enum msgcode {
  * where dev_t is a struct.
  */
 
-struct idev {
-       int64 ino;
-       int64 dev;
-};
-
 struct idev_node {
        int64 key;
        void *data;
@@ -511,36 +535,30 @@ struct idev_node {
 #define GID_NONE ((gid_t)-1)
 
 union file_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 */
-       int32 num;              /* A signed number */
-       uint32 unum;            /* An unsigned number */
+       int32 num;
+       uint32 unum;
 };
 
 struct file_struct {
-       time_t modtime;              /* When the item was last modified */
-       const char *dirname;         /* The dir info inside the transfer */
-       union {
-               const char *root;    /* Sender-side dir info outside transfer */
-               int32 depth;         /* Receiver-side directory depth info */
-       } dir;
-       uint32 len32;                /* Lowest 32 bits of the file's length */
-       unsigned short mode;         /* The item's type and permissions */
-       unsigned short flags;        /* The FLAG_* bits for this item */
-       const char basename[1];      /* The basename (AKA filename) follows */
+       const char *dirname;    /* The dir info inside the transfer */
+       time_t modtime;         /* When the item was last modified */
+       uint32 len32;           /* Lowest 32 bits of the file's length */
+       uint16 mode;            /* The item's type and permissions */
+       uint16 flags;           /* The FLAG_* bits for this item */
+       const char basename[1]; /* The basename (AKA filename) follows */
 };
 
-extern int flist_extra_cnt;
+extern int file_extra_cnt;
 extern int preserve_uid;
 extern int preserve_gid;
 
 #define FILE_STRUCT_LEN (offsetof(struct file_struct, basename))
 #define EXTRA_LEN (sizeof (union file_extras))
+#define PTR_EXTRA_LEN ((sizeof (char *) + EXTRA_LEN - 1) / EXTRA_LEN)
 #define SUM_EXTRA_CNT ((MD4_SUM_LENGTH + EXTRA_LEN - 1) / EXTRA_LEN)
 
 #define REQ_EXTRA(f,ndx) ((union file_extras*)(f) - (ndx))
-#define OPT_EXTRA(f,bump) ((union file_extras*)(f) - flist_extra_cnt - 1 - (bump))
+#define OPT_EXTRA(f,bump) ((union file_extras*)(f) - file_extra_cnt - 1 - (bump))
 
 #define LEN64_BUMP(f) ((f)->flags & FLAG_LENGTH64 ? 1 : 0)
 #define HLINK_BUMP(f) (F_IS_HLINKED(f) ? 1 : 0)
@@ -556,12 +574,17 @@ extern int preserve_gid;
 /* If there is a symlink string, it is always right after the basename */
 #define F_SYMLINK(f) ((f)->basename + strlen((f)->basename) + 1)
 
+/* The sending side always has this available: */
+#define F_ROOTDIR(f) (*(const char**)REQ_EXTRA(f, PTR_EXTRA_LEN))
+
+/* The receiving side always has this available: */
+#define F_DEPTH(f) REQ_EXTRA(f, 1)->num
+
 /* When the associated option is on, all entries will have these present: */
-#define F_UID(f) REQ_EXTRA(f, preserve_uid)->uid
-#define F_GID(f) REQ_EXTRA(f, preserve_gid)->gid
+#define F_UID(f) REQ_EXTRA(f, preserve_uid)->unum
+#define F_GID(f) REQ_EXTRA(f, preserve_gid)->unum
 
 /* 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