* people writing them to make sure that they don't send us anything
* we won't understand.
*
+ * Interoperation with old but supported protocol versions
+ * should cause a warning to be printed. At a future date
+ * the old protocol will become the minimum and
+ * compatibility code removed.
+ *
* There are two possible explanations for the limit at thirty: either
* to allow new major-rev versions that do not interoperate with us,
* and (more likely) so that we can detect an attempt to connect rsync
* to a non-rsync server, which is unlikely to begin by sending a byte
* between 15 and 30. */
#define MIN_PROTOCOL_VERSION 15
-#define MAX_PROTOCOL_VERSION 30
+#define OLD_PROTOCOL_VERSION 20
+#define MAX_PROTOCOL_VERSION 40
#define RSYNC_PORT 873
#if HAVE_OFF64_T
#define int64 off64_t
+#define uint64 unsigned off64_t
#elif (SIZEOF_LONG == 8)
#define int64 long
+#define uint64 unigned long
#elif (SIZEOF_INT == 8)
#define int64 int
+#define uint64 unsigned int
#elif HAVE_LONGLONG
#define int64 long long
+#define uint64 unsigned long long
#else
/* As long as it gets... */
#define int64 off_t
+#define uint64 unsigned off_t
#define NO_INT64
#endif
* cope with platforms on which this is an unsigned int or even a
* struct. Later.
*/
-#define INO64_T int64
-#define DEV64_T int64
+#define INO64_T uint64
+#define DEV64_T uint64
#ifndef MIN
#define MIN(a,b) ((a)<(b)?(a):(b))
#define S_IWUSR 0200
#endif
+#ifndef ACCESSPERMS
+#define ACCESSPERMS 0777
+#endif
+
+#ifndef S_ISVTX
+#define S_ISVTX 0
+#endif
+
+#define CHMOD_BITS (S_ISUID | S_ISGID | S_ISVTX | ACCESSPERMS)
+
#ifndef _S_IFMT
#define _S_IFMT 0170000
#endif
#define IS_DEVICE(mode) (S_ISCHR(mode) || S_ISBLK(mode) || S_ISSOCK(mode) || S_ISFIFO(mode))
-#ifndef ACCESSPERMS
-#define ACCESSPERMS 0777
-#endif
/* Initial mask on permissions given to temporary files. Mask off setuid
bits and group access because of potential race-condition security
holes, and mask other access because mode 707 is bizarre */
#define inet_ntoa rep_inet_ntoa
#endif
-/* Compatibility defines so that platforms that don't distinguish between
- * text and binary files (like Cygwin does) can use the same code. */
-#ifndef O_TEXT
-#define O_TEXT 0
-#define O_TEXT_STR ""
-#else
-#define O_TEXT_STR "t"
-#endif
-#ifndef O_BINARY
-#define O_BINARY 0
-#define O_BINARY_STR ""
-#else
-#define O_BINARY_STR "b"
-#endif
#ifndef HAVE_STRLCPY
size_t strlcpy(char *d, const char *s, size_t bufsize);