Diff for /embedaddon/rsync/rsync.h between versions 1.1.1.3 and 1.1.1.4

version 1.1.1.3, 2016/11/01 09:54:32 version 1.1.1.4, 2021/03/17 00:32:36
Line 2 Line 2
  * Copyright (C) 1996, 2000 Andrew Tridgell   * Copyright (C) 1996, 2000 Andrew Tridgell
  * Copyright (C) 1996 Paul Mackerras   * Copyright (C) 1996 Paul Mackerras
  * Copyright (C) 2001, 2002 Martin Pool <mbp@samba.org>   * Copyright (C) 2001, 2002 Martin Pool <mbp@samba.org>
 * Copyright (C) 2003-2015 Wayne Davison * Copyright (C) 2003-2020 Wayne Davison
  *   *
  * This program is free software; you can redistribute it and/or modify   * 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   * it under the terms of the GNU General Public License as published by
Line 20 Line 20
   
 #define False 0  #define False 0
 #define True 1  #define True 1
   #define Unset (-1) /* Our BOOL values are always an int. */
   
 #define BLOCK_SIZE 700  #define BLOCK_SIZE 700
 #define RSYNC_RSH_ENV "RSYNC_RSH"  #define RSYNC_RSH_ENV "RSYNC_RSH"
Line 52 Line 53
 #define XMIT_SAME_NAME (1<<5)  #define XMIT_SAME_NAME (1<<5)
 #define XMIT_LONG_NAME (1<<6)  #define XMIT_LONG_NAME (1<<6)
 #define XMIT_SAME_TIME (1<<7)  #define XMIT_SAME_TIME (1<<7)
   
 #define XMIT_SAME_RDEV_MAJOR (1<<8)     /* protocols 28 - now (devices only) */  #define XMIT_SAME_RDEV_MAJOR (1<<8)     /* protocols 28 - now (devices only) */
 #define XMIT_NO_CONTENT_DIR (1<<8)      /* protocols 30 - now (dirs only) */  #define XMIT_NO_CONTENT_DIR (1<<8)      /* protocols 30 - now (dirs only) */
#define XMIT_HLINKED (1<<9)             /* protocols 28 - now */#define XMIT_HLINKED (1<<9)             /* protocols 28 - now (non-dirs) */
 #define XMIT_SAME_DEV_pre30 (1<<10)     /* protocols 28 - 29  */  #define XMIT_SAME_DEV_pre30 (1<<10)     /* protocols 28 - 29  */
 #define XMIT_USER_NAME_FOLLOWS (1<<10)  /* protocols 30 - now */  #define XMIT_USER_NAME_FOLLOWS (1<<10)  /* protocols 30 - now */
#define XMIT_RDEV_MINOR_8_pre30 (1<<11) /* protocols 28 - 29  */#define XMIT_RDEV_MINOR_8_pre30 (1<<11) /* protocols 28 - 29  */
 #define XMIT_GROUP_NAME_FOLLOWS (1<<11) /* protocols 30 - now */  #define XMIT_GROUP_NAME_FOLLOWS (1<<11) /* protocols 30 - now */
 #define XMIT_HLINK_FIRST (1<<12)        /* protocols 30 - now (HLINKED files only) */  #define XMIT_HLINK_FIRST (1<<12)        /* protocols 30 - now (HLINKED files only) */
 #define XMIT_IO_ERROR_ENDLIST (1<<12)   /* protocols 31*- now (w/XMIT_EXTENDED_FLAGS) (also protocol 30 w/'f' compat flag) */  #define XMIT_IO_ERROR_ENDLIST (1<<12)   /* protocols 31*- now (w/XMIT_EXTENDED_FLAGS) (also protocol 30 w/'f' compat flag) */
 #define XMIT_MOD_NSEC (1<<13)           /* protocols 31 - now */  #define XMIT_MOD_NSEC (1<<13)           /* protocols 31 - now */
   #define XMIT_SAME_ATIME (1<<14)         /* any protocol - restricted by command-line option */
   #define XMIT_UNUSED_15 (1<<15)          /* unused flag bit */
   
   /* The following XMIT flags require an rsync that uses a varint for the flag values */
   
   #define XMIT_SAME_FLAGS (1<<16)         /* any protocol - restricted by command-line option */
   #define XMIT_CRTIME_EQ_MTIME (1<<17)    /* any protocol - restricted by command-line option */
   
 /* These flags are used in the live flist data. */  /* These flags are used in the live flist data. */
   
 #define FLAG_TOP_DIR (1<<0)     /* sender/receiver/generator */  #define FLAG_TOP_DIR (1<<0)     /* sender/receiver/generator */
Line 87 Line 96
 /* These flags are passed to functions but not stored. */  /* These flags are passed to functions but not stored. */
   
 #define FLAG_DIVERT_DIRS (1<<16)   /* sender, but must be unique */  #define FLAG_DIVERT_DIRS (1<<16)   /* sender, but must be unique */
   #define FLAG_PERHAPS_DIR (1<<17)   /* generator */
   
 /* These flags are for get_dirlist(). */  /* These flags are for get_dirlist(). */
 #define GDL_IGNORE_FILTER_RULES (1<<0)  #define GDL_IGNORE_FILTER_RULES (1<<0)
   #define GDL_PERHAPS_DIR (1<<1)
   
 /* Some helper macros for matching bits. */  /* Some helper macros for matching bits. */
 #define BITS_SET(val,bits) (((val) & (bits)) == (bits))  #define BITS_SET(val,bits) (((val) & (bits)) == (bits))
