extern int am_server;
extern int am_daemon;
extern int am_sender;
+extern int am_generator;
extern int inc_recurse;
extern int do_progress;
extern int always_checksum;
goto the_end;
}
- write_longint(f, F_LENGTH(file));
- if (!(flags & XMIT_SAME_TIME))
- write_int(f, modtime);
+ write_varlong30(f, F_LENGTH(file), 3);
+ if (!(flags & XMIT_SAME_TIME)) {
+ if (protocol_version >= 30)
+ write_varlong(f, modtime, 4);
+ else
+ write_int(f, modtime);
+ }
if (!(flags & XMIT_SAME_MODE))
write_int(f, to_wire_mode(mode));
if (preserve_uid && !(flags & XMIT_SAME_UID)) {
static struct file_struct *recv_file_entry(struct file_list *flist,
int flags, int f)
{
- static time_t modtime;
+ static int64 modtime;
static mode_t mode;
static int64 dev;
static dev_t rdev;
}
#endif
- file_length = read_longint(f);
- if (!(flags & XMIT_SAME_TIME))
- modtime = (time_t)read_int(f);
+ file_length = read_varlong30(f, 3);
+ if (!(flags & XMIT_SAME_TIME)) {
+ if (protocol_version >= 30) {
+ modtime = read_varlong(f, 4);
+#if SIZEOF_TIME_T < SIZEOF_INT64
+ if ((modtime > INT_MAX || modtime < INT_MIN) && !am_generator) {
+ rprintf(FERROR,
+ "Time value of %s truncated on receiver.\n",
+ lastname);
+ }
+#endif
+ } else
+ modtime = read_int(f);
+ }
if (!(flags & XMIT_SAME_MODE))
mode = from_wire_mode(read_int(f));
if (flags & XMIT_HLINKED)
file->flags |= FLAG_HLINKED;
#endif
- file->modtime = modtime;
+ file->modtime = (time_t)modtime;
file->len32 = (uint32)file_length;
if (file_length > 0xFFFFFFFFu && S_ISREG(mode)) {
file->flags |= FLAG_LENGTH64;