rprintf(FINFO, "deleting in %s\n", fbuf);
if (link_stat(fbuf, &st, keep_dirlinks) < 0
-@@ -347,8 +349,11 @@ void itemize(struct file_struct *file, i
- iflags |= ITEM_REPORT_SIZE;
- if ((iflags & (ITEM_TRANSFER|ITEM_LOCAL_CHANGE) && !keep_time
+@@ -349,6 +351,9 @@ void itemize(struct file_struct *file, i
&& (!(iflags & ITEM_XNAME_FOLLOWS) || *xname))
-- || (keep_time && cmp_modtime(file->modtime, st->st_mtime) != 0))
-+ || (keep_time && cmp_time(file->modtime, st->st_mtime) != 0))
+ || (keep_time && cmp_time(file->modtime, st->st_mtime) != 0))
iflags |= ITEM_REPORT_TIME;
+ if (preserve_atimes && !S_ISDIR(file->mode) && !S_ISLNK(file->mode)
+ && cmp_time(file->atime, st->st_atime) != 0)
if ((file->mode & CHMOD_BITS) != (st->st_mode & CHMOD_BITS))
iflags |= ITEM_REPORT_PERMS;
if (preserve_uid && am_root && file->uid != st->st_uid)
-@@ -396,7 +401,7 @@ int unchanged_file(char *fn, struct file
- if (ignore_times)
- return 0;
-
-- return cmp_modtime(st->st_mtime, file->modtime) == 0;
-+ return cmp_time(st->st_mtime, file->modtime) == 0;
- }
-
-
-@@ -550,13 +555,13 @@ static int find_fuzzy(struct file_struct
+@@ -550,7 +555,7 @@ static int find_fuzzy(struct file_struct
uint32 dist;
if (!S_ISREG(fp->mode) || !fp->length
continue;
name = fp->basename;
-
- if (fp->length == file->length
-- && cmp_modtime(fp->modtime, file->modtime) == 0) {
-+ && cmp_time(fp->modtime, file->modtime) == 0) {
- if (verbose > 4) {
- rprintf(FINFO,
- "fuzzy size/modtime match for %s\n",
-@@ -632,7 +637,7 @@ static int try_dests_reg(struct file_str
- if (!unchanged_attrs(file, stp))
- continue;
- if ((always_checksum || ignore_times)
-- && cmp_modtime(stp->st_mtime, file->modtime))
-+ && cmp_time(stp->st_mtime, file->modtime))
- continue;
- best_match = j;
- match_level = 3;
@@ -659,6 +664,8 @@ static int try_dests_reg(struct file_str
itemizing && verbose > 1,
code) < 0)
delete_in_dir(the_file_list, fname, file, &st);
return;
}
-@@ -1073,7 +1080,7 @@ static void recv_generator(char *fname,
- }
-
- if (update_only && statret == 0
-- && cmp_modtime(st.st_mtime, file->modtime) > 0) {
-+ && cmp_time(st.st_mtime, file->modtime) > 0) {
- if (verbose > 1)
- rprintf(FINFO, "%s is newer\n", fname);
- return;
@@ -1176,7 +1183,7 @@ static void recv_generator(char *fname,
if (fuzzy_basis) {
int j = flist_find(fuzzy_dirlist, file);
}
--- old/log.c
+++ new/log.c
-@@ -41,6 +41,7 @@ extern int module_id;
- extern int msg_fd_out;
+@@ -42,6 +42,7 @@ extern int msg_fd_out;
+ extern int allow_8bit_chars;
extern int protocol_version;
extern int preserve_times;
+extern int preserve_atimes;
extern int log_format_has_i;
extern int log_format_has_o_or_i;
extern int daemon_log_format_has_o_or_i;
-@@ -607,10 +608,12 @@ static void log_formatted(enum logcode c
+@@ -605,10 +606,12 @@ static void log_formatted(enum logcode c
n[3] = !(iflags & ITEM_REPORT_SIZE) ? '.' : 's';
n[4] = !(iflags & ITEM_REPORT_TIME) ? '.'
: !preserve_times || S_ISLNK(file->mode) ? 'T' : 't';
int update_only = 0;
int cvs_exclude = 0;
int dry_run = 0;
-@@ -299,8 +300,9 @@ void usage(enum logcode F)
+@@ -300,8 +301,9 @@ void usage(enum logcode F)
rprintf(F," --devices preserve device files (super-user only)\n");
rprintf(F," --specials preserve special files\n");
rprintf(F," -D same as --devices --specials\n");
rprintf(F," --super receiver attempts super-user activities\n");
rprintf(F," -S, --sparse handle sparse files efficiently\n");
rprintf(F," -n, --dry-run show what would have been transferred\n");
-@@ -412,6 +414,9 @@ static struct poptOption long_options[]
+@@ -414,6 +416,9 @@ static struct poptOption long_options[]
{"times", 't', POPT_ARG_VAL, &preserve_times, 1, 0, 0 },
{"no-times", 0, POPT_ARG_VAL, &preserve_times, 0, 0, 0 },
{"no-t", 0, POPT_ARG_VAL, &preserve_times, 0, 0, 0 },
{"omit-dir-times", 'O', POPT_ARG_VAL, &omit_dir_times, 2, 0, 0 },
{"modify-window", 0, POPT_ARG_INT, &modify_window, OPT_MODIFY_WINDOW, 0, 0 },
{"super", 0, POPT_ARG_VAL, &am_root, 2, 0, 0 },
-@@ -1505,6 +1510,8 @@ void server_options(char **args,int *arg
+@@ -1508,6 +1513,8 @@ void server_options(char **args,int *arg
argstr[x++] = 'D';
if (preserve_times)
argstr[x++] = 't';
extern int orig_umask;
extern int am_root;
extern int am_server;
-@@ -116,6 +117,7 @@ int set_file_attrs(char *fname, struct f
+@@ -125,6 +126,7 @@ int set_file_attrs(char *fname, struct f
int updated = 0;
STRUCT_STAT st2;
int change_uid, change_gid;
if (!st) {
if (dry_run)
-@@ -134,18 +136,33 @@ int set_file_attrs(char *fname, struct f
+@@ -143,18 +145,33 @@ int set_file_attrs(char *fname, struct f
}
}
+ if (!preserve_atimes || S_ISDIR(st->st_mode))
+ flags |= ATTRS_SKIP_ATIME;
if (!(flags & ATTRS_SKIP_MTIME)
-- && cmp_modtime(st->st_mtime, file->modtime) != 0) {
+ && cmp_time(st->st_mtime, file->modtime) != 0) {
- int ret = set_modtime(fname, file->modtime, st->st_mode);
-+ && cmp_time(st->st_mtime, file->modtime) != 0) {
+ mtime = file->modtime;
+ updated = 1;
+ } else
--super receiver attempts super-user activities
-S, --sparse handle sparse files efficiently
-n, --dry-run show what would have been transferred
-@@ -800,6 +801,12 @@ it is preserving modification times (see
+@@ -801,6 +802,12 @@ it is preserving modification times (see
the directories on the receiving side, it is a good idea to use bf(-O).
This option is inferred if you use bf(--backup) without bf(--backup-dir).
dit(bf(--super)) This tells the receiving side to attempt super-user
activities even if the receiving rsync wasn't run by the super-user. These
activities include: preserving users via the bf(--owner) option, preserving
-@@ -1307,8 +1314,8 @@ if the receiving rsync is at least versi
+@@ -1308,8 +1315,8 @@ if the receiving rsync is at least versi
with older versions of rsync, but that also turns on the output of other
verbose messages).
kind of update being done, bf(X) is replaced by the file-type, and the
other letters represent attributes that may be output if they are being
modified.
-@@ -1348,9 +1355,13 @@ quote(itemize(
+@@ -1349,9 +1356,13 @@ quote(itemize(
by the file transfer.
it() A bf(t) means the modification time is different and is being updated
to the sender's value (requires bf(--times)). An alternate value of bf(T)
}
--- old/util.c
+++ new/util.c
-@@ -130,7 +130,7 @@ void overflow_exit(char *str)
-
-
+@@ -125,7 +125,7 @@ void overflow_exit(char *str)
+ exit_cleanup(RERR_MALLOC);
+ }
-int set_modtime(char *fname, time_t modtime, mode_t mode)
+int set_times(char *fname, time_t modtime, time_t atime, mode_t mode)
{
#if !defined HAVE_LUTIMES || !defined HAVE_UTIMES
if (S_ISLNK(mode))
-@@ -138,9 +138,13 @@ int set_modtime(char *fname, time_t modt
+@@ -133,9 +133,13 @@ int set_modtime(char *fname, time_t modt
#endif
if (verbose > 2) {
}
if (dry_run)
-@@ -149,7 +153,7 @@ int set_modtime(char *fname, time_t modt
+@@ -144,7 +148,7 @@ int set_modtime(char *fname, time_t modt
{
#ifdef HAVE_UTIMES
struct timeval t[2];
t[0].tv_usec = 0;
t[1].tv_sec = modtime;
t[1].tv_usec = 0;
-@@ -160,12 +164,12 @@ int set_modtime(char *fname, time_t modt
+@@ -155,12 +159,12 @@ int set_modtime(char *fname, time_t modt
return utimes(fname, t);
#elif defined HAVE_UTIMBUF
struct utimbuf tbuf;
t[1] = modtime;
return utime(fname,t);
#else
-@@ -1183,8 +1187,8 @@ int msleep(int t)
-
-
- /**
-- * Determine if two file modification times are equivalent (either
-- * exact or in the modification timestamp window established by
-+ * Determine if two file times are equivalent (either
-+ * exact or in the timestamp window established by
- * --modify-window).
- *
- * @retval 0 if the times should be treated as the same
-@@ -1193,7 +1197,7 @@ int msleep(int t)
- *
- * @retval -1 if the 2nd is later
- **/
--int cmp_modtime(time_t file1, time_t file2)
-+int cmp_time(time_t file1, time_t file2)
- {
- if (file2 > file1) {
- if (file2 - file1 <= modify_window)
extern int quiet;
extern int module_id;
-extern int msg_fd_out;
+ extern int allow_8bit_chars;
extern int protocol_version;
extern int preserve_times;
- extern int log_format_has_i;
-@@ -74,7 +73,6 @@ struct {
+@@ -75,7 +74,6 @@ struct {
{ RERR_IPC , "error in IPC code" },
{ RERR_CRASHED , "sibling process crashed" },
{ RERR_TERMINATED , "sibling process terminated abnormally" },
{ RERR_SIGNAL , "received SIGINT, SIGTERM, or SIGHUP" },
{ RERR_WAITCHILD , "waitpid() failed" },
{ RERR_MALLOC , "error allocating core memory buffers" },
-@@ -234,8 +232,8 @@ void rwrite(enum logcode code, char *buf
+@@ -232,8 +230,8 @@ void rwrite(enum logcode code, char *buf
if (quiet && code == FINFO)
return;
int am_starting_up = 1;
int orig_umask = 0;
int relative_paths = -1;
-@@ -94,6 +93,7 @@ int am_daemon = 0;
+@@ -95,6 +94,7 @@ int am_daemon = 0;
int daemon_over_rsh = 0;
int do_stats = 0;
int do_progress = 0;
int keep_partial = 0;
int safe_symlinks = 0;
int copy_unsafe_links = 0;
-@@ -1290,6 +1290,7 @@ int parse_arguments(int *argc, const cha
+@@ -1293,6 +1293,7 @@ int parse_arguments(int *argc, const cha
if ((do_progress || dry_run) && !verbose && !log_before_transfer
&& !am_server)
verbose = 1;
extern int log_before_transfer;
extern int log_format_has_i;
extern int daemon_log_format_has_i;
-@@ -219,7 +219,7 @@ static int receive_data(int f_in, char *
+@@ -158,7 +158,7 @@ static int receive_data(int f_in, char *
if (sum.remainder)
sum.flength -= sum.blength - sum.remainder;
for (j = CHUNK_SIZE; j < sum.flength; j += CHUNK_SIZE) {
show_progress(offset, total_size);
sum_update(map_ptr(mapbuf, offset, CHUNK_SIZE),
CHUNK_SIZE);
-@@ -227,7 +227,7 @@ static int receive_data(int f_in, char *
+@@ -166,7 +166,7 @@ static int receive_data(int f_in, char *
}
if (offset < sum.flength) {
int32 len = sum.flength - offset;
show_progress(offset, total_size);
sum_update(map_ptr(mapbuf, offset, len), len);
offset = sum.flength;
-@@ -240,7 +240,7 @@ static int receive_data(int f_in, char *
+@@ -179,7 +179,7 @@ static int receive_data(int f_in, char *
}
while ((i = recv_token(f_in, &data)) != 0) {
show_progress(offset, total_size);
if (i > 0) {
-@@ -308,7 +308,7 @@ static int receive_data(int f_in, char *
+@@ -247,7 +247,7 @@ static int receive_data(int f_in, char *
ftruncate(fd, offset);
#endif
end_progress(total_size);
if (fd != -1 && offset > 0 && sparse_end(fd) != 0) {
-@@ -359,12 +359,12 @@ static void handle_delayed_updates(struc
+@@ -298,12 +298,12 @@ static void handle_delayed_updates(struc
"rename failed for %s (from %s)",
full_fname(fname), partialptr);
} else {
handle_partial_dir(partialptr, PDIR_DELETE);
}
}
-@@ -415,11 +415,6 @@ int recv_files(int f_in, struct file_lis
+@@ -354,11 +354,6 @@ int recv_files(int f_in, struct file_lis
if (verbose > 2)
rprintf(FINFO,"recv_files(%d) starting\n",flist->count);
- }
-
if (delay_updates)
- init_delayed_bits(flist->count);
+ delayed_bits = bitbag_create(flist->count);
-@@ -440,7 +435,7 @@ int recv_files(int f_in, struct file_lis
+@@ -379,7 +374,7 @@ int recv_files(int f_in, struct file_lis
rprintf(FINFO, "recv_files phase=%d\n", phase);
if (phase == 2 && delay_updates)
handle_delayed_updates(flist, local_name);
if (keep_partial && !partial_dir)
make_backups = 0; /* prevents double backup */
if (append_mode) {
-@@ -662,7 +657,7 @@ int recv_files(int f_in, struct file_lis
+@@ -601,7 +596,7 @@ int recv_files(int f_in, struct file_lis
/* log the transfer */
if (log_before_transfer)
log_item(file, &initial_stats, iflags, NULL);
rprintf(FINFO, "%s\n", fname);
/* recv file data */
-@@ -705,11 +700,12 @@ int recv_files(int f_in, struct file_lis
+@@ -644,11 +639,12 @@ int recv_files(int f_in, struct file_lis
cleanup_disable();
if (recv_ok > 0) {
} else if (!recv_ok) {
int msgtype = phase || read_batch ? FERROR : FINFO;
if (msgtype == FERROR || verbose) {
-@@ -731,10 +727,8 @@ int recv_files(int f_in, struct file_lis
+@@ -670,10 +666,8 @@ int recv_files(int f_in, struct file_lis
"%s: %s failed verification -- update %s%s.\n",
errstr, fname, keptstr, redostr);
}
extern int am_sender;
-extern int am_generator;
extern int am_starting_up;
+ extern int allow_8bit_chars;
extern int preserve_uid;
- extern int preserve_gid;
-@@ -291,5 +290,5 @@ const char *who_am_i(void)
+@@ -300,5 +299,5 @@ const char *who_am_i(void)
{
if (am_starting_up)
return am_server ? "server" : "client";
--- old/util.c
+++ new/util.c
-@@ -413,51 +413,6 @@ int robust_rename(char *from, char *to,
+@@ -404,49 +404,6 @@ int robust_rename(char *from, char *to,
return -1;
}
--
-static pid_t all_pids[10];
-static int num_pids;
-
- kill(p, sig);
- }
-}
--
-
/** Turn a user name into a uid */
int name_to_uid(char *name, uid_t *uid)