Matt McCutchen's Web Site
/
rsync
/
rsync.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Reorganize the build-farm "prepare-source" magic a little.
[rsync/rsync.git]
/
flist.c
diff --git
a/flist.c
b/flist.c
index
0b4c4e2
..
b8cc9fe
100644
(file)
--- a/
flist.c
+++ b/
flist.c
@@
-63,6
+63,7
@@
extern int copy_links;
extern int copy_unsafe_links;
extern int protocol_version;
extern int sanitize_paths;
extern int copy_unsafe_links;
extern int protocol_version;
extern int sanitize_paths;
+extern int munge_symlinks;
extern int need_unsorted_flist;
extern int unsort_ndx;
extern struct stats stats;
extern int need_unsorted_flist;
extern int unsort_ndx;
extern struct stats stats;
@@
-200,6
+201,11
@@
static int readlink_stat(const char *path, STRUCT_STAT *stp, char *linkbuf)
}
return x_stat(path, stp, NULL);
}
}
return x_stat(path, stp, NULL);
}
+ if (munge_symlinks && am_sender && llen > SYMLINK_PREFIX_LEN
+ && strncmp(linkbuf, SYMLINK_PREFIX, SYMLINK_PREFIX_LEN) == 0) {
+ memmove(linkbuf, linkbuf + SYMLINK_PREFIX_LEN,
+ llen - SYMLINK_PREFIX_LEN + 1);
+ }
}
return 0;
#else
}
return 0;
#else
@@
-725,7
+731,7
@@
static struct file_struct *recv_file_entry(struct file_list *flist,
if (protocol_version >= 30) {
modtime = read_varlong(f, 4);
#if SIZEOF_TIME_T < SIZEOF_INT64
if (protocol_version >= 30) {
modtime = read_varlong(f, 4);
#if SIZEOF_TIME_T < SIZEOF_INT64
- if (
(modtime > INT_MAX || modtime < INT_MIN) && !am_generator
) {
+ if (
!am_generator && (int64)(time_t)modtime != modtime
) {
rprintf(FERROR_XFER,
"Time value of %s truncated on receiver.\n",
lastname);
rprintf(FERROR_XFER,
"Time value of %s truncated on receiver.\n",
lastname);
@@
-794,6
+800,8
@@
static struct file_struct *recv_file_entry(struct file_list *flist,
linkname_len - 1);
overflow_exit("recv_file_entry");
}
linkname_len - 1);
overflow_exit("recv_file_entry");
}
+ if (munge_symlinks)
+ linkname_len += SYMLINK_PREFIX_LEN;
}
else
#endif
}
else
#endif
@@
-821,11
+829,6
@@
static struct file_struct *recv_file_entry(struct file_list *flist,
if (file_length > 0xFFFFFFFFu && S_ISREG(mode))
extra_len += EXTRA_LEN;
if (file_length > 0xFFFFFFFFu && S_ISREG(mode))
extra_len += EXTRA_LEN;
-#if EXTRA_ROUNDING > 0
- if (extra_len & (EXTRA_ROUNDING * EXTRA_LEN))
- extra_len = (extra_len | (EXTRA_ROUNDING * EXTRA_LEN)) + EXTRA_LEN;
-#endif
-
if (inc_recurse && S_ISDIR(mode)) {
if (one_file_system) {
/* Room to save the dir's device for -x */
if (inc_recurse && S_ISDIR(mode)) {
if (one_file_system) {
/* Room to save the dir's device for -x */
@@
-835,6
+838,11
@@
static struct file_struct *recv_file_entry(struct file_list *flist,
} else
pool = flist->file_pool;
} else
pool = flist->file_pool;
+#if EXTRA_ROUNDING > 0
+ if (extra_len & (EXTRA_ROUNDING * EXTRA_LEN))
+ extra_len = (extra_len | (EXTRA_ROUNDING * EXTRA_LEN)) + EXTRA_LEN;
+#endif
+
alloc_len = FILE_STRUCT_LEN + extra_len + basename_len
+ linkname_len;
bp = pool_alloc(pool, alloc_len, "recv_file_entry");
alloc_len = FILE_STRUCT_LEN + extra_len + basename_len
+ linkname_len;
bp = pool_alloc(pool, alloc_len, "recv_file_entry");
@@
-914,10
+922,16
@@
static struct file_struct *recv_file_entry(struct file_list *flist,
if (first_hlink_ndx >= flist->ndx_start) {
struct file_struct *first = flist->files[first_hlink_ndx - flist->ndx_start];
memcpy(bp, F_SYMLINK(first), linkname_len);
if (first_hlink_ndx >= flist->ndx_start) {
struct file_struct *first = flist->files[first_hlink_ndx - flist->ndx_start];
memcpy(bp, F_SYMLINK(first), linkname_len);
- } else
+ } else if (munge_symlinks) {
+ strlcpy(bp, SYMLINK_PREFIX, linkname_len);
+ bp += SYMLINK_PREFIX_LEN;
+ linkname_len -= SYMLINK_PREFIX_LEN;
read_sbuf(f, bp, linkname_len - 1);
read_sbuf(f, bp, linkname_len - 1);
- if (sanitize_paths)
- sanitize_path(bp, bp, "", lastdir_depth);
+ } else {
+ read_sbuf(f, bp, linkname_len - 1);
+ if (sanitize_paths)
+ sanitize_path(bp, bp, "", lastdir_depth);
+ }
}
#endif
}
#endif