X-Git-Url: https://mattmccutchen.net/rsync/rsync.git/blobdiff_plain/a08979d564dbb320a4000b709e8229d6fca7a281..83135e8f6a093ac619f7cc6ae35260b0c5d75d9c:/rsync.h diff --git a/rsync.h b/rsync.h index 82c81335..bb530bd2 100644 --- a/rsync.h +++ b/rsync.h @@ -5,8 +5,9 @@ * Copyright (C) 2003-2007 Wayne Davison * * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 3 as - * published by the Free Software Foundation. + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 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 @@ -48,13 +49,14 @@ #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. */ @@ -87,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 @@ -489,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 @@ -985,9 +976,11 @@ extern int errno; #define NS(s) ((s)?(s):"") /* 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 *, ...)