./configure
make
-based-on: 974f49e22ac9f62fcfd750768d0835b900524578
+based-on: c3cf174e5ed52e709ecdfd65c7d5da34c7574b96
diff --git a/.gitignore b/.gitignore
--- a/.gitignore
+++ b/.gitignore
extern int preserve_hard_links;
extern int protocol_version;
+extern int always_checksum;
+ extern int mkpath_dest_arg;
extern int file_total;
extern int recurse;
- extern int xfer_dirs;
-@@ -92,6 +94,7 @@ extern char *logfile_format;
+@@ -93,6 +95,7 @@ extern char *logfile_format;
extern char *filesfrom_host;
extern char *partial_dir;
extern char *rsync_path;
extern char *shell_cmd;
extern char *password_file;
extern char *backup_dir;
-@@ -1201,6 +1204,9 @@ void start_server(int f_in, int f_out, int argc, char *argv[])
+@@ -1219,6 +1222,9 @@ void start_server(int f_in, int f_out, int argc, char *argv[])
if (am_daemon && io_timeout && protocol_version >= 31)
send_msg_int(MSG_IO_TIMEOUT, io_timeout);
if (am_sender) {
keep_dirlinks = 0; /* Must be disabled on the sender. */
if (need_messages_from_generator)
-@@ -1484,6 +1490,9 @@ static int start_client(int argc, char *argv[])
+@@ -1502,6 +1508,9 @@ static int start_client(int argc, char *argv[])
else
env_port = rsync_port;
int eol_nulls = 0;
int protect_args = -1;
int human_readable = 1;
-@@ -107,6 +109,9 @@ int recurse = 0;
+@@ -108,6 +110,9 @@ int mkpath_dest_arg = 0;
int allow_inc_recurse = 1;
int xfer_dirs = -1;
int am_daemon = 0;
int connect_timeout = 0;
int keep_partial = 0;
int safe_symlinks = 0;
-@@ -289,6 +294,7 @@ static struct output_struct debug_words[COUNT_DEBUG+1] = {
+@@ -290,6 +295,7 @@ static struct output_struct debug_words[COUNT_DEBUG+1] = {
DEBUG_WORD(CHDIR, W_CLI|W_SRV, "Debug when the current directory changes"),
DEBUG_WORD(CONNECT, W_CLI, "Debug connection events (levels 1-2)"),
DEBUG_WORD(CMD, W_CLI, "Debug commands+options that are issued (levels 1-2)"),
DEBUG_WORD(DEL, W_REC, "Debug delete actions (levels 1-3)"),
DEBUG_WORD(DELTASUM, W_SND|W_REC, "Debug delta-transfer checksumming (levels 1-4)"),
DEBUG_WORD(DUP, W_REC, "Debug weeding of duplicate names"),
-@@ -676,6 +682,16 @@ static void print_info_flags(enum logcode f)
+@@ -682,6 +688,16 @@ static void print_info_flags(enum logcode f)
#endif
"crtimes",
"*Optimizations",
#ifndef HAVE_SIMD
-@@ -789,6 +805,7 @@ enum {OPT_SERVER = 1000, OPT_DAEMON, OPT_SENDER, OPT_EXCLUDE, OPT_EXCLUDE_FROM,
+@@ -795,6 +811,7 @@ enum {OPT_SERVER = 1000, OPT_DAEMON, OPT_SENDER, OPT_EXCLUDE, OPT_EXCLUDE_FROM,
OPT_INCLUDE, OPT_INCLUDE_FROM, OPT_MODIFY_WINDOW, OPT_MIN_SIZE, OPT_CHMOD,
OPT_READ_BATCH, OPT_WRITE_BATCH, OPT_ONLY_WRITE_BATCH, OPT_MAX_SIZE,
OPT_NO_D, OPT_APPEND, OPT_NO_ICONV, OPT_INFO, OPT_DEBUG, OPT_BLOCK_SIZE,
OPT_USERMAP, OPT_GROUPMAP, OPT_CHOWN, OPT_BWLIMIT,
OPT_OLD_COMPRESS, OPT_NEW_COMPRESS, OPT_NO_COMPRESS,
OPT_STOP_AFTER, OPT_STOP_AT,
-@@ -944,6 +961,10 @@ static struct poptOption long_options[] = {
+@@ -950,6 +967,10 @@ static struct poptOption long_options[] = {
{"no-c", 0, POPT_ARG_VAL, &always_checksum, 0, 0, 0 },
{"checksum-choice", 0, POPT_ARG_STRING, &checksum_choice, 0, 0, 0 },
{"cc", 0, POPT_ARG_STRING, &checksum_choice, 0, 0, 0 },
{"block-size", 'B', POPT_ARG_STRING, 0, OPT_BLOCK_SIZE, 0, 0 },
{"compare-dest", 0, POPT_ARG_STRING, 0, OPT_COMPARE_DEST, 0, 0 },
{"copy-dest", 0, POPT_ARG_STRING, 0, OPT_COPY_DEST, 0, 0 },
-@@ -1038,6 +1059,9 @@ static struct poptOption long_options[] = {
+@@ -1046,6 +1067,9 @@ static struct poptOption long_options[] = {
{"dparam", 0, POPT_ARG_STRING, 0, OPT_DAEMON, 0, 0 },
{"detach", 0, POPT_ARG_NONE, 0, OPT_DAEMON, 0, 0 },
{"no-detach", 0, POPT_ARG_NONE, 0, OPT_DAEMON, 0, 0 },
{0,0,0,0, 0, 0, 0}
};
-@@ -1078,6 +1102,39 @@ static struct poptOption long_daemon_options[] = {
+@@ -1086,6 +1110,39 @@ static struct poptOption long_daemon_options[] = {
{0,0,0,0, 0, 0, 0}
};
static char err_buf[200];
-@@ -1203,6 +1260,8 @@ static void set_refuse_options(void)
+@@ -1211,6 +1268,8 @@ static void set_refuse_options(void)
parse_one_refuse_match(0, "iconv", list_end);
#endif
parse_one_refuse_match(0, "log-file*", list_end);
}
#ifndef SUPPORT_ATIMES
-@@ -1510,6 +1569,102 @@ static void create_refuse_error(int which)
+@@ -1518,6 +1577,102 @@ static void create_refuse_error(int which)
snprintf(err_buf + n, sizeof err_buf - n, " (-%c)\n", op->shortName);
}
/* This is used to make sure that --daemon & --server cannot be aliased to
* something else. These options have always disabled popt aliases for the
* parsing of a daemon or server command-line, but we have to make sure that
-@@ -1566,6 +1721,12 @@ int parse_arguments(int *argc_p, const char ***argv_p)
+@@ -1574,6 +1729,12 @@ int parse_arguments(int *argc_p, const char ***argv_p)
return 0;
}
set_refuse_options();
#ifdef ICONV_OPTION
-@@ -1684,6 +1845,12 @@ int parse_arguments(int *argc_p, const char ***argv_p)
+@@ -1692,6 +1853,12 @@ int parse_arguments(int *argc_p, const char ***argv_p)
am_daemon = 1;
return 1;
case OPT_MODIFY_WINDOW:
/* The value has already been set by popt, but
* we need to remember that we're using a
-@@ -1756,6 +1923,10 @@ int parse_arguments(int *argc_p, const char ***argv_p)
+@@ -1764,6 +1931,10 @@ int parse_arguments(int *argc_p, const char ***argv_p)
preserve_devices = preserve_specials = 0;
break;
diff --git a/rsync.1.md b/rsync.1.md
--- a/rsync.1.md
+++ b/rsync.1.md
-@@ -383,6 +383,9 @@ detailed description below for a complete description.
+@@ -384,6 +384,9 @@ detailed description below for a complete description.
--dry-run, -n perform a trial run with no changes made
--whole-file, -W copy files whole (w/o delta-xfer algorithm)
--checksum-choice=STR choose the checksum algorithm (aka --cc)
a file that can't use it, while missing out on giving it to a file
that could use it.
-based-on: 194cee671d5e178f20c4494f41911fa8db942935
+based-on: c3cf174e5ed52e709ecdfd65c7d5da34c7574b96
diff --git a/backup.c b/backup.c
--- a/backup.c
+++ b/backup.c
extern int protect_args;
extern int preserve_uid;
extern int preserve_gid;
-@@ -156,6 +157,7 @@ void set_allow_inc_recurse(void)
+@@ -159,6 +160,7 @@ void set_allow_inc_recurse(void)
allow_inc_recurse = 0;
else if (!am_sender
&& (delete_before || delete_after
diff --git a/flist.c b/flist.c
--- a/flist.c
+++ b/flist.c
-@@ -63,6 +63,7 @@ extern int non_perishable_cnt;
+@@ -64,6 +64,7 @@ extern int non_perishable_cnt;
extern int prune_empty_dirs;
extern int copy_links;
extern int copy_unsafe_links;
extern int protocol_version;
extern int sanitize_paths;
extern int munge_symlinks;
-@@ -129,6 +130,8 @@ static int64 tmp_dev = -1, tmp_ino;
+@@ -130,6 +131,8 @@ static int64 tmp_dev = -1, tmp_ino;
#endif
static char tmp_sum[MAX_DIGEST_LEN];
static char empty_sum[MAX_DIGEST_LEN];
static int flist_count_offset; /* for --delete --progress */
static int show_filelist_progress;
-@@ -275,6 +278,45 @@ static inline int is_excluded(const char *fname, int is_dir, int filter_level)
+@@ -277,6 +280,45 @@ static inline int is_excluded(const char *fname, int is_dir, int filter_level)
return name_is_excluded(fname, is_dir ? NAME_IS_DIR : NAME_IS_FILE, filter_level);
}
static void send_directory(int f, struct file_list *flist,
char *fbuf, int len, int flags);
-@@ -2623,6 +2665,23 @@ struct file_list *recv_file_list(int f, int dir_ndx)
+@@ -2674,6 +2716,23 @@ struct file_list *recv_file_list(int f, int dir_ndx)
* for a non-relative transfer in recv_file_entry(). */
flist_sort_and_clean(flist, relative_paths);
static inline int mtime_differs(STRUCT_STAT *stp, struct file_struct *file)
{
#ifdef ST_MTIME_NSEC
-@@ -1164,6 +1305,7 @@ static void list_file_entry(struct file_struct *f)
+@@ -1187,6 +1328,7 @@ static void list_file_entry(struct file_struct *f)
}
}
static int phase = 0;
static int dflt_perms;
-@@ -1294,7 +1436,7 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
+@@ -1323,7 +1465,7 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
&& do_stat(dn, &sx.st) < 0) {
if (dry_run)
goto parent_is_dry_missing;
rsyserr(FERROR_XFER, errno,
"recv_generator: mkdir %s failed",
full_fname(dn));
-@@ -1430,7 +1572,7 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
+@@ -1459,7 +1601,7 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
}
if (real_ret != 0 && do_mkdir(fname,file->mode|added_perms) < 0 && errno != EEXIST) {
if (!relative_paths || errno != ENOENT
|| (do_mkdir(fname, file->mode|added_perms) < 0 && errno != EEXIST)) {
rsyserr(FERROR_XFER, errno,
"recv_generator: mkdir %s failed",
-@@ -1478,9 +1620,12 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
+@@ -1507,9 +1649,12 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
}
else if (delete_during && f_out != -1 && !phase
&& !(file->flags & FLAG_MISSING_DIR)) {
change_local_filter_dir(fname, strlen(fname), F_DEPTH(file));
}
prior_dir_file = file;
-@@ -1757,8 +1902,14 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
+@@ -1786,8 +1931,14 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
goto cleanup;
}
#endif
rsyserr(FERROR_XFER, stat_errno, "recv_generator: failed to stat %s",
full_fname(fname));
goto cleanup;
-@@ -2222,6 +2373,12 @@ void generate_files(int f_out, const char *local_name)
+@@ -2251,6 +2402,12 @@ void generate_files(int f_out, const char *local_name)
if (DEBUG_GTE(GENR, 1))
rprintf(FINFO, "generator starting pid=%d\n", (int)getpid());
if (delete_before && !solo_file && cur_flist->used > 0)
do_delete_pass();
if (delete_during == 2) {
-@@ -2230,7 +2387,7 @@ void generate_files(int f_out, const char *local_name)
+@@ -2259,7 +2416,7 @@ void generate_files(int f_out, const char *local_name)
}
info_levels[INFO_FLIST] = info_levels[INFO_PROGRESS] = 0;
whole_file = 0;
if (DEBUG_GTE(FLIST, 1)) {
rprintf(FINFO, "delta-transmission %s\n",
-@@ -2266,7 +2423,7 @@ void generate_files(int f_out, const char *local_name)
+@@ -2295,7 +2452,7 @@ void generate_files(int f_out, const char *local_name)
dirdev = MAKEDEV(DEV_MAJOR(devp), DEV_MINOR(devp));
} else
dirdev = MAKEDEV(0, 0);
} else
change_local_filter_dir(fbuf, strlen(fbuf), F_DEPTH(fp));
}
-@@ -2313,7 +2470,21 @@ void generate_files(int f_out, const char *local_name)
+@@ -2342,7 +2499,21 @@ void generate_files(int f_out, const char *local_name)
} while ((cur_flist = cur_flist->next) != NULL);
if (delete_during)
diff --git a/options.c b/options.c
--- a/options.c
+++ b/options.c
-@@ -87,6 +87,7 @@ int am_server = 0;
+@@ -88,6 +88,7 @@ int am_server = 0;
int am_sender = 0;
int am_starting_up = 1;
int relative_paths = -1;
int implied_dirs = 1;
int missing_args = 0; /* 0 = FERROR_XFER, 1 = ignore, 2 = delete */
int numeric_ids = 0;
-@@ -932,6 +933,7 @@ static struct poptOption long_options[] = {
+@@ -954,6 +955,7 @@ static struct poptOption long_options[] = {
{"compare-dest", 0, POPT_ARG_STRING, 0, OPT_COMPARE_DEST, 0, 0 },
{"copy-dest", 0, POPT_ARG_STRING, 0, OPT_COPY_DEST, 0, 0 },
{"link-dest", 0, POPT_ARG_STRING, 0, OPT_LINK_DEST, 0, 0 },
{"fuzzy", 'y', POPT_ARG_NONE, 0, 'y', 0, 0 },
{"no-fuzzy", 0, POPT_ARG_VAL, &fuzzy_basis, 0, 0, 0 },
{"no-y", 0, POPT_ARG_VAL, &fuzzy_basis, 0, 0, 0 },
-@@ -2344,7 +2346,7 @@ int parse_arguments(int *argc_p, const char ***argv_p)
+@@ -2561,7 +2563,7 @@ int parse_arguments(int *argc_p, const char ***argv_p)
inplace = 1;
}
partial_dir = tmp_partialdir;
if (inplace) {
-@@ -2353,6 +2355,7 @@ int parse_arguments(int *argc_p, const char ***argv_p)
+@@ -2570,6 +2572,7 @@ int parse_arguments(int *argc_p, const char ***argv_p)
snprintf(err_buf, sizeof err_buf,
"--%s cannot be used with --%s\n",
append_mode ? "append" : "inplace",
delay_updates ? "delay-updates" : "partial-dir");
return 0;
}
-@@ -2755,6 +2758,8 @@ void server_options(char **args, int *argc_p)
+@@ -2982,6 +2985,8 @@ void server_options(char **args, int *argc_p)
args[ac++] = "--super";
if (size_only)
args[ac++] = "--size-only";
diff --git a/rsync.1.md b/rsync.1.md
--- a/rsync.1.md
+++ b/rsync.1.md
-@@ -419,6 +419,7 @@ detailed description below for a complete description.
+@@ -421,6 +421,7 @@ detailed description below for a complete description.
--modify-window=NUM, -@ set the accuracy for mod-time comparisons
--temp-dir=DIR, -T create temporary files in directory DIR
--fuzzy, -y find similar file for basis if no dest file
--compare-dest=DIR also compare destination files relative to DIR
--copy-dest=DIR ... and include copies of unchanged files
--link-dest=DIR hardlink to files in DIR when unchanged
-@@ -2198,6 +2199,22 @@ your home directory (remove the '=' for that).
+@@ -2237,6 +2238,22 @@ your home directory (remove the '=' for that).
fuzzy-match files, so either use `--delete-after` or specify some filename
exclusions if you need to prevent this.
diff --git a/rsync.h b/rsync.h
--- a/rsync.h
+++ b/rsync.h
-@@ -270,7 +270,7 @@ enum msgcode {
+@@ -272,7 +272,7 @@ enum msgcode {
#define NDX_DEL_STATS -3
#define NDX_FLIST_OFFSET -101
#define DEL_NO_UID_WRITE (1<<0) /* file/dir has our uid w/o write perm */
#define DEL_RECURSE (1<<1) /* if dir, delete all contents */
#define DEL_DIR_IS_EMPTY (1<<2) /* internal delete_FUNCTIONS use only */
-@@ -280,6 +280,7 @@ enum msgcode {
+@@ -282,6 +282,7 @@ enum msgcode {
#define DEL_FOR_DEVICE (1<<6) /* making room for a replacement device */
#define DEL_FOR_SPECIAL (1<<7) /* making room for a replacement special */
#define DEL_FOR_BACKUP (1<<8) /* the delete is for a backup operation */
./configure (optional if already run)
make
-based-on: 974f49e22ac9f62fcfd750768d0835b900524578
+based-on: c3cf174e5ed52e709ecdfd65c7d5da34c7574b96
diff --git a/compat.c b/compat.c
--- a/compat.c
+++ b/compat.c
extern int dry_run;
extern int list_only;
-@@ -57,6 +60,7 @@ extern int copy_unsafe_links;
- extern int keep_dirlinks;
- extern int preserve_hard_links;
- extern int protocol_version;
+@@ -48,6 +51,7 @@ extern int called_from_signal_handler;
+ extern int need_messages_from_generator;
+ extern int kluge_around_eof;
+ extern int got_xfer_error;
+extern int force_change;
- extern int file_total;
- extern int recurse;
- extern int xfer_dirs;
-@@ -947,6 +951,22 @@ static int do_recv(int f_in, int f_out, char *local_name)
+ extern int msgs2stderr;
+ extern int module_id;
+ extern int read_only;
+@@ -965,6 +969,22 @@ static int do_recv(int f_in, int f_out, char *local_name)
* points to an identical file won't be replaced by the referent. */
copy_links = copy_dirlinks = copy_unsafe_links = 0;
int preserve_devices = 0;
int preserve_specials = 0;
@@ -94,6 +95,7 @@ int numeric_ids = 0;
- int msgs2stderr = 0;
+ int msgs2stderr = 2; /* Default: send errors to stderr for local & remote-shell transfers */
int allow_8bit_chars = 0;
int force_delete = 0;
+int force_change = 0;
int io_timeout = 0;
int prune_empty_dirs = 0;
int use_qsort = 0;
-@@ -676,6 +678,11 @@ static void print_info_flags(enum logcode f)
+@@ -682,6 +684,11 @@ static void print_info_flags(enum logcode f)
#endif
"crtimes",
"*Optimizations",
#ifndef HAVE_SIMD
-@@ -829,6 +836,8 @@ static struct poptOption long_options[] = {
+@@ -835,6 +842,8 @@ static struct poptOption long_options[] = {
{"perms", 'p', POPT_ARG_VAL, &preserve_perms, 1, 0, 0 },
{"no-perms", 0, POPT_ARG_VAL, &preserve_perms, 0, 0, 0 },
{"no-p", 0, POPT_ARG_VAL, &preserve_perms, 0, 0, 0 },
{"executability", 'E', POPT_ARG_NONE, &preserve_executability, 0, 0, 0 },
{"acls", 'A', POPT_ARG_NONE, 0, 'A', 0, 0 },
{"no-acls", 0, POPT_ARG_VAL, &preserve_acls, 0, 0, 0 },
-@@ -926,6 +935,12 @@ static struct poptOption long_options[] = {
+@@ -932,6 +941,12 @@ static struct poptOption long_options[] = {
{"remove-source-files",0,POPT_ARG_VAL, &remove_source_files, 1, 0, 0 },
{"force", 0, POPT_ARG_VAL, &force_delete, 1, 0, 0 },
{"no-force", 0, POPT_ARG_VAL, &force_delete, 0, 0, 0 },
{"ignore-errors", 0, POPT_ARG_VAL, &ignore_errors, 1, 0, 0 },
{"no-ignore-errors", 0, POPT_ARG_VAL, &ignore_errors, 0, 0, 0 },
{"max-delete", 0, POPT_ARG_INT, &max_delete, 0, 0, 0 },
-@@ -1223,6 +1238,14 @@ static void set_refuse_options(void)
+@@ -1231,6 +1246,14 @@ static void set_refuse_options(void)
#ifndef SUPPORT_CRTIMES
parse_one_refuse_match(0, "crtimes", list_end);
#endif
/* Now we use the descrip values to actually mark the options for refusal. */
for (op = long_options; op != list_end; op++) {
-@@ -2860,6 +2883,9 @@ void server_options(char **args, int *argc_p)
+@@ -2868,6 +2891,9 @@ void server_options(char **args, int *argc_p)
if (xfer_dirs && !recurse && delete_mode && am_sender)
args[ac++] = "--no-r";
if (do_compression && do_compression_level != CLVL_NOT_SPECIFIED) {
if (asprintf(&arg, "--compress-level=%d", do_compression_level) < 0)
goto oom;
-@@ -2963,6 +2989,16 @@ void server_options(char **args, int *argc_p)
+@@ -2976,6 +3002,16 @@ void server_options(char **args, int *argc_p)
args[ac++] = "--delete-excluded";
if (force_delete)
args[ac++] = "--force";
diff --git a/rsync.1.md b/rsync.1.md
--- a/rsync.1.md
+++ b/rsync.1.md
-@@ -360,6 +360,7 @@ detailed description below for a complete description.
+@@ -361,6 +361,7 @@ detailed description below for a complete description.
--keep-dirlinks, -K treat symlinked dir on receiver as dir
--hard-links, -H preserve hard links
--perms, -p preserve permissions
--executability, -E preserve executability
--chmod=CHMOD affect file and/or directory permissions
--acls, -A preserve ACLs (implies --perms)
-@@ -400,7 +401,10 @@ detailed description below for a complete description.
+@@ -401,7 +402,10 @@ detailed description below for a complete description.
--ignore-missing-args ignore missing source args without error
--delete-missing-args delete missing source args from destination
--ignore-errors delete even if there are I/O errors
--max-delete=NUM don't delete more than NUM files
--max-size=SIZE don't transfer any file larger than SIZE
--min-size=SIZE don't transfer any file smaller than SIZE
-@@ -703,6 +707,8 @@ your home directory (remove the '=' for that).
+@@ -708,6 +712,8 @@ your home directory (remove the '=' for that).
Note that `-a` **does not preserve hardlinks**, because finding
multiply-linked files is expensive. You must separately specify `-H`.
0. `--no-OPTION`
-@@ -1041,7 +1047,7 @@ your home directory (remove the '=' for that).
+@@ -1066,7 +1072,7 @@ your home directory (remove the '=' for that).
Without this option, if the sending side has replaced a directory with a
symlink to a directory, the receiving side will delete anything that is in
the way of the new symlink, including a directory hierarchy (as long as
See also `--keep-dirlinks` for an analogous option for the receiving side.
-@@ -1227,6 +1233,29 @@ your home directory (remove the '=' for that).
+@@ -1252,6 +1258,29 @@ your home directory (remove the '=' for that).
those used by `--fake-super`) unless you repeat the option (e.g. `-XX`).
This "copy all xattrs" mode cannot be used with `--fake-super`.
0. `--chmod=CHMOD`
This option tells rsync to apply one or more comma-separated "chmod" modes
-@@ -1694,7 +1723,7 @@ your home directory (remove the '=' for that).
+@@ -1719,7 +1748,7 @@ your home directory (remove the '=' for that).
option a step farther: each missing arg will become a deletion request of
the corresponding destination file on the receiving side (should it exist).
If the destination file is a non-empty directory, it will only be
that, this option is independent of any other type of delete processing.
The missing source files are represented by special file-list entries which
-@@ -1705,15 +1734,16 @@ your home directory (remove the '=' for that).
+@@ -1730,15 +1759,16 @@ your home directory (remove the '=' for that).
Tells `--delete` to go ahead and delete files even when there are I/O
errors.
0. `--max-delete=NUM`
-@@ -2626,7 +2656,7 @@ your home directory (remove the '=' for that).
+@@ -2651,7 +2681,7 @@ your home directory (remove the '=' for that).
output of other verbose messages).
The "%i" escape has a cryptic output that is 11 letters long. The general