int preserve_uid = 0;
int preserve_gid = 0;
int preserve_times = 0;
-int omit_dir_times = 0;
int update_only = 0;
int cvs_exclude = 0;
int dry_run = 0;
struct chmod_mode_struct *chmod_modes = NULL;
static int daemon_opt; /* sets am_daemon after option error-reporting */
+static int omit_dir_times = 0;
static int F_option_cnt = 0;
static int modify_window_set;
static int itemize_changes = 0;
{"xattrs", 'X', POPT_ARG_NONE, 0, 'X', 0, 0 },
{"no-xattrs", 0, POPT_ARG_VAL, &preserve_xattrs, 0, 0, 0 },
{"no-X", 0, POPT_ARG_VAL, &preserve_xattrs, 0, 0, 0 },
- {"times", 't', POPT_ARG_VAL, &preserve_times, 1, 0, 0 },
+ {"times", 't', POPT_ARG_VAL, &preserve_times, 2, 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 },
+ {"omit-dir-times", 'O', POPT_ARG_VAL, &omit_dir_times, 1, 0, 0 },
+ {"no-omit-dir-times",0, POPT_ARG_VAL, &omit_dir_times, 0, 0, 0 },
+ {"no-O", 0, POPT_ARG_VAL, &omit_dir_times, 0, 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 },
{"no-super", 0, POPT_ARG_VAL, &am_root, 0, 0, 0 },
*
* @retval 0 on error, with err_buf containing an explanation
**/
-int parse_arguments(int *argc, const char ***argv, int frommain)
+int parse_arguments(int *argc_p, const char ***argv_p, int frommain)
{
- int opt;
- char *ref = lp_refuse_options(module_id);
- const char *arg;
poptContext pc;
+ char *ref = lp_refuse_options(module_id);
+ const char *arg, **argv = *argv_p;
+ int argc = *argc_p;
+ int opt;
if (ref && *ref)
set_refuse_options(ref);
/* Disable popt aliases on the server side and
* then start parsing the options again. */
poptFreeContext(pc);
- pc = poptGetContext(RSYNC_NAME, *argc, *argv,
+ pc = poptGetContext(RSYNC_NAME, argc, argv,
long_options, 0);
am_server = 1;
}
iconv_opt = NULL;
#endif
poptFreeContext(pc);
- pc = poptGetContext(RSYNC_NAME, *argc, *argv,
+ pc = poptGetContext(RSYNC_NAME, argc, argv,
long_daemon_options, 0);
while ((opt = poptGetNextOpt(pc)) != -1) {
switch (opt) {
exit_cleanup(RERR_SYNTAX);
}
- *argv = poptGetArgs(pc);
- *argc = count_args(*argv);
+ *argv_p = argv = poptGetArgs(pc);
+ *argc_p = argc = count_args(argv);
am_starting_up = 0;
daemon_opt = 0;
am_daemon = 1;
preserve_links = 1;
#endif
preserve_perms = 1;
- preserve_times = 1;
+ preserve_times = 2;
preserve_gid = 1;
preserve_uid = 1;
preserve_devices = 1;
}
}
- if (human_readable && *argc == 2) {
+ if (human_readable && argc == 2) {
/* Allow the old meaning of 'h' (--help) on its own. */
usage(FINFO);
exit_cleanup(0);
need_messages_from_generator = 1;
}
- *argv = poptGetArgs(pc);
- *argc = count_args(*argv);
+ *argv_p = argv = poptGetArgs(pc);
+ *argc_p = argc = count_args(argv);
if (sanitize_paths) {
int i;
- for (i = *argc; i-- > 0; )
- (*argv)[i] = sanitize_path(NULL, (*argv)[i], "", 0, NULL);
+ for (i = argc; i-- > 0; )
+ argv[i] = sanitize_path(NULL, argv[i], "", 0, NULL);
if (tmpdir)
tmpdir = sanitize_path(NULL, tmpdir, NULL, 0, NULL);
if (backup_dir)
"P *%s", backup_suffix);
parse_rule(&filter_list, backup_dir_buf, 0, 0);
}
- if (make_backups && !backup_dir)
- omit_dir_times = 1;
+
+ if (make_backups && !backup_dir) {
+ omit_dir_times = 0; /* Implied, so avoid -O to sender. */
+ if (preserve_times > 1)
+ preserve_times = 1;
+ } else if (omit_dir_times) {
+ if (preserve_times > 1)
+ preserve_times = 1;
+ }
if (stdout_format) {
if (am_server && log_format_has(stdout_format, 'I'))
if (files_from) {
char *h, *p;
int q;
- if (*argc > 2 || (!am_daemon && *argc == 1)) {
+ if (argc > 2 || (!am_daemon && argc == 1)) {
usage(FERROR);
exit_cleanup(RERR_SYNTAX);
}
* behave, and also filtering out options that are processed only
* locally.
**/
-void server_options(char **args,int *argc)
+void server_options(char **args, int *argc_p)
{
static char argstr[64];
- int ac = *argc;
+ int ac = *argc_p;
char *arg;
int i, x;
if (daemon_over_rsh > 0) {
args[ac++] = "--daemon";
- *argc = ac;
+ *argc_p = ac;
/* if we're passing --daemon, we're done */
return;
}
argstr[x++] = 'K';
if (prune_empty_dirs)
argstr[x++] = 'm';
- if (omit_dir_times == 2)
+ if (omit_dir_times)
argstr[x++] = 'O';
} else {
if (copy_links)
else if (remove_source_files)
args[ac++] = "--remove-sent-files";
- *argc = ac;
+ *argc_p = ac;
return;
oom: