*/
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 (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
- && 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
- && check_exclude(&local_exclude_list, fname, is_dir,
- "local-cvsignore"))
+ && check_exclude(&local_exclude_list, fname, is_dir) < 0)
return 1;
return 0;
}
unsigned short flags;
static time_t modtime;
static mode_t mode;
- static dev_t dev, rdev;
+ static uint64 dev;
+ static dev_t rdev;
static uint32 rdev_major;
static uid_t uid;
static gid_t gid;
if (!file) {
write_byte(f, 0);
modtime = 0, mode = 0;
- dev = rdev = makedev(0, 0);
+ dev = 0, rdev = makedev(0, 0);
rdev_major = 0;
uid = 0, gid = 0;
*lastname = '\0';
#if SUPPORT_HARD_LINKS
if (flags & XMIT_HAS_IDEV_DATA) {
- if (protocol_version >= 28) {
- /* major/minor dev_t and 64-bit ino_t */
- if (!(flags & XMIT_SAME_DEV)) {
- write_int(f, major(dev));
- write_int(f, minor(dev));
- }
- write_longint(f, file->F_INODE);
- } else if (protocol_version < 26) {
+ if (protocol_version < 26) {
/* 32-bit dev_t and ino_t */
write_int(f, dev);
write_int(f, file->F_INODE);
} else {
/* 64-bit dev_t and ino_t */
- write_longint(f, dev);
+ if (!(flags & XMIT_SAME_DEV))
+ write_longint(f, dev);
write_longint(f, file->F_INODE);
}
}
{
static time_t modtime;
static mode_t mode;
- static dev_t dev, rdev;
+ static uint64 dev;
+ static dev_t rdev;
static uint32 rdev_major;
static uid_t uid;
static gid_t gid;
if (!fptr) {
modtime = 0, mode = 0;
- dev = rdev = makedev(0, 0);
+ dev = 0, rdev = makedev(0, 0);
rdev_major = 0;
uid = 0, gid = 0;
*lastname = '\0';
+ lastdir_len = -1;
return;
}
if (preserve_hard_links && protocol_version < 28 && S_ISREG(mode))
flags |= XMIT_HAS_IDEV_DATA;
if (flags & XMIT_HAS_IDEV_DATA) {
- INO64_T inode;
- if (protocol_version >= 28) {
- if (!(flags & XMIT_SAME_DEV)) {
- uint32 dev_major = read_int(f);
- uint32 dev_minor = read_int(f);
- dev = makedev(dev_major, dev_minor);
- }
- inode = read_longint(f);
- } else if (protocol_version < 26) {
- dev = (dev_t)read_int(f);
+ uint64 inode;
+ if (protocol_version < 26) {
+ dev = read_int(f);
inode = read_int(f);
} else {
- dev = (dev_t)read_longint(f);
+ if (!(flags & XMIT_SAME_DEV))
+ dev = read_longint(f);
inode = read_longint(f);
}
if (flist->hlink_pool) {
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 (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));
free_exclude_list(&local_exclude_list);
local_exclude_list = last_list;
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,
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;