-/*
+/*
Copyright (C) by Andrew Tridgell 1996, 2000
Copyright (C) Paul Mackerras 1996
Copyright (C) 2001, 2002 by Martin Pool <mbp@samba.org>
-
+
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
-
+
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
-
+
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
/* These flags are only used during the flist transfer. */
-#define XMIT_TOP_DIR (1<<0)
+#define XMIT_DEL_START (1<<0)
#define XMIT_SAME_MODE (1<<1)
#define XMIT_EXTENDED_FLAGS (1<<2)
#define XMIT_SAME_RDEV_pre28 XMIT_EXTENDED_FLAGS /* Only in protocols < 28 */
/* These flags are used in the live flist data. */
-#define FLAG_TOP_DIR (1<<0)
+#define FLAG_DEL_START (1<<0)
#define FLAG_HLINK_EOL (1<<1) /* generator only */
#define FLAG_MOUNT_POINT (1<<2) /* sender only */
#define MPLEX_BASE 7
-#define NO_EXCLUDES 0
-#define SERVER_EXCLUDES 1
-#define ALL_EXCLUDES 2
+#define NO_FILTERS 0
+#define SERVER_FILTERS 1
+#define ALL_FILTERS 2
#define XFLG_FATAL_ERRORS (1<<0)
#define XFLG_DEF_INCLUDE (1<<1)
-#define XFLG_WORDS_ONLY (1<<2)
+#define XFLG_DEF_EXCLUDE (1<<2)
#define XFLG_WORD_SPLIT (1<<3)
#define XFLG_DIRECTORY (1<<4)
+#define XFLG_NO_PREFIXES (1<<5)
+#define XFLG_ABS_PATH (1<<6)
#define PERMS_REPORT (1<<0)
#define PERMS_SKIP_MTIME (1<<1)
/* For calling delete_file() */
#define DEL_DIR (1<<0)
-#define DEL_RECURSE (1<<1) /* recurse even w/o --force */
-#define DEL_TERSE (1<<2)
+#define DEL_NO_RECURSE (1<<1)
+#define DEL_FORCE_RECURSE (1<<2) /* recurse even w/o --force */
+#define DEL_TERSE (1<<3)
/* Log-message categories. FLOG is only used on the daemon side to
#define uchar unsigned char
#endif
-#if HAVE_UNSIGNED_CHAR
+#if SIGNED_CHAR_OK
#define schar signed char
#else
#define schar char
#define uint32 unsigned int32
#endif
-#if HAVE_OFF64_T
+#if SIZEOF_OFF64_T
#define OFF_T off64_t
#define STRUCT_STAT struct stat64
#else
#define STRUCT_STAT struct stat
#endif
-#if HAVE_OFF64_T
-#define int64 off64_t
-#elif (SIZEOF_LONG == 8)
-#define int64 long
-#elif (SIZEOF_INT == 8)
-#define int64 int
-#elif HAVE_LONGLONG
-#define int64 long long
+/* CAVEAT: on some systems, int64 will really be a 32-bit integer IFF
+ * that's the maximum size the file system can handle and there is no
+ * 64-bit type available. The rsync source must therefore take steps
+ * 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
+# define int64 long
+# define SIZEOF_INT64 8
+#elif SIZEOF_INT == 8
+# define int64 int
+# define SIZEOF_INT64 8
+#elif SIZEOF_LONG_LONG == 8
+# define int64 long long
+# define SIZEOF_INT64 8
+#elif SIZEOF_OFF_T == 8
+# define int64 off_t
+# define SIZEOF_INT64 8
+#elif SIZEOF_INT > 8
+# define int64 int
+# define SIZEOF_INT64 SIZEOF_INT
+#elif SIZEOF_LONG > 8
+# define int64 long
+# define SIZEOF_INT64 SIZEOF_LONG
+#elif SIZEOF_LONG_LONG > 8
+# define int64 long long
+# define SIZEOF_INT64 SIZEOF_LONG_LONG
#else
/* As long as it gets... */
-#define int64 off_t
-#define INT64_IS_OFF_T
+# define int64 off_t
+# define SIZEOF_INT64 SIZEOF_OFF_T
#endif
/* Starting from protocol version 26, we always use 64-bit
*
* FIXME: I don't think the code in flist.c has ever worked on a system
* where dev_t is a struct.
- */
+ */
struct idev {
int64 inode;
#define MATCHFLG_INCLUDE (1<<4) /* this is an include, not an exclude */
#define MATCHFLG_DIRECTORY (1<<5) /* this matches only directories */
#define MATCHFLG_CLEAR_LIST (1<<6) /* this item is the "!" token */
-struct exclude_struct {
- struct exclude_struct *next;
+#define MATCHFLG_WORD_SPLIT (1<<7) /* split rules on whitespace */
+#define MATCHFLG_NO_INHERIT (1<<8) /* don't inherit these rules */
+#define MATCHFLG_NO_PREFIXES (1<<9) /* parse no prefixes from patterns */
+#define MATCHFLG_MERGE_FILE (1<<10)/* specifies a file to merge */
+#define MATCHFLG_PERDIR_MERGE (1<<11)/* merge-file is searched per-dir */
+#define MATCHFLG_EXCLUDE_SELF (1<<12)/* merge-file name should be excluded */
+#define MATCHFLG_FINISH_SETUP (1<<13)/* per-dir merge file needs setup */
+struct filter_struct {
+ struct filter_struct *next;
char *pattern;
unsigned int match_flags;
- int slash_cnt;
+ union {
+ int slash_cnt;
+ struct filter_list_struct *mergelist;
+ } u;
};
-struct exclude_list_struct {
- struct exclude_struct *head;
- struct exclude_struct *tail;
+struct filter_list_struct {
+ struct filter_struct *head;
+ struct filter_struct *tail;
char *debug_type;
};
int64 total_read;
int64 literal_data;
int64 matched_data;
+ int64 flist_buildtime;
+ int64 flist_xfertime;
int flist_size;
int num_files;
int num_transferred_files;
# define NONBLOCK_FLAG O_NONBLOCK
#elif defined(SYSV)
# define NONBLOCK_FLAG O_NDELAY
-#else
+#else
# define NONBLOCK_FLAG FNDELAY
#endif
/* Apparently the OS X port of gcc gags on __attribute__.
*
* <http://www.opensource.apple.com/bugs/X/gcc/2512150.html> */
-#define __attribute__(x)
+#define __attribute__(x)
#endif
extern int verbose;
#ifndef HAVE_INET_NTOP
-const char *
-inet_ntop(int af, const void *src, char *dst, size_t size);
+const char *inet_ntop(int af, const void *src, char *dst, size_t size);
#endif /* !HAVE_INET_NTOP */
#ifndef HAVE_INET_PTON