Matt McCutchen's Web Site
/
rsync
/
rsync-patches.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Switched over to using binary data in the xattr values.
[rsync/rsync-patches.git]
/
xattrs.diff
diff --git
a/xattrs.diff
b/xattrs.diff
index
4214ca9
..
a16b665
100644
(file)
--- a/
xattrs.diff
+++ b/
xattrs.diff
@@
-12,7
+12,7
@@
To use this patch, run these commands for a successful build:
--- old/compat.c
+++ new/compat.c
--- old/compat.c
+++ new/compat.c
-@@ -1
15,13 +115
,6 @@ void setup_protocol(int f_out,int f_in)
+@@ -1
47,13 +147
,6 @@ void setup_protocol(int f_out,int f_in)
protocol_version);
exit_cleanup(RERR_PROTOCOL);
}
protocol_version);
exit_cleanup(RERR_PROTOCOL);
}
@@
-44,7
+44,7
@@
To use this patch, run these commands for a successful build:
#define RSYNC_XAL_INITIAL 5
#define RSYNC_XAL_LIST_INITIAL 100
#define RSYNC_XAL_INITIAL 5
#define RSYNC_XAL_LIST_INITIAL 100
-@@ -2
22,7 +224
,7 @@ static int rsync_xal_get(const char *fna
+@@ -2
31,7 +233
,7 @@ static int rsync_xal_get(const char *fna
if (!(ptr = get_xattr_data(fname, name, &datum_len, 0)))
return -1;
if (!(ptr = get_xattr_data(fname, name, &datum_len, 0)))
return -1;
@@
-53,7
+53,7
@@
To use this patch, run these commands for a successful build:
/* For large datums, we store a flag and a checksum. */
name_offset = 1 + MAX_DIGEST_LEN;
sum_init(checksum_seed);
/* For large datums, we store a flag and a checksum. */
name_offset = 1 + MAX_DIGEST_LEN;
sum_init(checksum_seed);
-@@ -2
78,7 +280
,7 @@ static int find_matching_xattr(item_list
+@@ -2
95,7 +297
,7 @@ static int find_matching_xattr(item_list
|| rxas1[j].datum_len != rxas2[j].datum_len
|| strcmp(rxas1[j].name, rxas2[j].name))
break;
|| rxas1[j].datum_len != rxas2[j].datum_len
|| strcmp(rxas1[j].name, rxas2[j].name))
break;
@@
-62,7
+62,7
@@
To use this patch, run these commands for a successful build:
if (memcmp(rxas1[j].datum + 1,
rxas2[j].datum + 1,
MAX_DIGEST_LEN) != 0)
if (memcmp(rxas1[j].datum + 1,
rxas2[j].datum + 1,
MAX_DIGEST_LEN) != 0)
-@@ -3
15,34 +317
,43 @@ int send_xattr(statx *sxp, int f)
+@@ -3
32,34 +334
,43 @@ int send_xattr(statx *sxp, int f)
{
int ndx = find_matching_xattr(sxp->xattr);
{
int ndx = find_matching_xattr(sxp->xattr);
@@
-116,7
+116,7
@@
To use this patch, run these commands for a successful build:
write_buf(f, rxa->datum + 1, MAX_DIGEST_LEN);
else
write_buf(f, rxa->datum, rxa->datum_len);
write_buf(f, rxa->datum + 1, MAX_DIGEST_LEN);
else
write_buf(f, rxa->datum, rxa->datum_len);
-@@ -
392,7 +403
,7 @@ int xattr_diff(struct file_struct *file,
+@@ -
409,7 +420
,7 @@ int xattr_diff(struct file_struct *file,
cmp = rec_cnt ? strcmp(snd_rxa->name, rec_rxa->name) : -1;
if (cmp > 0)
same = 0;
cmp = rec_cnt ? strcmp(snd_rxa->name, rec_rxa->name) : -1;
if (cmp > 0)
same = 0;
@@
-125,7
+125,7
@@
To use this patch, run these commands for a successful build:
same = cmp == 0 && snd_rxa->datum_len == rec_rxa->datum_len
&& memcmp(snd_rxa->datum + 1, rec_rxa->datum + 1,
MAX_DIGEST_LEN) == 0;
same = cmp == 0 && snd_rxa->datum_len == rec_rxa->datum_len
&& memcmp(snd_rxa->datum + 1, rec_rxa->datum + 1,
MAX_DIGEST_LEN) == 0;
-@@ -4
35,6 +446
,9 @@ void send_xattr_request(const char *fnam
+@@ -4
52,6 +463
,9 @@ void send_xattr_request(const char *fnam
int j, cnt, prior_req = -1;
rsync_xa *rxa;
int j, cnt, prior_req = -1;
rsync_xa *rxa;
@@
-135,7
+135,7
@@
To use this patch, run these commands for a successful build:
lst += F_XATTR(file);
cnt = lst->count;
for (rxa = lst->items, j = 0; j < cnt; rxa++, j++) {
lst += F_XATTR(file);
cnt = lst->count;
for (rxa = lst->items, j = 0; j < cnt; rxa++, j++) {
-@@ -5
06,6 +520
,9 @@ void recv_xattr_request(struct file_stru
+@@ -5
23,6 +537
,9 @@ void recv_xattr_request(struct file_stru
rsync_xa *rxa;
int rel_pos, cnt;
rsync_xa *rxa;
int rel_pos, cnt;
@@
-145,7
+145,7
@@
To use this patch, run these commands for a successful build:
if (F_XATTR(file) < 0) {
rprintf(FERROR, "recv_xattr_request: internal data error!\n");
exit_cleanup(RERR_STREAMIO);
if (F_XATTR(file) < 0) {
rprintf(FERROR, "recv_xattr_request: internal data error!\n");
exit_cleanup(RERR_STREAMIO);
-@@ -5
52,7 +569
,22 @@ void receive_xattr(struct file_struct *f
+@@ -5
69,7 +586
,22 @@ void receive_xattr(struct file_struct *f
{
static item_list temp_xattr = EMPTY_ITEM_LIST;
int count;
{
static item_list temp_xattr = EMPTY_ITEM_LIST;
int count;
@@
-169,7
+169,7
@@
To use this patch, run these commands for a successful build:
if (ndx < 0 || (size_t)ndx > rsync_xal_l.count) {
rprintf(FERROR, "receive_xattr: xa index %d out of"
if (ndx < 0 || (size_t)ndx > rsync_xal_l.count) {
rprintf(FERROR, "receive_xattr: xa index %d out of"
-@@ -5
65,7 +597
,7 @@ void receive_xattr(struct file_struct *f
+@@ -5
82,7 +614
,7 @@ void receive_xattr(struct file_struct *f
return;
}
return;
}
@@
-178,7
+178,7
@@
To use this patch, run these commands for a successful build:
(void)EXPAND_ITEM_LIST(&temp_xattr, rsync_xa, count);
temp_xattr.count = 0;
}
(void)EXPAND_ITEM_LIST(&temp_xattr, rsync_xa, count);
temp_xattr.count = 0;
}
-@@ -5
73,9 +605
,10 @@ void receive_xattr(struct file_struct *f
+@@ -5
90,9 +622
,10 @@ void receive_xattr(struct file_struct *f
while (count--) {
char *ptr, *name;
rsync_xa *rxa;
while (count--) {
char *ptr, *name;
rsync_xa *rxa;
@@
-189,6
+189,6
@@
To use this patch, run these commands for a successful build:
+ 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;
+ 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
- size_t extra_len = 0;
- #else
+ size_t extra_len = MIGHT_NEED_RPRE ? RPRE_LEN : 0;
+ if (dget_len + extra_len < dget_len)
+ out_of_memory("receive_xattr"); /* overflow */