int ndx = find_matching_xattr(sxp->xattr);
- /* Send 0 (-1 + 1) to indicate that literal xattr data follows. */
-- write_abbrevint(f, ndx + 1);
+- write_varint(f, ndx + 1);
+ if (protocol_version < 30) {
+ if (ndx < 0)
+ write_byte(f, 'X');
+ }
+ } else {
+ /* Send 0 (-1 + 1) to indicate that literal xattr data follows. */
-+ write_abbrevint(f, ndx + 1);
++ write_varint(f, ndx + 1);
+ }
if (ndx < 0) {
rsync_xa *rxa;
int count = sxp->xattr->count;
-- write_abbrevint(f, count);
-+ write_abbrevint30(f, count);
+- write_varint(f, count);
++ write_varint30(f, count);
for (rxa = sxp->xattr->items; count--; rxa++) {
#ifdef HAVE_LINUX_XATTRS
-- write_abbrevint(f, rxa->name_len);
-- write_abbrevint(f, rxa->datum_len);
-+ write_abbrevint30(f, rxa->name_len);
-+ write_abbrevint30(f, rxa->datum_len);
+- write_varint(f, rxa->name_len);
+- write_varint(f, rxa->datum_len);
++ write_varint30(f, rxa->name_len);
++ write_varint30(f, rxa->datum_len);
write_buf(f, rxa->name, rxa->name_len);
#else
/* We strip the rsync prefix from disguised namespaces
* and put everything else in the user namespace. */
if (HAS_PREFIX(rxa->name, RSYNC_PREFIX)
&& rxa->name[RPRE_LEN] != '%') {
-- write_abbrevint(f, rxa->name_len - RPRE_LEN);
-- write_abbrevint(f, rxa->datum_len);
-+ write_abbrevint30(f, rxa->name_len - RPRE_LEN);
-+ write_abbrevint30(f, rxa->datum_len);
+- write_varint(f, rxa->name_len - RPRE_LEN);
+- write_varint(f, rxa->datum_len);
++ write_varint30(f, rxa->name_len - RPRE_LEN);
++ write_varint30(f, rxa->datum_len);
write_buf(f, rxa->name + RPRE_LEN, rxa->name_len - RPRE_LEN);
} else {
-- write_abbrevint(f, rxa->name_len + UPRE_LEN);
-- write_abbrevint(f, rxa->datum_len);
-+ write_abbrevint30(f, rxa->name_len + UPRE_LEN);
-+ write_abbrevint30(f, rxa->datum_len);
+- write_varint(f, rxa->name_len + UPRE_LEN);
+- write_varint(f, rxa->datum_len);
++ write_varint30(f, rxa->name_len + UPRE_LEN);
++ write_varint30(f, rxa->datum_len);
write_buf(f, USER_PREFIX, UPRE_LEN);
write_buf(f, rxa->name, rxa->name_len);
}
{
static item_list temp_xattr = EMPTY_ITEM_LIST;
int count;
-- int ndx = read_abbrevint(f);
+- int ndx = read_varint(f);
+ int ndx;
+
+ if (protocol_version >= 30)
-+ ndx = read_abbrevint(f);
++ ndx = read_varint(f);
+ else {
+ int tag = read_byte(f);
+ if (tag == 'x')
return;
}
-- if ((count = read_abbrevint(f)) != 0) {
-+ if ((count = read_abbrevint30(f)) != 0) {
+- if ((count = read_varint(f)) != 0) {
++ if ((count = read_varint30(f)) != 0) {
(void)EXPAND_ITEM_LIST(&temp_xattr, rsync_xa, count);
temp_xattr.count = 0;
}
while (count--) {
char *ptr, *name;
rsync_xa *rxa;
-- size_t name_len = read_abbrevint(f);
-- size_t datum_len = read_abbrevint(f);
+- size_t name_len = read_varint(f);
+- size_t datum_len = read_varint(f);
- size_t dget_len = datum_len > MAX_FULL_DATUM ? 1 + MAX_DIGEST_LEN : datum_len;
-+ size_t name_len = read_abbrevint30(f);
-+ size_t datum_len = read_abbrevint30(f);
++ size_t name_len = read_varint30(f);
++ size_t datum_len = read_varint30(f);
+ size_t dget_len = datum_len > MAX_FULL_DATUM && protocol_version >= 30
+ ? 1 + MAX_DIGEST_LEN : datum_len;
#ifdef HAVE_LINUX_XATTRS