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
A small optimization to the symlink-send code, and an extra sanity
[rsync/rsync.git]
/
flist.c
diff --git
a/flist.c
b/flist.c
index
263af26
..
245a7ef
100644
(file)
--- a/
flist.c
+++ b/
flist.c
@@
-342,7
+342,8
@@
static void flist_expand(struct file_list *flist)
}
if (verbose >= 2) {
}
if (verbose >= 2) {
- rprintf(FINFO, "expand file_list to %.0f bytes, did%s move\n",
+ rprintf(FINFO, "[%s] expand file_list to %.0f bytes, did%s move\n",
+ who_am_i(),
(double)sizeof(flist->files[0])
* flist->malloced,
(new_ptr == flist->files) ? " not" : "");
(double)sizeof(flist->files[0])
* flist->malloced,
(new_ptr == flist->files) ? " not" : "");
@@
-440,19
+441,19
@@
void send_file_entry(struct file_struct *file, int f, unsigned short base_flags)
if (l2 > 255)
flags |= XMIT_LONG_NAME;
if (l2 > 255)
flags |= XMIT_LONG_NAME;
- /* We must make sure we don't send a zero flag
s
byte or
+ /* We must make sure we don't send a zero flag
-
byte or
* the other end will terminate the flist transfer. */
* the other end will terminate the flist transfer. */
- if (
flags == 0
&& !S_ISDIR(mode))
+ if (
!(flags & 0xFF)
&& !S_ISDIR(mode))
flags |= XMIT_TOP_DIR; /* NOTE: no meaning for non-dir */
if (protocol_version >= 28) {
flags |= XMIT_TOP_DIR; /* NOTE: no meaning for non-dir */
if (protocol_version >= 28) {
- if ((flags & 0xFF00) ||
flags == 0
) {
+ if ((flags & 0xFF00) ||
!(flags & 0xFF)
) {
flags |= XMIT_EXTENDED_FLAGS;
write_byte(f, flags);
write_byte(f, flags >> 8);
} else
write_byte(f, flags);
} else {
flags |= XMIT_EXTENDED_FLAGS;
write_byte(f, flags);
write_byte(f, flags >> 8);
} else
write_byte(f, flags);
} else {
- if (
flags == 0
)
+ if (
!(flags & 0xFF)
)
flags |= XMIT_LONG_NAME;
write_byte(f, flags);
}
flags |= XMIT_LONG_NAME;
write_byte(f, flags);
}
@@
-489,8
+490,9
@@
void send_file_entry(struct file_struct *file, int f, unsigned short base_flags)
#if SUPPORT_LINKS
if (preserve_links && S_ISLNK(mode)) {
#if SUPPORT_LINKS
if (preserve_links && S_ISLNK(mode)) {
- write_int(f, strlen(file->u.link));
- write_buf(f, file->u.link, strlen(file->u.link));
+ int len = strlen(file->u.link);
+ write_int(f, len);
+ write_buf(f, file->u.link, len);
}
#endif
}
#endif
@@
-642,14
+644,14
@@
void receive_file_entry(struct file_struct **fptr, unsigned short flags, int f)
}
if (preserve_links && S_ISLNK(mode)) {
}
if (preserve_links && S_ISLNK(mode)) {
- int l = read_int(f);
- if (l
< 0
) {
- rprintf(FERROR, "overflow: l
=%d\n", l
);
+ int l
en
= read_int(f);
+ if (l
en < 0 || len >= MAXPATHLEN
) {
+ rprintf(FERROR, "overflow: l
en=%d\n", len
);
overflow("receive_file_entry");
}
overflow("receive_file_entry");
}
- if (!(file->u.link = new_array(char, l + 1)))
+ if (!(file->u.link = new_array(char, l
en
+ 1)))
out_of_memory("receive_file_entry 2");
out_of_memory("receive_file_entry 2");
- read_sbuf(f, file->u.link, l);
+ read_sbuf(f, file->u.link, l
en
);
if (sanitize_paths)
sanitize_path(file->u.link, file->dirname);
}
if (sanitize_paths)
sanitize_path(file->u.link, file->dirname);
}
@@
-723,36
+725,35
@@
struct file_struct *make_file(char *fname, struct string_area **ap,
STRUCT_STAT st;
char sum[SUM_LENGTH];
char *p;
STRUCT_STAT st;
char sum[SUM_LENGTH];
char *p;
- char
cleaned_
name[MAXPATHLEN];
- char link
buf
[MAXPATHLEN];
+ char
this
name[MAXPATHLEN];
+ char link
name
[MAXPATHLEN];
unsigned short flags = 0;
unsigned short flags = 0;
- if (strlcpy(
cleaned_name, fname, sizeof cleaned_
name)
- >= sizeof
cleaned_
name - flist_dir_len) {
+ if (strlcpy(
thisname, fname, sizeof this
name)
+ >= sizeof
this
name - flist_dir_len) {
rprintf(FINFO, "skipping overly long name: %s\n", fname);
return NULL;
}
rprintf(FINFO, "skipping overly long name: %s\n", fname);
return NULL;
}
- clean_fname(
cleaned_
name);
+ clean_fname(
this
name);
if (sanitize_paths)
if (sanitize_paths)
- sanitize_path(cleaned_name, NULL);
- fname = cleaned_name;
+ sanitize_path(thisname, NULL);
memset(sum, 0, SUM_LENGTH);
memset(sum, 0, SUM_LENGTH);
- if (readlink_stat(
fname, &st, linkbuf
) != 0) {
+ if (readlink_stat(
thisname, &st, linkname
) != 0) {
int save_errno = errno;
if (errno == ENOENT && exclude_level != NO_EXCLUDES) {
/* either symlink pointing nowhere or file that
* was removed during rsync run; see if excluded
* before reporting an error */
int save_errno = errno;
if (errno == ENOENT && exclude_level != NO_EXCLUDES) {
/* either symlink pointing nowhere or file that
* was removed during rsync run; see if excluded
* before reporting an error */
- if (check_exclude_file(
f
name, 0, exclude_level)) {
+ if (check_exclude_file(
this
name, 0, exclude_level)) {
/* file is excluded anyway, ignore silently */
return NULL;
}
}
io_error |= IOERR_GENERAL;
rprintf(FERROR, "readlink %s failed: %s\n",
/* file is excluded anyway, ignore silently */
return NULL;
}
}
io_error |= IOERR_GENERAL;
rprintf(FERROR, "readlink %s failed: %s\n",
- full_fname(
f
name), strerror(save_errno));
+ full_fname(
this
name), strerror(save_errno));
return NULL;
}
return NULL;
}
@@
-761,7
+762,7
@@
struct file_struct *make_file(char *fname, struct string_area **ap,
goto skip_excludes;
if (S_ISDIR(st.st_mode) && !recurse && !files_from) {
goto skip_excludes;
if (S_ISDIR(st.st_mode) && !recurse && !files_from) {
- rprintf(FINFO, "skipping directory %s\n",
f
name);
+ rprintf(FINFO, "skipping directory %s\n",
this
name);
return NULL;
}
return NULL;
}
@@
-773,16
+774,18
@@
struct file_struct *make_file(char *fname, struct string_area **ap,
flags |= FLAG_MOUNT_POINT;
}
flags |= FLAG_MOUNT_POINT;
}
- if (check_exclude_file(
f
name, S_ISDIR(st.st_mode) != 0, exclude_level))
+ if (check_exclude_file(
this
name, S_ISDIR(st.st_mode) != 0, exclude_level))
return NULL;
return NULL;
- if (lp_ignore_nonreadable(module_id) && access(
f
name, R_OK) != 0)
+ if (lp_ignore_nonreadable(module_id) && access(
this
name, R_OK) != 0)
return NULL;
skip_excludes:
return NULL;
skip_excludes:
- if (verbose > 2)
- rprintf(FINFO, "make_file(%s,*,%d)\n", fname, exclude_level);
+ if (verbose > 2) {
+ rprintf(FINFO, "[%s] make_file(%s,*,%d)\n",
+ who_am_i(), thisname, exclude_level);
+ }
file = new(struct file_struct);
if (!file)
file = new(struct file_struct);
if (!file)
@@
-790,20
+793,20
@@
struct file_struct *make_file(char *fname, struct string_area **ap,
memset((char *) file, 0, sizeof(*file));
file->flags = flags;
memset((char *) file, 0, sizeof(*file));
file->flags = flags;
- if ((p = strrchr(
f
name, '/'))) {
+ if ((p = strrchr(
this
name, '/'))) {
static char *lastdir;
*p = 0;
static char *lastdir;
*p = 0;
- if (lastdir && strcmp(
f
name, lastdir) == 0)
+ if (lastdir && strcmp(
this
name, lastdir) == 0)
file->dirname = lastdir;
else {
file->dirname = lastdir;
else {
- file->dirname = strdup(
f
name);
+ file->dirname = strdup(
this
name);
lastdir = file->dirname;
}
file->basename = STRDUP(ap, p + 1);
*p = '/';
} else {
file->dirname = NULL;
lastdir = file->dirname;
}
file->basename = STRDUP(ap, p + 1);
*p = '/';
} else {
file->dirname = NULL;
- file->basename = STRDUP(ap,
f
name);
+ file->basename = STRDUP(ap,
this
name);
}
file->modtime = st.st_mtime;
}
file->modtime = st.st_mtime;
@@
-827,13
+830,13
@@
struct file_struct *make_file(char *fname, struct string_area **ap,
#if SUPPORT_LINKS
if (S_ISLNK(st.st_mode))
#if SUPPORT_LINKS
if (S_ISLNK(st.st_mode))
- file->u.link = STRDUP(ap, link
buf
);
+ file->u.link = STRDUP(ap, link
name
);
#endif
if (always_checksum && S_ISREG(st.st_mode)) {
if (!(file->u.sum = (char*)MALLOC(ap, MD4_SUM_LENGTH)))
out_of_memory("md4 sum");
#endif
if (always_checksum && S_ISREG(st.st_mode)) {
if (!(file->u.sum = (char*)MALLOC(ap, MD4_SUM_LENGTH)))
out_of_memory("md4 sum");
- file_checksum(
f
name, file->u.sum, st.st_size);
+ file_checksum(
this
name, file->u.sum, st.st_size);
}
file->basedir = flist_dir;
}
file->basedir = flist_dir;
@@
-1414,8
+1417,8
@@
static void clean_flist(struct file_list *flist, int strip_root, int no_dups)
return;
for (i = 0; i < flist->count; i++) {
return;
for (i = 0; i < flist->count; i++) {
- rprintf(FINFO, "[%
ld
] i=%d %s %s %s mode=0%o len=%.0f\n",
-
(long) getpid
(), i,
+ rprintf(FINFO, "[%
s
] i=%d %s %s %s mode=0%o len=%.0f\n",
+
who_am_i
(), i,
NS(flist->files[i]->basedir),
NS(flist->files[i]->dirname),
NS(flist->files[i]->basename),
NS(flist->files[i]->basedir),
NS(flist->files[i]->dirname),
NS(flist->files[i]->basename),