Changed some instances of \" in checkit calls to '.
[rsync/rsync.git] / rsync.h
diff --git a/rsync.h b/rsync.h
index f08806c..bb530bd 100644 (file)
--- a/rsync.h
+++ b/rsync.h
 #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)    /* protocols 28 - NOW */
+#define XMIT_SAME_RDEV_MAJOR (1<<8)    /* protocols 28 - NOW (devices only) */
+#define XMIT_NON_XFER_DIR (1<<8)       /* protocols 30 - NOW (dirs only) */
 #define XMIT_HLINKED (1<<9)            /* protocols 28 - NOW */
 #define XMIT_SAME_DEV_pre30 (1<<10)    /* protocols 28 - 29  */
 #define XMIT_USER_NAME_FOLLOWS (1<<10) /* protocols 30 - NOW */
 #define XMIT_RDEV_MINOR_8_pre30 (1<<11)        /* protocols 28 - 29  */
 #define XMIT_GROUP_NAME_FOLLOWS (1<<11) /* protocols 30 - NOW */
-#define XMIT_HLINK_FIRST (1<<12)       /* protocols 30 - NOW */
+#define XMIT_HLINK_FIRST (1<<12)       /* protocols 30 - NOW (HLINKED files only) */
 
 /* These flags are used in the live flist data. */
 
@@ -88,7 +89,7 @@
 /* This is used when working on a new protocol version in CVS, and should
  * be a new non-zero value for each CVS change that affects the protocol.
  * It must ALWAYS be 0 when the protocol goes final! */
-#define SUBPROTOCOL_VERSION 4
+#define SUBPROTOCOL_VERSION 6
 
 /* 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
@@ -490,37 +491,26 @@ enum msgcode {
 # define SIZEOF_INT64 SIZEOF_OFF_T
 #endif
 
-/* Starting from protocol version 26, we always use 64-bit
- * ino_t and dev_t internally, even if this platform does not
- * allow files to have 64-bit inums.  That's because the
- * receiver needs to find duplicate (dev,ino) tuples to detect
- * hardlinks, and it might have files coming from a platform
- * that has 64-bit inums.
- *
- * The only exception is if we're on a platform with no 64-bit type at
- * all.
- *
- * Because we use read_longint() to get these off the wire, if you
- * transfer devices or hardlinks with dev or inum > 2**32 to a machine
- * with no 64-bit types then you will get an overflow error.  Probably
- * not many people have that combination of machines, and you can
- * avoid it by not preserving hardlinks or not transferring device
- * nodes.  It's not clear that any other behaviour is better.
- *
- * Note that if you transfer devices from a 64-bit-devt machine (say,
- * Solaris) to a 32-bit-devt machine (say, Linux-2.2/x86) then the
- * device numbers will be truncated.  But it's a kind of silly thing
- * to do anyhow.
- *
- * FIXME: I don't think the code in flist.c has ever worked on a system
- * where dev_t is a struct.
- */
+struct hashtable {
+       void *nodes;
+       int32 size, entries;
+       uint32 node_size;
+};
 
-struct idev_node {
-       int64 key;
+struct ht_int32_node {
+       void *data;
+       int32 key;
+};
+
+struct ht_int64_node {
        void *data;
+       int64 key;
 };
 
+#define HT_NODE(tbl, bkts, i) ((void*)((char*)(bkts) + (i)*(tbl)->node_size))
+#define HT_KEY(node, k64) ((k64)? ((struct ht_int64_node*)(node))->key \
+                        : (int64)((struct ht_int32_node*)(node))->key)
+
 #ifndef MIN
 #define MIN(a,b) ((a)<(b)?(a):(b))
 #endif
@@ -986,9 +976,11 @@ extern int errno;
 #define NS(s) ((s)?(s):"<NULL>")
 
 /* Convenient wrappers for malloc and realloc.  Use them. */
-#define new(type) ((type *)malloc(sizeof(type)))
-#define new_array(type, num) ((type *)_new_array(sizeof(type), (num)))
-#define realloc_array(ptr, type, num) ((type *)_realloc_array((ptr), sizeof(type), (num)))
+#define new(type) ((type*)malloc(sizeof (type)))
+#define new0(type) ((type*)calloc(1, sizeof (type)))
+#define new_array(type, num) ((type*)_new_array((num), sizeof (type), 0))
+#define new_array0(type, num) ((type*)_new_array((num), sizeof (type), 1))
+#define realloc_array(ptr, type, num) ((type*)_realloc_array((ptr), sizeof(type), (num)))
 
 /* use magic gcc attributes to catch format errors */
  void rprintf(enum logcode , const char *, ...)