Line 148 Line 159
 #define IOERR_DEL_LIMIT (1<<2)  #define IOERR_DEL_LIMIT (1<<2)
   
 #define MAX_ARGS 1000  #define MAX_ARGS 1000
   #define MAX_FILTER_ARGS 100
 #define MAX_BASIS_DIRS 20  #define MAX_BASIS_DIRS 20
 #define MAX_SERVER_ARGS (MAX_BASIS_DIRS*2 + 100)  #define MAX_SERVER_ARGS (MAX_BASIS_DIRS*2 + 100)
   
   #define COMPARE_DEST 1
   #define COPY_DEST 2
   #define LINK_DEST 3
   #define CLONE_DEST 4
   
   #if !defined FICLONE && defined __linux__
   #define FICLONE _IOW(0x94, 9, int)
   #endif
   
 #define MPLEX_BASE 7  #define MPLEX_BASE 7
   
 #define NO_FILTERS      0  #define NO_FILTERS      0
 #define SERVER_FILTERS  1  #define SERVER_FILTERS  1
 #define ALL_FILTERS     2  #define ALL_FILTERS     2
   /* Don't let the file be excluded, but check for a filter that might affect
    * its attributes via FILTRULES_ATTRS. */
   #define ALL_FILTERS_NO_EXCLUDE  3
   
 #define XFLG_FATAL_ERRORS       (1<<0)  #define XFLG_FATAL_ERRORS       (1<<0)
 #define XFLG_OLD_PREFIXES       (1<<1)  #define XFLG_OLD_PREFIXES       (1<<1)
Line 165 Line 189
   
 #define ATTRS_REPORT            (1<<0)  #define ATTRS_REPORT            (1<<0)
 #define ATTRS_SKIP_MTIME        (1<<1)  #define ATTRS_SKIP_MTIME        (1<<1)
   #define ATTRS_ACCURATE_TIME     (1<<2)
   #define ATTRS_SKIP_ATIME        (1<<3)
   #define ATTRS_DELAY_IMMUTABLE   (1<<4)
   #define ATTRS_SKIP_CRTIME       (1<<5)
   
   #define MSG_FLUSH       2
 #define FULL_FLUSH      1  #define FULL_FLUSH      1
 #define NORMAL_FLUSH    0  #define NORMAL_FLUSH    0
   
Line 191 Line 220
 #define ITEM_REPORT_GROUP (1<<6)  #define ITEM_REPORT_GROUP (1<<6)
 #define ITEM_REPORT_ACL (1<<7)  #define ITEM_REPORT_ACL (1<<7)
 #define ITEM_REPORT_XATTR (1<<8)  #define ITEM_REPORT_XATTR (1<<8)
   #define ITEM_REPORT_FFLAGS (1<<9)
   #define ITEM_REPORT_CRTIME (1<<10)
 #define ITEM_BASIS_TYPE_FOLLOWS (1<<11)  #define ITEM_BASIS_TYPE_FOLLOWS (1<<11)
 #define ITEM_XNAME_FOLLOWS (1<<12)  #define ITEM_XNAME_FOLLOWS (1<<12)
 #define ITEM_IS_NEW (1<<13)  #define ITEM_IS_NEW (1<<13)
Line 204 Line 235
 #define SIGNIFICANT_ITEM_FLAGS (~(\  #define SIGNIFICANT_ITEM_FLAGS (~(\
         ITEM_BASIS_TYPE_FOLLOWS | ITEM_XNAME_FOLLOWS | ITEM_LOCAL_CHANGE))          ITEM_BASIS_TYPE_FOLLOWS | ITEM_XNAME_FOLLOWS | ITEM_LOCAL_CHANGE))
   
   /* this is the minimum we'll use, irrespective of config setting */
   /* definitely don't set to less than about 30 seconds */
   #define SLP_MIN_TIMEOUT 120
   
 #define CFN_KEEP_DOT_DIRS (1<<0)  #define CFN_KEEP_DOT_DIRS (1<<0)
 #define CFN_KEEP_TRAILING_SLASH (1<<1)  #define CFN_KEEP_TRAILING_SLASH (1<<1)
 #define CFN_DROP_TRAILING_DOT_DIR (1<<2)  #define CFN_DROP_TRAILING_DOT_DIR (1<<2)
Line 241  enum msgcode { Line 276  enum msgcode {
         MSG_IO_ERROR=22,/* the sending side had an I/O error */          MSG_IO_ERROR=22,/* the sending side had an I/O error */
         MSG_IO_TIMEOUT=33,/* tell client about a daemon's timeout value */          MSG_IO_TIMEOUT=33,/* tell client about a daemon's timeout value */
         MSG_NOOP=42,    /* a do-nothing message (legacy protocol-30 only) */          MSG_NOOP=42,    /* a do-nothing message (legacy protocol-30 only) */
           MSG_CHECKSUM=55,/* sent via rcvr -> gen pipe and local-host-only gen -> sender */
         MSG_ERROR_EXIT=86, /* synchronize an error exit (siblings and protocol >= 31) */          MSG_ERROR_EXIT=86, /* synchronize an error exit (siblings and protocol >= 31) */
         MSG_SUCCESS=100,/* successfully updated indicated flist index */          MSG_SUCCESS=100,/* successfully updated indicated flist index */
         MSG_DELETED=101,/* successfully deleted a file on receiving side */          MSG_DELETED=101,/* successfully deleted a file on receiving side */
         MSG_NO_SEND=102,/* sender failed to open a file we wanted */          MSG_NO_SEND=102,/* sender failed to open a file we wanted */
 };  };
   
   #define MSG_CHECKSUM_LONGS 5
   #define MSG_CHECKSUM_LEN (MSG_CHECKSUM_LONGS*8 + 4 + MAX_DIGEST_LEN)
   
 #define NDX_DONE -1  #define NDX_DONE -1
 #define NDX_FLIST_EOF -2  #define NDX_FLIST_EOF -2
 #define NDX_DEL_STATS -3  #define NDX_DEL_STATS -3
 #define NDX_FLIST_OFFSET -101  #define NDX_FLIST_OFFSET -101
   
