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
Make sure our select calls don't sleep for over one minute at a time,
[rsync/rsync.git]
/
flist.c
diff --git
a/flist.c
b/flist.c
index
5735536
..
6f20e83
100644
(file)
--- a/
flist.c
+++ b/
flist.c
@@
-53,7
+53,6
@@
extern int preserve_perms;
extern int preserve_devices;
extern int preserve_uid;
extern int preserve_gid;
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;
extern int relative_paths;
extern int implied_dirs;
extern int copy_links;
@@
-211,6
+210,8
@@
int link_stat(const char *path, STRUCT_STAT * buffer)
*/
static int check_exclude_file(char *fname, int is_dir, int exclude_level)
{
*/
static int check_exclude_file(char *fname, int is_dir, int exclude_level)
{
+ int rc;
+
#if 0 /* This currently never happens, so avoid a useless compare. */
if (exclude_level == NO_EXCLUDES)
return 0;
#if 0 /* This currently never happens, so avoid a useless compare. */
if (exclude_level == NO_EXCLUDES)
return 0;
@@
-227,17
+228,15
@@
static int check_exclude_file(char *fname, int is_dir, int exclude_level)
}
}
if (server_exclude_list.head
}
}
if (server_exclude_list.head
- && check_exclude(&server_exclude_list, fname, is_dir,
- "server pattern"))
+ && check_exclude(&server_exclude_list, fname, is_dir) < 0)
return 1;
if (exclude_level != ALL_EXCLUDES)
return 0;
if (exclude_list.head
return 1;
if (exclude_level != ALL_EXCLUDES)
return 0;
if (exclude_list.head
- &&
check_exclude(&exclude_list, fname, is_dir, "pattern")
)
- return
1
;
+ &&
(rc = check_exclude(&exclude_list, fname, is_dir)) != 0
)
+ return
rc < 0
;
if (local_exclude_list.head
if (local_exclude_list.head
- && check_exclude(&local_exclude_list, fname, is_dir,
- "local-cvsignore"))
+ && check_exclude(&local_exclude_list, fname, is_dir) < 0)
return 1;
return 0;
}
return 1;
return 0;
}
@@
-283,7
+282,7
@@
static int flist_dir_len;
**/
void flist_expand(struct file_list *flist)
{
**/
void flist_expand(struct file_list *flist)
{
-
void
*new_ptr;
+
struct file_struct *
*new_ptr;
if (flist->count < flist->malloced)
return;
if (flist->count < flist->malloced)
return;
@@
-302,12
+301,8
@@
void flist_expand(struct file_list *flist)
if (flist->malloced < flist->count)
flist->malloced = flist->count;
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",
if (verbose >= 2) {
rprintf(FINFO, "[%s] expand file_list to %.0f bytes, did%s move\n",
@@
-316,7
+311,7
@@
void flist_expand(struct file_list *flist)
(new_ptr == flist->files) ? " not" : "");
}
(new_ptr == flist->files) ? " not" : "");
}
- flist->files =
(struct file_struct **)
new_ptr;
+ flist->files = new_ptr;
if (!flist->files)
out_of_memory("flist_expand");
if (!flist->files)
out_of_memory("flist_expand");
@@
-333,7
+328,7
@@
void send_file_entry(struct file_struct *file, int f, unsigned short base_flags)
static uid_t uid;
static gid_t gid;
static char lastname[MAXPATHLEN];
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)
int l1, l2;
if (f == -1)
@@
-351,7
+346,7
@@
void send_file_entry(struct file_struct *file, int f, unsigned short base_flags)
io_write_phase = "send_file_entry";
io_write_phase = "send_file_entry";
- f
name = f_name_to(file, fbuf
);
+ f
_name_to(file, fname
);
flags = base_flags;
flags = base_flags;
@@
-539,6
+534,7
@@
void receive_file_entry(struct file_struct **fptr, unsigned short flags,
rdev_major = 0;
uid = 0, gid = 0;
*lastname = '\0';
rdev_major = 0;
uid = 0, gid = 0;
*lastname = '\0';
+ lastdir_len = -1;
return;
}
return;
}
@@
-745,7
+741,7
@@
struct file_struct *make_file(char *fname,
char *basename, *dirname, *bp;
unsigned short flags = 0;
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)
lastdir_len = -1;
if (strlcpy(thisname, fname, sizeof thisname)
@@
-778,8
+774,8
@@
struct file_struct *make_file(char *fname,
}
else {
io_error |= IOERR_GENERAL;
}
else {
io_error |= IOERR_GENERAL;
- r
printf(FERROR, "readlink %s failed: %s\n
",
-
full_fname(thisname), strerror(save_errno
));
+ r
syserr(FERROR, save_errno, "readlink %s failed
",
+
full_fname(thisname
));
}
return NULL;
}
}
return NULL;
}
@@
-947,9
+943,13
@@
void send_file_name(int f, struct file_list *flist, char *fname,
if (recursive && S_ISDIR(file->mode)
&& !(file->flags & FLAG_MOUNT_POINT)) {
struct exclude_list_struct last_list = local_exclude_list;
if (recursive && S_ISDIR(file->mode)
&& !(file->flags & FLAG_MOUNT_POINT)) {
struct exclude_list_struct last_list = local_exclude_list;
-
memset(&local_exclude_list, 0, sizeof local_exclude_list)
;
+
local_exclude_list.head = local_exclude_list.tail = NULL
;
send_directory(f, flist, f_name_to(file, fbuf));
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;
}
}
local_exclude_list = last_list;
}
}
@@
-966,8
+966,7
@@
static void send_directory(int f, struct file_list *flist, char *dir)
d = opendir(dir);
if (!d) {
io_error |= IOERR_GENERAL;
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;
}
return;
}
@@
-989,7
+988,7
@@
static void send_directory(int f, struct file_list *flist, char *dir)
if (strlcpy(p, ".cvsignore", MAXPATHLEN - offset)
< MAXPATHLEN - offset) {
add_exclude_file(&local_exclude_list, fname,
if (strlcpy(p, ".cvsignore", MAXPATHLEN - offset)
< MAXPATHLEN - offset) {
add_exclude_file(&local_exclude_list, fname,
- XFLG_WORD_SPLIT | XFLG_
NO_PREFIXES
);
+ XFLG_WORD_SPLIT | XFLG_
WORDS_ONLY
);
} else {
io_error |= IOERR_GENERAL;
rprintf(FINFO,
} else {
io_error |= IOERR_GENERAL;
rprintf(FINFO,
@@
-1014,8
+1013,7
@@
static void send_directory(int f, struct file_list *flist, char *dir)
}
if (errno) {
io_error |= IOERR_GENERAL;
}
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);
}
closedir(d);
@@
-1050,8
+1048,8
@@
struct file_list *send_file_list(int f, int argc, char *argv[])
io_start_buffering_out(f);
if (filesfrom_fd >= 0) {
if (argv[0] && !push_dir(argv[0])) {
io_start_buffering_out(f);
if (filesfrom_fd >= 0) {
if (argv[0] && !push_dir(argv[0])) {
- r
printf(FERROR, "push_dir %s failed: %s\n
",
- full_fname(argv[0])
, strerror(errno)
);
+ r
syserr(FERROR, errno, "push_dir %s failed
",
+ full_fname(argv[0]));
exit_cleanup(RERR_FILESELECT);
}
use_ff_fd = 1;
exit_cleanup(RERR_FILESELECT);
}
use_ff_fd = 1;
@@
-1088,8
+1086,8
@@
struct file_list *send_file_list(int f, int argc, char *argv[])
if (link_stat(fname, &st) != 0) {
if (f != -1) {
io_error |= IOERR_GENERAL;
if (link_stat(fname, &st) != 0) {
if (f != -1) {
io_error |= IOERR_GENERAL;
- r
printf(FERROR, "link_stat %s failed: %s\n
",
- full_fname(fname)
, strerror(errno)
);
+ r
syserr(FERROR, errno, "link_stat %s failed
",
+ full_fname(fname));
}
continue;
}
}
continue;
}
@@
-1158,8
+1156,8
@@
struct file_list *send_file_list(int f, int argc, char *argv[])
if (!push_dir(dir)) {
io_error |= IOERR_GENERAL;
if (!push_dir(dir)) {
io_error |= IOERR_GENERAL;
- r
printf(FERROR, "push_dir %s failed: %s\n
",
- full_fname(dir)
, strerror(errno)
);
+ r
syserr(FERROR, errno, "push_dir %s failed
",
+ full_fname(dir));
continue;
}
continue;
}
@@
-1181,8
+1179,8
@@
struct file_list *send_file_list(int f, int argc, char *argv[])
flist_dir = NULL;
flist_dir_len = 0;
if (!pop_dir(olddir)) {
flist_dir = NULL;
flist_dir_len = 0;
if (!pop_dir(olddir)) {
- r
printf(FERROR, "pop_dir %s failed: %s\n
",
- full_fname(dir)
, strerror(errno)
);
+ r
syserr(FERROR, errno, "pop_dir %s failed
",
+ full_fname(dir));
exit_cleanup(RERR_FILESELECT);
}
}
exit_cleanup(RERR_FILESELECT);
}
}
@@
-1517,11
+1515,17
@@
int f_name_cmp(struct file_struct *f1, struct file_struct *f2)
if (!(c1 = (uchar*)f1->dirname)) {
state1 = fnc_BASE;
c1 = (uchar*)f1->basename;
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
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;
} else
state2 = fnc_DIR;