} else if (protocol_version < 28)
rdev = MAKEDEV(0, 0);
if (preserve_uid) {
- if (F_OWNER(file) == uid && *lastname)
+ if ((uid_t)F_OWNER(file) == uid && *lastname)
flags |= XMIT_SAME_UID;
else {
uid = F_OWNER(file);
}
}
if (preserve_gid) {
- if (F_GROUP(file) == gid && *lastname)
+ if ((gid_t)F_GROUP(file) == gid && *lastname)
flags |= XMIT_SAME_GID;
else {
gid = F_GROUP(file);
static uint32 rdev_major;
static uid_t uid;
static gid_t gid;
+ static uint16 gid_flags;
static char lastname[MAXPATHLEN], *lastdir;
static int lastdir_depth, lastdir_len = -1;
static unsigned int del_hier_name_len = 0;
struct file_struct *file;
alloc_pool_t *pool;
char *bp;
- uint16 new_flags = 0;
if (xflags & XMIT_SAME_NAME)
l1 = read_byte(f);
#ifdef ICONV_OPTION
if (ic_recv != (iconv_t)-1) {
- char *obuf = thisname, *ibuf = lastname;
+ char *obuf = thisname;
+ ICONV_CONST char *ibuf = (ICONV_CONST char *)lastname;
size_t ocnt = MAXPATHLEN, icnt = basename_len;
if (icnt >= MAXPATHLEN) {
gid = (gid_t)read_int(f);
else {
gid = (gid_t)read_varint(f);
+ gid_flags = 0;
if (xflags & XMIT_GROUP_NAME_FOLLOWS)
- gid = recv_group_name(f, gid, &new_flags);
+ gid = recv_group_name(f, gid, &gid_flags);
else if (inc_recurse && (!am_root || !numeric_ids))
- gid = match_gid(gid, &new_flags);
+ gid = match_gid(gid, &gid_flags);
}
}
if (preserve_hard_links) {
if (protocol_version < 28 && S_ISREG(mode))
xflags |= XMIT_HLINKED;
- if (xflags & XMIT_HLINKED) {
+ if (xflags & XMIT_HLINKED)
extra_len += EXTRA_LEN;
- new_flags |= FLAG_HLINKED;
- }
}
#endif
memcpy(bp, basename, basename_len);
bp += basename_len + linkname_len; /* skip space for symlink too */
- file->flags = new_flags;
+#ifdef SUPPORT_HARD_LINKS
+ if (xflags & XMIT_HLINKED)
+ file->flags |= FLAG_HLINKED;
+#endif
file->modtime = (time_t)modtime;
file->len32 = (uint32)file_length;
if (file_length > 0xFFFFFFFFu && S_ISREG(mode)) {
file->mode = mode;
if (preserve_uid)
F_OWNER(file) = uid;
- if (preserve_gid)
+ if (preserve_gid) {
F_GROUP(file) = gid;
+ file->flags |= gid_flags;
+ }
#ifdef ICONV_OPTION
if (ic_ndx)
F_NDX(file) = flist->count + flist->ndx_start;
qsort(dir_flist->sorted + start, end - start + 1,
sizeof dir_flist->sorted[0], (int (*)())file_compare);
+ if (verbose > 3)
+ output_flist(dir_flist);
+
for (i = start; i <= end; i++) {
struct file_struct *file = dir_flist->sorted[i];
if (!(file->flags & FLAG_XFER_DIR)
if (verbose > 1) {
rprintf(FINFO,
"removing duplicate name %s from file list (%d)\n",
- f_name(file, fbuf), drop);
+ f_name(file, fbuf), drop + flist->ndx_start);
}
/* Make sure we don't lose track of a user-specified
* top directory. */
trail = S_ISDIR(file->mode) ? "/" : "";
} else
root = dir = slash = name = trail = "";
- rprintf(FINFO, "[%s] i=%d %s %s%s%s%s mode=0%o len=%.0f%s%s flags=%x\n",
- who, i, root, dir, slash, name, trail, (int)file->mode,
- (double)F_LENGTH(file), uidbuf, gidbuf, file->flags);
+ rprintf(FINFO,
+ "[%s] i=%d %s %s%s%s%s mode=0%o len=%.0f%s%s flags=%x\n",
+ who, i + flist->ndx_start,
+ root, dir, slash, name, trail,
+ (int)file->mode, (double)F_LENGTH(file),
+ uidbuf, gidbuf, file->flags);
}
}