/* For calling delete_item() and delete_dir_contents(). *//* For calling delete_item(), delete_dir_contents(), and delete_in_dir(). */
 #define DEL_NO_UID_WRITE        (1<<0) /* file/dir has our uid w/o write perm */  #define DEL_NO_UID_WRITE        (1<<0) /* file/dir has our uid w/o write perm */
 #define DEL_RECURSE             (1<<1) /* if dir, delete all contents */  #define DEL_RECURSE             (1<<1) /* if dir, delete all contents */
 #define DEL_DIR_IS_EMPTY        (1<<2) /* internal delete_FUNCTIONS use only */  #define DEL_DIR_IS_EMPTY        (1<<2) /* internal delete_FUNCTIONS use only */
Line 262  enum msgcode { Line 301  enum msgcode {
 #define DEL_FOR_DEVICE          (1<<6) /* making room for a replacement device */  #define DEL_FOR_DEVICE          (1<<6) /* making room for a replacement device */
 #define DEL_FOR_SPECIAL         (1<<7) /* making room for a replacement special */  #define DEL_FOR_SPECIAL         (1<<7) /* making room for a replacement special */
 #define DEL_FOR_BACKUP          (1<<8) /* the delete is for a backup operation */  #define DEL_FOR_BACKUP          (1<<8) /* the delete is for a backup operation */
   #define DEL_NO_DELETIONS        (1<<9) /* just check for renames w/o deleting */
   
 #define DEL_MAKE_ROOM (DEL_FOR_FILE|DEL_FOR_DIR|DEL_FOR_SYMLINK|DEL_FOR_DEVICE|DEL_FOR_SPECIAL)  #define DEL_MAKE_ROOM (DEL_FOR_FILE|DEL_FOR_DIR|DEL_FOR_SYMLINK|DEL_FOR_DEVICE|DEL_FOR_SPECIAL)
   
Line 280  enum delret { Line 320  enum delret {
 #include "errcode.h"  #include "errcode.h"
   
 #include "config.h"  #include "config.h"
   #include "version.h"
   
 /* The default RSYNC_RSH is always set in config.h. */  /* The default RSYNC_RSH is always set in config.h. */
   
Line 372  enum delret { Line 413  enum delret {
 #include <utime.h>  #include <utime.h>
 #endif  #endif
   
#if defined HAVE_UTIMENSAT || defined HAVE_LUTIMES#if defined HAVE_UTIMENSAT || defined HAVE_LUTIMES || defined HAVE_SETATTRLIST
 #define CAN_SET_SYMLINK_TIMES 1  #define CAN_SET_SYMLINK_TIMES 1
 #endif  #endif
   
Line 384  enum delret { Line 425  enum delret {
 #define CAN_CHMOD_SYMLINK 1  #define CAN_CHMOD_SYMLINK 1
 #endif  #endif
   
#ifdef HAVE_UTIMENSAT#if defined HAVE_UTIMENSAT || defined HAVE_SETATTRLIST
 #define CAN_SET_NSEC 1
 #endif
 
 #ifdef CAN_SET_NSEC
 #ifdef HAVE_STRUCT_STAT_ST_MTIM_TV_NSEC  #ifdef HAVE_STRUCT_STAT_ST_MTIM_TV_NSEC
 #define ST_MTIME_NSEC st_mtim.tv_nsec  #define ST_MTIME_NSEC st_mtim.tv_nsec
   #define ST_ATIME_NSEC st_atim.tv_nsec
 #elif defined(HAVE_STRUCT_STAT_ST_MTIMENSEC)  #elif defined(HAVE_STRUCT_STAT_ST_MTIMENSEC)
 #define ST_MTIME_NSEC st_mtimensec  #define ST_MTIME_NSEC st_mtimensec
   #define ST_ATIME_NSEC st_atimensec
   #elif defined(HAVE_STRUCT_STAT_ST_MTIMESPEC_TV_NSEC)
   #define ST_MTIME_NSEC st_mtimespec.tv_nsec
   #define ST_ATIME_NSEC st_atimespec.tv_nsec
 #endif  #endif
 #endif  #endif
   
Line 414  enum delret { Line 464  enum delret {
 #include <netdb.h>  #include <netdb.h>
 #endif  #endif
 #include <syslog.h>  #include <syslog.h>
   #ifdef HAVE_SYS_FILE_H
 #include <sys/file.h>  #include <sys/file.h>
   #endif
   
 #ifdef HAVE_DIRENT_H  #ifdef HAVE_DIRENT_H
 # include <dirent.h>  # include <dirent.h>
Line 443  enum delret { Line 495  enum delret {
 #ifdef MAKEDEV_TAKES_3_ARGS  #ifdef MAKEDEV_TAKES_3_ARGS
 #define MAKEDEV(devmajor,devminor) makedev(0,devmajor,devminor)  #define MAKEDEV(devmajor,devminor) makedev(0,devmajor,devminor)
 #else  #else
   #ifndef __TANDEM
 #define MAKEDEV(devmajor,devminor) makedev(devmajor,devminor)  #define MAKEDEV(devmajor,devminor) makedev(devmajor,devminor)
   #else
   # include <sys/stat.h>
   # define major DEV_TO_MAJOR
   # define minor DEV_TO_MINOR
   # define MAKEDEV MAJORMINOR_TO_DEV
 #endif  #endif
   #endif
   
   #ifdef __TANDEM
   # include <floss.h(floss_read,floss_write,floss_fork,floss_execvp)>
   # include <floss.h(floss_getpwuid,floss_select,floss_seteuid)>
   # define S_IEXEC S_IXUSR
   # define ROOT_UID 65535
   #else
   # define ROOT_UID 0
   #endif
   
 #ifdef HAVE_COMPAT_H  #ifdef HAVE_COMPAT_H
 #include <compat.h>  #include <compat.h>
 #endif  #endif
Line 472  enum delret { Line 540  enum delret {
 #define iconv_t int  #define iconv_t int
 #endif  #endif
   
   #ifdef GSSAPI_OPTION
   #ifdef HAVE_GSSAPI_GSSAPI_GENERIC_H
   #include <gssapi/gssapi_generic.h>
   #endif
   #ifdef HAVE_GSSAPI_GSSAPI_H
   #include <gssapi/gssapi.h>
   #endif
   #endif
   
 #include <assert.h>  #include <assert.h>
   
 #include "lib/pool_alloc.h"  #include "lib/pool_alloc.h"
Line 522  typedef unsigned int size_t; Line 599  typedef unsigned int size_t;
 #endif  #endif
 #endif  #endif
   
   #ifndef UF_COMPRESSED
   #define UF_COMPRESSED 0x00000020
   #endif
   #ifndef VOL_CAP_FMT_DECMPFS_COMPRESSION
   #define VOL_CAP_FMT_DECMPFS_COMPRESSION 0x00010000
   #endif
   
   #if defined SUPPORT_XATTRS && defined SUPPORT_FILEFLAGS
   #define SUPPORT_HFS_COMPRESSION 1
   #endif
   
   #ifndef __APPLE__ /* Do we need a configure check for this? */
   #define SUPPORT_ATIMES 1
   #endif
   
   #ifdef HAVE_GETATTRLIST
   #define SUPPORT_CRTIMES 1
   #endif
   
   #define NO_FFLAGS ((uint32)-1)
   
   #ifdef HAVE_CHFLAGS
   #define SUPPORT_FILEFLAGS 1
   #define SUPPORT_FORCE_CHANGE 1
   #endif
   
   #if defined SUPPORT_FILEFLAGS || defined SUPPORT_FORCE_CHANGE
   #ifndef UF_NOUNLINK
   #define UF_NOUNLINK 0
   #endif
   #ifndef SF_NOUNLINK
   #define SF_NOUNLINK 0
   #endif
   #define USR_IMMUTABLE (UF_IMMUTABLE|UF_NOUNLINK|UF_APPEND)
   #define SYS_IMMUTABLE (SF_IMMUTABLE|SF_NOUNLINK|SF_APPEND)
   #define ALL_IMMUTABLE (USR_IMMUTABLE|SYS_IMMUTABLE)
   #define ST_FLAGS(st) ((st).st_flags)
   #else
   #define USR_IMMUTABLE 0
   #define SYS_IMMUTABLE 0
   #define ALL_IMMUTABLE 0
   #define ST_FLAGS(st) NO_FFLAGS
   #endif
   
 /* Find a variable that is either exactly 32-bits or longer.  /* Find a variable that is either exactly 32-bits or longer.
  * If some code depends on 32-bit truncation, it will need to   * If some code depends on 32-bit truncation, it will need to
  * take special action in a "#if SIZEOF_INT32 > 4" section. */   * take special action in a "#if SIZEOF_INT32 > 4" section. */
Line 609  typedef unsigned int size_t; Line 730  typedef unsigned int size_t;
 # define SIZEOF_INT64 SIZEOF_OFF_T  # define SIZEOF_INT64 SIZEOF_OFF_T
 #endif  #endif
   
   #define HT_KEY32 0
   #define HT_KEY64 1
   
 struct hashtable {  struct hashtable {
         void *nodes;          void *nodes;
         int32 size, entries;          int32 size, entries;
Line 662  struct ht_int64_node { Line 786  struct ht_int64_node {
 #define NAME_MAX 255  #define NAME_MAX 255
 #endif  #endif
   
   #ifndef SIZE_MAX
   #define SIZE_MAX ((size_t)-1)
   #endif
   
 #ifndef INADDR_NONE  #ifndef INADDR_NONE
 #define INADDR_NONE 0xffffffff  #define INADDR_NONE 0xffffffff
 #endif  #endif
Line 691  struct ht_int64_node { Line 819  struct ht_int64_node {
 #endif  #endif
 #endif  #endif
   
   #if SIZEOF_CHARP == 4
   # define PTRS_ARE_32 1
   # define PTR_EXTRA_CNT 1
   #elif SIZEOF_CHARP == 8
   # define PTRS_ARE_64 1
   # define PTR_EXTRA_CNT EXTRA64_CNT
   #else
   # error Character pointers are not 4 or 8 bytes.
   #endif
   
   #if defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L
   #define USE_FLEXIBLE_ARRAY 1
   #endif
   
 union file_extras {  union file_extras {
         int32 num;          int32 num;
         uint32 unum;          uint32 unum;
   #ifdef PTRS_ARE_32
           const char* ptr;
   #endif
 };  };
   
   union file_extras64 {
           int64 num;
   #ifdef PTRS_ARE_64
           const char* ptr;
   #endif
   };
   
 struct file_struct {  struct file_struct {
         const char *dirname;    /* The dir info inside the transfer */          const char *dirname;    /* The dir info inside the transfer */
         time_t modtime;         /* When the item was last modified */          time_t modtime;         /* When the item was last modified */
         uint32 len32;           /* Lowest 32 bits of the file's length */          uint32 len32;           /* Lowest 32 bits of the file's length */
         uint16 mode;            /* The item's type and permissions */          uint16 mode;            /* The item's type and permissions */
         uint16 flags;           /* The FLAG_* bits for this item */          uint16 flags;           /* The FLAG_* bits for this item */
        const char basename[1];      /* The basename (AKA filename) follows */#ifdef USE_FLEXIBLE_ARRAY
         const char basename[];      /* The basename (AKA filename) follows */
 #else
         const char basename[1]; /* A kluge that should work like a flexible array */
 #endif
 };  };
   
 extern int file_extra_cnt;  extern int file_extra_cnt;
 extern int inc_recurse;  extern int inc_recurse;
   extern int atimes_ndx;
   extern int crtimes_ndx;
   extern int pathname_ndx;
   extern int depth_ndx;
 extern int uid_ndx;  extern int uid_ndx;
 extern int gid_ndx;  extern int gid_ndx;
   extern int fileflags_ndx;
 extern int acls_ndx;  extern int acls_ndx;
 extern int xattrs_ndx;  extern int xattrs_ndx;
   
   #ifdef USE_FLEXIBLE_ARRAY
   #define FILE_STRUCT_LEN (sizeof (struct file_struct))
   #else
 #define FILE_STRUCT_LEN (offsetof(struct file_struct, basename))  #define FILE_STRUCT_LEN (offsetof(struct file_struct, basename))
   #endif
 #define EXTRA_LEN (sizeof (union file_extras))  #define EXTRA_LEN (sizeof (union file_extras))
 #define PTR_EXTRA_CNT ((sizeof (char *) + EXTRA_LEN - 1) / EXTRA_LEN)  
 #define DEV_EXTRA_CNT 2  #define DEV_EXTRA_CNT 2
 #define DIRNODE_EXTRA_CNT 3  #define DIRNODE_EXTRA_CNT 3
   #define EXTRA64_CNT ((sizeof (union file_extras64) + EXTRA_LEN - 1) / EXTRA_LEN)
 #define SUM_EXTRA_CNT ((MAX_DIGEST_LEN + EXTRA_LEN - 1) / EXTRA_LEN)  #define SUM_EXTRA_CNT ((MAX_DIGEST_LEN + EXTRA_LEN - 1) / EXTRA_LEN)
   
 #define REQ_EXTRA(f,ndx) ((union file_extras*)(f) - (ndx))  #define REQ_EXTRA(f,ndx) ((union file_extras*)(f) - (ndx))
 #define OPT_EXTRA(f,bump) ((union file_extras*)(f) - file_extra_cnt - 1 - (bump))  #define OPT_EXTRA(f,bump) ((union file_extras*)(f) - file_extra_cnt - 1 - (bump))
   
   /* These are guaranteed to be allocated first in the array so that they
    * are aligned for direct int64-pointer access. */
   #define REQ_EXTRA64(f,ndx) ((union file_extras64*)REQ_EXTRA(f,ndx))
   
 #define NSEC_BUMP(f) ((f)->flags & FLAG_MOD_NSEC ? 1 : 0)  #define NSEC_BUMP(f) ((f)->flags & FLAG_MOD_NSEC ? 1 : 0)
 #define LEN64_BUMP(f) ((f)->flags & FLAG_LENGTH64 ? 1 : 0)  #define LEN64_BUMP(f) ((f)->flags & FLAG_LENGTH64 ? 1 : 0)
 #define START_BUMP(f) (NSEC_BUMP(f) + LEN64_BUMP(f))  #define START_BUMP(f) (NSEC_BUMP(f) + LEN64_BUMP(f))
Line 732  extern int xattrs_ndx; Line 901  extern int xattrs_ndx;
 #if SIZEOF_INT64 < 8  #if SIZEOF_INT64 < 8
 #define F_LENGTH(f) ((int64)(f)->len32)  #define F_LENGTH(f) ((int64)(f)->len32)
 #else  #else
#define F_LENGTH(f) ((int64)(f)->len32 + ((f)->flags & FLAG_LENGTH64 \#define F_HIGH_LEN(f) (OPT_EXTRA(f, NSEC_BUMP(f))->unum)
                   ? (int64)OPT_EXTRA(f, NSEC_BUMP(f))->unum << 32 : 0))#define F_LENGTH(f) ((int64)(f)->len32 + ((f)->flags & FLAG_LENGTH64 ? (int64)F_HIGH_LEN(f) << 32 : 0))
 #endif  #endif
   
#define F_MOD_NSEC(f) ((f)->flags & FLAG_MOD_NSEC ? OPT_EXTRA(f, 0)->unum : 0)#define F_MOD_NSEC(f) OPT_EXTRA(f, 0)->unum
 #define F_MOD_NSEC_or_0(f) ((f)->flags & FLAG_MOD_NSEC ? F_MOD_NSEC(f) : 0)
   
 /* If there is a symlink string, it is always right after the basename */  /* If there is a symlink string, it is always right after the basename */
 #define F_SYMLINK(f) ((f)->basename + strlen((f)->basename) + 1)  #define F_SYMLINK(f) ((f)->basename + strlen((f)->basename) + 1)
   
 /* The sending side always has this available: */  /* The sending side always has this available: */
#define F_PATHNAME(f) (*(const char**)REQ_EXTRA(f, PTR_EXTRA_CNT))#ifdef PTRS_ARE_32
 #define F_PATHNAME(f) REQ_EXTRA(f, pathname_ndx)->ptr
 #else
 #define F_PATHNAME(f) REQ_EXTRA64(f, pathname_ndx)->ptr
 #endif
   
 /* The receiving side always has this available: */  /* The receiving side always has this available: */
#define F_DEPTH(f) REQ_EXTRA(f, 1)->num#define F_DEPTH(f) REQ_EXTRA(f, depth_ndx)->num
   
 /* When the associated option is on, all entries will have these present: */  /* When the associated option is on, all entries will have these present: */
 #define F_OWNER(f) REQ_EXTRA(f, uid_ndx)->unum  #define F_OWNER(f) REQ_EXTRA(f, uid_ndx)->unum
 #define F_GROUP(f) REQ_EXTRA(f, gid_ndx)->unum  #define F_GROUP(f) REQ_EXTRA(f, gid_ndx)->unum
   #if defined SUPPORT_FILEFLAGS || defined SUPPORT_FORCE_CHANGE
   #define F_FFLAGS(f) REQ_EXTRA(f, fileflags_ndx)->unum
   #else
   #define F_FFLAGS(f) NO_FFLAGS
   #endif
 #define F_ACL(f) REQ_EXTRA(f, acls_ndx)->num  #define F_ACL(f) REQ_EXTRA(f, acls_ndx)->num
 #define F_XATTR(f) REQ_EXTRA(f, xattrs_ndx)->num  #define F_XATTR(f) REQ_EXTRA(f, xattrs_ndx)->num
 #define F_NDX(f) REQ_EXTRA(f, unsort_ndx)->num  #define F_NDX(f) REQ_EXTRA(f, unsort_ndx)->num
   #define F_ATIME(f) REQ_EXTRA64(f, atimes_ndx)->num
   #define F_CRTIME(f) REQ_EXTRA64(f, crtimes_ndx)->num
   
 /* These items are per-entry optional: */  /* These items are per-entry optional: */
 #define F_HL_GNUM(f) OPT_EXTRA(f, START_BUMP(f))->num /* non-dirs */  #define F_HL_GNUM(f) OPT_EXTRA(f, START_BUMP(f))->num /* non-dirs */
Line 772  extern int xattrs_ndx; Line 953  extern int xattrs_ndx;
 #define F_SUM(f) ((char*)OPT_EXTRA(f, START_BUMP(f) + HLINK_BUMP(f) \  #define F_SUM(f) ((char*)OPT_EXTRA(f, START_BUMP(f) + HLINK_BUMP(f) \
                                     + SUM_EXTRA_CNT - 1))                                      + SUM_EXTRA_CNT - 1))
   
   /* These are only valid on an entry derived from a checksum file. */
   #define F_CTIME(f) OPT_EXTRA(f, LEN64_BUMP(f) + SUM_EXTRA_CNT)->unum
   #define F_INODE(f) OPT_EXTRA(f, LEN64_BUMP(f) + SUM_EXTRA_CNT + 1)->unum
   
 /* Some utility defines: */  /* Some utility defines: */
 #define F_IS_ACTIVE(f) (f)->basename[0]  #define F_IS_ACTIVE(f) (f)->basename[0]
 #define F_IS_HLINKED(f) ((f)->flags & FLAG_HLINKED)  #define F_IS_HLINKED(f) ((f)->flags & FLAG_HLINKED)
Line 856  struct map_struct { Line 1041  struct map_struct {
         int status;             /* first errno from read errors         */          int status;             /* first errno from read errors         */
 };  };
   
   struct chmod_mode_struct;
   
   #define NAME_IS_FILE            (0)    /* filter name as a file */
   #define NAME_IS_DIR             (1<<0) /* filter name as a dir */
   #define NAME_IS_XATTR           (1<<2) /* filter name as an xattr */
   
 #define FILTRULE_WILD           (1<<0) /* pattern has '*', '[', and/or '?' */  #define FILTRULE_WILD           (1<<0) /* pattern has '*', '[', and/or '?' */
 #define FILTRULE_WILD2          (1<<1) /* pattern has '**' */  #define FILTRULE_WILD2          (1<<1) /* pattern has '**' */
 #define FILTRULE_WILD2_PREFIX   (1<<2) /* pattern starts with "**" */  #define FILTRULE_WILD2_PREFIX   (1<<2) /* pattern starts with "**" */
Line 876  struct map_struct { Line 1067  struct map_struct {
 #define FILTRULE_RECEIVER_SIDE  (1<<17)/* rule applies to the receiving side */  #define FILTRULE_RECEIVER_SIDE  (1<<17)/* rule applies to the receiving side */
 #define FILTRULE_CLEAR_LIST     (1<<18)/* this item is the "!" token */  #define FILTRULE_CLEAR_LIST     (1<<18)/* this item is the "!" token */
 #define FILTRULE_PERISHABLE     (1<<19)/* perishable if parent dir goes away */  #define FILTRULE_PERISHABLE     (1<<19)/* perishable if parent dir goes away */
   #define FILTRULE_XATTR          (1<<20)/* rule only applies to xattr names */
   #define FILTRULE_CHMOD          (1<<21)/* chmod-tweak matching files */
   #define FILTRULE_FORCE_OWNER    (1<<22)/* force owner of matching files */
   #define FILTRULE_FORCE_GROUP    (1<<23)/* force group of matching files */
   
 #define FILTRULES_SIDES (FILTRULE_SENDER_SIDE | FILTRULE_RECEIVER_SIDE)  #define FILTRULES_SIDES (FILTRULE_SENDER_SIDE | FILTRULE_RECEIVER_SIDE)
   #define FILTRULES_ATTRS (FILTRULE_CHMOD | FILTRULE_FORCE_OWNER | FILTRULE_FORCE_GROUP)
   
   struct filter_chmod_struct {
           unsigned int ref_cnt;
           char *modestr;
           struct chmod_mode_struct *modes;
   };
   
 typedef struct filter_struct {  typedef struct filter_struct {
         struct filter_struct *next;          struct filter_struct *next;
         char *pattern;          char *pattern;
Line 887  typedef struct filter_struct { Line 1089  typedef struct filter_struct {
                 int slash_cnt;                  int slash_cnt;
                 struct filter_list_struct *mergelist;                  struct filter_list_struct *mergelist;
         } u;          } u;
           /* TODO: Use an "extras" mechanism to avoid
            * allocating this memory when we don't need it. */
           struct filter_chmod_struct *chmod;
           uid_t force_uid;
           gid_t force_gid;
 } filter_rule;  } filter_rule;
   
 typedef struct filter_list_struct {  typedef struct filter_list_struct {
Line 966  typedef struct { Line 1173  typedef struct {
   
 typedef struct {  typedef struct {
         char name_type;          char name_type;
        char fname[1]; /* has variable size */#ifdef USE_FLEXIBLE_ARRAY
         char fname[]; /* has variable size */
 #else
         char fname[1]; /* A kluge that should work like a flexible array */
 #endif
 } relnamecache;  } relnamecache;
   
   #ifdef USE_FLEXIBLE_ARRAY
   #define RELNAMECACHE_LEN (sizeof (relnamecache))
   #else
   #define RELNAMECACHE_LEN (offsetof(relnamecache, fname))
   #endif
   
   #define CSF_ENABLE (1<<1)
   #define CSF_LAX (1<<2)
   #define CSF_UPDATE (1<<3)
   #define CSF_AFFECT_DRYRUN (1<<4)
   
   #define CSF_IGNORE_FILES 0
   #define CSF_LAX_MODE (CSF_ENABLE|CSF_LAX)
   #define CSF_STRICT_MODE (CSF_ENABLE)
   
 #include "byteorder.h"  #include "byteorder.h"
 #include "lib/mdigest.h"  #include "lib/mdigest.h"
 #include "lib/wildmatch.h"  #include "lib/wildmatch.h"
Line 990  typedef struct { Line 1216  typedef struct {
   
 typedef struct {  typedef struct {
     STRUCT_STAT st;      STRUCT_STAT st;
       time_t crtime;
 #ifdef SUPPORT_ACLS  #ifdef SUPPORT_ACLS
     struct rsync_acl *acc_acl; /* access ACL */      struct rsync_acl *acc_acl; /* access ACL */
     struct rsync_acl *def_acl; /* default ACL */      struct rsync_acl *def_acl; /* default ACL */
     struct nfs4_acl *nfs4_acl; /* NFSv4 ACL */  
     int brand;  
 #endif  #endif
 #ifdef SUPPORT_XATTRS  #ifdef SUPPORT_XATTRS
     item_list *xattr;      item_list *xattr;
 #endif  #endif
 } stat_x;  } stat_x;
   
#ifdef SUPPORT_ACLS#define ACL_READY(sx) ((sx).acc_acl != NULL)
#include "lib/sysacls.h"#define XATTR_READY(sx) ((sx).xattr != NULL)
#endif 
   
#define ACL_READY_POSIX(sx) ((sx).acc_acl != NULL)#define CLVL_NOT_SPECIFIED INT_MIN
#define ACL_READY_NFS4(sx) ((sx).nfs4_acl != NULL) 
#define ACL_READY(sx) (((sx).brand == SMB_ACL_BRAND_NFS4) ? (ACL_READY_NFS4(sx)) : (ACL_READY_POSIX(sx))) 
   
#define XATTR_READY(sx) ((sx).xattr != NULL)#define CPRES_AUTO (-1)
 #define CPRES_NONE 0
 #define CPRES_ZLIB 1
 #define CPRES_ZLIBX 2
 #define CPRES_LZ4 3
 #define CPRES_ZSTD 4
   
   #define NSTR_CHECKSUM 0
   #define NSTR_COMPRESS 1
   
   struct name_num_item {
           int num;
           const char *name, *main_name;
   };
   
   struct name_num_obj {
           const char *type;
           const char *negotiated_name;
           uchar *saw;
           int saw_len;
           int negotiated_num;
           struct name_num_item list[8]; /* A big-enough len (we'll get a compile error if it is ever too small) */
   };
   
   #ifndef __cplusplus
 #include "proto.h"  #include "proto.h"
   #endif
   
 #ifndef SUPPORT_XATTRS  #ifndef SUPPORT_XATTRS
 #define x_stat(fn,fst,xst) do_stat(fn,fst)  #define x_stat(fn,fst,xst) do_stat(fn,fst)
Line 1038  int vsnprintf(char *str, size_t count, const char *fmt Line 1284  int vsnprintf(char *str, size_t count, const char *fmt
 int snprintf(char *str, size_t count, const char *fmt,...);  int snprintf(char *str, size_t count, const char *fmt,...);
 #endif  #endif
   
   
 #ifndef HAVE_STRERROR  #ifndef HAVE_STRERROR
 extern char *sys_errlist[];  extern char *sys_errlist[];
 #define strerror(i) sys_errlist[i]  #define strerror(i) sys_errlist[i]
Line 1180  extern int errno; Line 1425  extern int errno;
 /* handler for null strings in printf format */  /* handler for null strings in printf format */
 #define NS(s) ((s)?(s):"<NULL>")  #define NS(s) ((s)?(s):"<NULL>")
   
   extern char *do_calloc;
   
 /* Convenient wrappers for malloc and realloc.  Use them. */  /* Convenient wrappers for malloc and realloc.  Use them. */
#define new(type) ((type*)malloc(sizeof (type)))#define new(type) ((type*)my_alloc(NULL, sizeof (type), 1, __FILE__, __LINE__))
#define new0(type) ((type*)calloc(1, sizeof (type)))#define new0(type) ((type*)my_alloc(do_calloc, sizeof (type), 1, __FILE__, __LINE__))
#define new_array(type, num) ((type*)_new_array((num), sizeof (type), 0))#define realloc_buf(ptr, num) my_alloc((ptr), (num), 1, __FILE__, __LINE__)
#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))) 
   
   #define new_array(type, num) ((type*)my_alloc(NULL, (num), sizeof (type), __FILE__, __LINE__))
   #define new_array0(type, num) ((type*)my_alloc(do_calloc, (num), sizeof (type), __FILE__, __LINE__))
   #define realloc_array(ptr, type, num) ((type*)my_alloc((ptr), (num), sizeof (type), __FILE__, __LINE__))
   
   #undef strdup
   #define strdup(s) my_strdup(s, __FILE__, __LINE__)
   
   #define out_of_memory(msg) _out_of_memory(msg, __FILE__, __LINE__)
   #define overflow_exit(msg) _overflow_exit(msg, __FILE__, __LINE__)
   
 /* use magic gcc attributes to catch format errors */  /* use magic gcc attributes to catch format errors */
  void rprintf(enum logcode , const char *, ...)   void rprintf(enum logcode , const char *, ...)
      __attribute__((format (printf, 2, 3)))       __attribute__((format (printf, 2, 3)))
Line 1265  extern short info_levels[], debug_levels[]; Line 1520  extern short info_levels[], debug_levels[];
 #define DEBUG_CHDIR (DEBUG_BIND+1)  #define DEBUG_CHDIR (DEBUG_BIND+1)
 #define DEBUG_CONNECT (DEBUG_CHDIR+1)  #define DEBUG_CONNECT (DEBUG_CHDIR+1)
 #define DEBUG_CMD (DEBUG_CONNECT+1)  #define DEBUG_CMD (DEBUG_CONNECT+1)
#define DEBUG_DEL (DEBUG_CMD+1)#define DEBUG_DB (DEBUG_CMD+1)
 #define DEBUG_DEL (DEBUG_DB+1)
 #define DEBUG_DELTASUM (DEBUG_DEL+1)  #define DEBUG_DELTASUM (DEBUG_DEL+1)
 #define DEBUG_DUP (DEBUG_DELTASUM+1)  #define DEBUG_DUP (DEBUG_DELTASUM+1)
 #define DEBUG_EXIT (DEBUG_DUP+1)  #define DEBUG_EXIT (DEBUG_DUP+1)
Line 1274  extern short info_levels[], debug_levels[]; Line 1530  extern short info_levels[], debug_levels[];
 #define DEBUG_FUZZY (DEBUG_FLIST+1)  #define DEBUG_FUZZY (DEBUG_FLIST+1)
 #define DEBUG_GENR (DEBUG_FUZZY+1)  #define DEBUG_GENR (DEBUG_FUZZY+1)
 #define DEBUG_HASH (DEBUG_GENR+1)  #define DEBUG_HASH (DEBUG_GENR+1)
#define DEBUG_HLINK (DEBUG_HASH+1)#define DEBUG_HASHLINK (DEBUG_HASH+1)
 #define DEBUG_HLINK (DEBUG_HASHLINK+1)
 #define DEBUG_ICONV (DEBUG_HLINK+1)  #define DEBUG_ICONV (DEBUG_HLINK+1)
 #define DEBUG_IO (DEBUG_ICONV+1)  #define DEBUG_IO (DEBUG_ICONV+1)
#define DEBUG_OWN (DEBUG_IO+1)#define DEBUG_NSTR (DEBUG_IO+1)
 #define DEBUG_OWN (DEBUG_NSTR+1)
 #define DEBUG_PROTO (DEBUG_OWN+1)  #define DEBUG_PROTO (DEBUG_OWN+1)
 #define DEBUG_RECV (DEBUG_PROTO+1)  #define DEBUG_RECV (DEBUG_PROTO+1)
 #define DEBUG_SEND (DEBUG_RECV+1)  #define DEBUG_SEND (DEBUG_RECV+1)
Line 1300  char *getpass(const char *prompt); Line 1558  char *getpass(const char *prompt);
 #ifdef MAINTAINER_MODE  #ifdef MAINTAINER_MODE
 const char *get_panic_action(void);  const char *get_panic_action(void);
 #endif  #endif
   
   #define NOISY_DEATH(msg) do { \
       fprintf(stderr, "%s in %s at line %d\n", msg, __FILE__, __LINE__); \
       exit_cleanup(RERR_UNSUPPORTED); \
   } while (0)

Removed from v.1.1.1.3  
changed lines
  Added in v.1.1.1.4


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>