extern int preserve_devices;
extern int preserve_uid;
extern int preserve_gid;
-extern int preserve_times;
extern int relative_paths;
extern int implied_dirs;
extern int copy_links;
static void start_filelist_progress(char *kind)
{
rprintf(FINFO, "%s ... ", kind);
- if ((verbose > 1) || do_progress)
+ if (verbose > 1 || do_progress)
rprintf(FINFO, "\n");
rflush(FINFO);
}
static void maybe_emit_filelist_progress(const struct file_list *flist)
{
- if (do_progress && show_filelist_p() && ((flist->count % 100) == 0))
+ if (do_progress && show_filelist_p() && (flist->count % 100) == 0)
emit_filelist_progress(flist);
}
{
char perms[11];
- if (!f->basename)
+ if (!f->basename) {
/* this can happen if duplicate names were removed */
return;
+ }
permstring(perms, f->mode);
if (preserve_links && S_ISLNK(f->mode)) {
rprintf(FINFO, "%s %11.0f %s %s -> %s\n",
perms,
- (double) f->length, timestring(f->modtime),
+ (double)f->length, timestring(f->modtime),
f_name(f), f->u.link);
} else
#endif
+ {
rprintf(FINFO, "%s %11.0f %s %s\n",
perms,
- (double) f->length, timestring(f->modtime),
+ (double)f->length, timestring(f->modtime),
f_name(f));
+ }
}
if (do_lstat(path, buffer) == -1)
return -1;
if (S_ISLNK(buffer->st_mode)) {
- int l = readlink((char *) path, linkbuf, MAXPATHLEN - 1);
+ int l = readlink((char *)path, linkbuf, MAXPATHLEN - 1);
if (l == -1)
return -1;
linkbuf[l] = 0;
#endif
}
-int link_stat(const char *path, STRUCT_STAT * buffer)
+int link_stat(const char *path, STRUCT_STAT *buffer)
{
#if SUPPORT_LINKS
if (copy_links)
if (S_ISLNK(mode) && (_S_IFLNK != 0120000))
return (mode & ~(_S_IFMT)) | 0120000;
#endif
- return (int) mode;
+ return (int)mode;
}
static mode_t from_wire_mode(int mode)
{
if ((mode & (_S_IFMT)) == 0120000 && (_S_IFLNK != 0120000))
return (mode & ~(_S_IFMT)) | _S_IFLNK;
- return (mode_t) mode;
+ return (mode_t)mode;
}
**/
void flist_expand(struct file_list *flist)
{
- void *new_ptr;
+ struct file_struct **new_ptr;
if (flist->count < flist->malloced)
return;
if (flist->malloced < flist->count)
flist->malloced = flist->count;
- if (flist->files) {
- new_ptr = realloc_array(flist->files,
- struct file_struct *, flist->malloced);
- } else {
- new_ptr = new_array(struct file_struct *, flist->malloced);
- }
+ new_ptr = realloc_array(flist->files, struct file_struct *,
+ flist->malloced);
if (verbose >= 2) {
rprintf(FINFO, "[%s] expand file_list to %.0f bytes, did%s move\n",
who_am_i(),
- (double) sizeof flist->files[0] * flist->malloced,
+ (double)sizeof flist->files[0] * flist->malloced,
(new_ptr == flist->files) ? " not" : "");
}
- flist->files = (struct file_struct **) new_ptr;
+ flist->files = new_ptr;
if (!flist->files)
out_of_memory("flist_expand");
static uid_t uid;
static gid_t gid;
static char lastname[MAXPATHLEN];
- char *fname, fbuf[MAXPATHLEN];
+ char fname[MAXPATHLEN];
int l1, l2;
if (f == -1)
io_write_phase = "send_file_entry";
- fname = f_name_to(file, fbuf);
+ f_name_to(file, fname);
flags = base_flags;
rdev_major = 0;
uid = 0, gid = 0;
*lastname = '\0';
+ lastdir_len = -1;
return;
}
char *basename, *dirname, *bp;
unsigned short flags = 0;
- if (!flist) /* lastdir isn't valid if flist is NULL */
+ if (!flist || !flist->count) /* Ignore lastdir when invalid. */
lastdir_len = -1;
if (strlcpy(thisname, fname, sizeof thisname)
if (readlink_stat(thisname, &st, linkname) != 0) {
int save_errno = errno;
- if (errno == ENOENT) {
- enum logcode c = am_daemon && protocol_version < 28
- ? FERROR : FINFO;
- /* either symlink pointing nowhere or file that
- * was removed during rsync run; see if excluded
- * before reporting an error */
- if (exclude_level != NO_EXCLUDES
- && check_exclude_file(thisname, 0, exclude_level)) {
- /* file is excluded anyway, ignore silently */
- return NULL;
+ /* See if file is excluded before reporting an error. */
+ if (exclude_level != NO_EXCLUDES
+ && check_exclude_file(thisname, 0, exclude_level))
+ return NULL;
+ if (save_errno == ENOENT) {
+#if SUPPORT_LINKS
+ /* Avoid "vanished" error if symlink points nowhere. */
+ if (copy_links && do_lstat(thisname, &st) == 0
+ && S_ISLNK(st.st_mode)) {
+ io_error |= IOERR_GENERAL;
+ rprintf(FERROR, "symlink has no referent: %s\n",
+ full_fname(thisname));
+ } else
+#endif
+ {
+ enum logcode c = am_daemon && protocol_version < 28
+ ? FERROR : FINFO;
+ io_error |= IOERR_VANISHED;
+ rprintf(c, "file has vanished: %s\n",
+ full_fname(thisname));
}
- io_error |= IOERR_VANISHED;
- rprintf(c, "file has vanished: %s\n",
- full_fname(thisname));
- }
- else {
+ } else {
io_error |= IOERR_GENERAL;
- rprintf(FERROR, "readlink %s failed: %s\n",
- full_fname(thisname), strerror(save_errno));
+ rsyserr(FERROR, save_errno, "readlink %s failed",
+ full_fname(thisname));
}
return NULL;
}
struct exclude_list_struct last_list = local_exclude_list;
local_exclude_list.head = local_exclude_list.tail = NULL;
send_directory(f, flist, f_name_to(file, fbuf));
- free_exclude_list(&local_exclude_list);
+ if (verbose > 2) {
+ rprintf(FINFO, "[%s] popping %sexclude list\n",
+ who_am_i(), local_exclude_list.debug_type);
+ }
+ clear_exclude_list(&local_exclude_list);
local_exclude_list = last_list;
}
}
d = opendir(dir);
if (!d) {
io_error |= IOERR_GENERAL;
- rprintf(FERROR, "opendir %s failed: %s\n",
- full_fname(dir), strerror(errno));
+ rsyserr(FERROR, errno, "opendir %s failed", full_fname(dir));
return;
}
}
if (errno) {
io_error |= IOERR_GENERAL;
- rprintf(FERROR, "readdir(%s): (%d) %s\n",
- dir, errno, strerror(errno));
+ rsyserr(FERROR, errno, "readdir(%s)", dir);
}
closedir(d);
io_start_buffering_out(f);
if (filesfrom_fd >= 0) {
if (argv[0] && !push_dir(argv[0])) {
- rprintf(FERROR, "push_dir %s failed: %s\n",
- full_fname(argv[0]), strerror(errno));
+ rsyserr(FERROR, errno, "push_dir %s failed",
+ full_fname(argv[0]));
exit_cleanup(RERR_FILESELECT);
}
use_ff_fd = 1;
if (link_stat(fname, &st) != 0) {
if (f != -1) {
io_error |= IOERR_GENERAL;
- rprintf(FERROR, "link_stat %s failed: %s\n",
- full_fname(fname), strerror(errno));
+ rsyserr(FERROR, errno, "link_stat %s failed",
+ full_fname(fname));
}
continue;
}
if (!push_dir(dir)) {
io_error |= IOERR_GENERAL;
- rprintf(FERROR, "push_dir %s failed: %s\n",
- full_fname(dir), strerror(errno));
+ rsyserr(FERROR, errno, "push_dir %s failed",
+ full_fname(dir));
continue;
}
flist_dir = NULL;
flist_dir_len = 0;
if (!pop_dir(olddir)) {
- rprintf(FERROR, "pop_dir %s failed: %s\n",
- full_fname(dir), strerror(errno));
+ rsyserr(FERROR, errno, "pop_dir %s failed",
+ full_fname(dir));
exit_cleanup(RERR_FILESELECT);
}
}
return;
qsort(flist->files, flist->count,
- sizeof flist->files[0], (int (*)()) file_compare);
+ sizeof flist->files[0], (int (*)())file_compare);
for (i = no_dups? 0 : flist->count; i < flist->count; i++) {
if (flist->files[i]->basename) {
*gidbuf = '\0';
rprintf(FINFO, "[%s] i=%d %s %s %s mode=0%o len=%.0f%s%s\n",
who_am_i(), i, NS(file->basedir), NS(file->dirname),
- NS(file->basename), (int) file->mode,
- (double) file->length, uidbuf, gidbuf);
+ NS(file->basename), (int)file->mode,
+ (double)file->length, uidbuf, gidbuf);
}
}
if (!(c1 = (uchar*)f1->dirname)) {
state1 = fnc_BASE;
c1 = (uchar*)f1->basename;
+ } else if (!*c1) {
+ state1 = fnc_SLASH;
+ c1 = (uchar*)"/";
} else
state1 = fnc_DIR;
if (!(c2 = (uchar*)f2->dirname)) {
state2 = fnc_BASE;
c2 = (uchar*)f2->basename;
+ } else if (!*c2) {
+ state2 = fnc_SLASH;
+ c2 = (uchar*)"/";
} else
state2 = fnc_DIR;