#define FLAG_DEL_HERE (1<<3) /* receiver/generator */
#define FLAG_HLINK_TOL (1<<4) /* receiver/generator */
#define FLAG_NO_FUZZY (1<<5) /* generator */
+#define FLAG_MISSING (1<<6) /* generator */
/* update this if you make incompatible changes */
-#define PROTOCOL_VERSION 29
+#define PROTOCOL_VERSION 30
/* 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
/* These are outside the range of the transmitted flags. */
#define ITEM_MISSING_DATA (1<<16) /* used by log_formatted() */
#define ITEM_DELETED (1<<17) /* used by log_formatted() */
+#define ITEM_MATCHED (1<<18) /* used by itemize() */
#define SIGNIFICANT_ITEM_FLAGS (~(\
ITEM_BASIS_TYPE_FOLLOWS | ITEM_XNAME_FOLLOWS | ITEM_LOCAL_CHANGE))
/* Log-message categories. Only FERROR and FINFO get sent over the socket,
* but FLOG and FSOCKERR can be sent over the receiver -> generator pipe.
* FLOG only goes to the log file, not the client; FCLIENT is the opposite. */
-enum logcode { FERROR=1, FINFO=2, FLOG=3, FCLIENT=4, FSOCKERR=5 };
+enum logcode { FNONE=0, FERROR=1, FINFO=2, FLOG=3, FCLIENT=4, FSOCKERR=5 };
/* Messages types that are sent over the message channel. The logcode
* values must all be present here with identical numbers. */
#include <sys/sysmacros.h>
#endif
+#ifdef MAKEDEV_TAKES_3_ARGS
+#define MAKEDEV(devmajor,devminor) makedev(0,devmajor,devminor)
+#else
+#define MAKEDEV(devmajor,devminor) makedev(devmajor,devminor)
+#endif
+
#ifdef HAVE_COMPAT_H
#include <compat.h>
#endif
* 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_OFF64_T == 8
-# define int64 off64_t
-# define SIZEOF_INT64 8
-#elif SIZEOF_LONG == 8
+#if SIZEOF_LONG == 8
# define int64 long
# define SIZEOF_INT64 8
#elif SIZEOF_INT == 8
#elif SIZEOF_LONG_LONG == 8
# define int64 long long
# define SIZEOF_INT64 8
+#elif SIZEOF_OFF64_T == 8
+# define int64 off64_t
+# define SIZEOF_INT64 8
#elif SIZEOF_OFF_T == 8
# define int64 off_t
# define SIZEOF_INT64 8
#define HL_SKIP 1
struct hlink {
- int next;
- int hlindex;
+ int32 next;
+ int32 hlindex;
+ unsigned short link_dest_used;
};
#define F_DEV link_u.idev->dev
struct file_struct {
union {
dev_t rdev; /* The device number, if this is a device */
- char *sum; /* Only a normal file can have a checksum */
- char *link; /* Points to symlink string, if a symlink */
+ const char *sum;/* Only a normal file can have a checksum */
+ const char *link;/* Points to symlink string, if a symlink */
} u;
OFF_T length;
- char *basename; /* The current item's name (AKA filename) */
- char *dirname; /* The directory info inside the transfer */
+ const char *basename; /* The current item's name (AKA filename) */
+ const char *dirname; /* The directory info inside the transfer */
union {
- char *root; /* Sender-side dir info outside transfer */
+ const char *root;/* Sender-side dir info outside transfer */
int depth; /* Receiver-side directory depth info */
} dir;
union {
#define MATCHFLG_SENDER_SIDE (1<<16)/* rule applies to the sending side */
#define MATCHFLG_RECEIVER_SIDE (1<<17)/* rule applies to the receiving side */
#define MATCHFLG_CLEAR_LIST (1<<18)/* this item is the "!" token */
+#define MATCHFLG_PERISHABLE (1<<19)/* perishable if parent dir goes away */
#define MATCHFLGS_FROM_CONTAINER (MATCHFLG_ABS_PATH | MATCHFLG_INCLUDE \
| MATCHFLG_DIRECTORY | MATCHFLG_SENDER_SIDE \
- | MATCHFLG_NEGATE | MATCHFLG_RECEIVER_SIDE)
+ | MATCHFLG_NEGATE | MATCHFLG_RECEIVER_SIDE \
+ | MATCHFLG_PERISHABLE)
struct filter_struct {
struct filter_struct *next;
int64 matched_data;
int64 flist_buildtime;
int64 flist_xfertime;
- int flist_size;
+ int64 flist_size;
int num_files;
int num_transferred_files;
int current_file_index;
#include "lib/permstring.h"
#include "lib/addrinfo.h"
-#if !defined __GNUC__ || defined __APPLE__
-/* Apparently the OS X port of gcc gags on __attribute__.
- *
- * <http://www.opensource.apple.com/bugs/X/gcc/2512150.html> */
+#ifndef __GNUC__
#define __attribute__(x)
+# if __GNUC__ <= 2
+# define NORETURN
+# endif
#endif
#define UNUSED(x) x __attribute__((__unused__))
+#ifndef NORETURN
+#define NORETURN __attribute__((__noreturn__))
+#endif
#include "proto.h"
#ifndef WEXITSTATUS
#define WEXITSTATUS(stat) ((int)(((stat)>>8)&0xFF))
#endif
+#ifndef WIFEXITED
+#define WIFEXITED(stat) ((int)((stat)&0xFF) == 0)
+#endif
#define exit_cleanup(code) _exit_cleanup(code, __FILE__, __LINE__)
#ifdef MAINTAINER_MODE
const char *get_panic_action(void);
#endif
+
+static inline int
+isDigit(const char *ptr)
+{
+ return isdigit(*(unsigned char *)ptr);
+}
+
+static inline int
+isPrint(const char *ptr)
+{
+ return isprint(*(unsigned char *)ptr);
+}
+
+static inline int
+isSpace(const char *ptr)
+{
+ return isspace(*(unsigned char *)ptr);
+}
+
+static inline int
+isLower(const char *ptr)
+{
+ return islower(*(unsigned char *)ptr);
+}
+
+static inline int
+isUpper(const char *ptr)
+{
+ return isupper(*(unsigned char *)ptr);
+}
+
+static inline int
+toLower(const char *ptr)
+{
+ return tolower(*(unsigned char *)ptr);
+}
+
+static inline int
+toUpper(const char *ptr)
+{
+ return toupper(*(unsigned char *)ptr);
+}