/** Copy a file.
*
- * This is used in conjunction with the --temp-dir and --backup options */
+ * This is used in conjunction with the --temp-dir, --backup, and
+ * --copy-dest options. */
int copy_file(char *source, char *dest, mode_t mode)
{
int ifd;
ndx = (ndx + 1) % MAX_SAFE_NAMES;
for (t = fbuf[ndx]; *fname; fname++) {
- if (!isprint(*fname))
+ if (!isprint(*(uchar*)fname))
*t++ = '?';
else
*t++ = *fname;
p1 = p2 = "";
else {
p1 = curr_dir;
- p2 = "/";
+ for (p2 = p1; *p2 == '/'; p2++) {}
+ if (*p2)
+ p2 = "/";
}
if (module_id >= 0) {
m1 = " (in ";
m2 = lp_name(module_id);
m3 = ")";
- if (*p1) {
+ if (p1 == curr_dir) {
if (!lp_use_chroot(module_id)) {
char *p = lp_path(module_id);
if (*p != '/' || p[1])
p1 += strlen(p);
}
- if (!*p1)
- p2++;
- else
- p1++;
}
- else
- fn++;
} else
m1 = m2 = m3 = "";
break;
s_len = fn_len - (s - fn);
fn_len = s - fn;
- if (s_len == 3) {
+ if (s_len == 4) {
if (strcmp(s+1, "bak") == 0
|| strcmp(s+1, "old") == 0)
continue;
- } else if (s_len == 4) {
+ } else if (s_len == 5) {
if (strcmp(s+1, "orig") == 0)
continue;
} else if (s_len > 2 && had_tilde
- && s[1] == '~' && isdigit(s[2]))
+ && s[1] == '~' && isdigit(*(uchar*)(s+2)))
continue;
*len_ptr = s_len;
suf = s;
break;
/* Determine if the suffix is all digits. */
for (s++, s_len--; s_len > 0; s++, s_len--) {
- if (!isdigit(*s))
+ if (!isdigit(*(uchar*)s))
return suf;
}
/* An all-digit suffix may not be that signficant. */