}
static bool
-appendfilepath(const char *path, const size_t len)
+appendfpath(const char *path, const size_t len)
{
if ((copybufpos >= copybuflen) || ((len + 3) > (copybuflen - copybufpos))) {
copybuflen += PATH_MAX;
static char oldname[NAME_MAX + 1] __attribute__ ((aligned));
char *dir, *tmp, *run = NULL, *env = NULL;
struct stat sb;
- int r, fd, presel, copystartid = 0, copyendid = 0;
+ int r, fd, presel, ncp, copystartid = 0, copyendid = 0;
enum action sel = SEL_RUNARG + 1;
bool dir_changed = FALSE;
else if (ndents) {
if (cfg.copymode) {
r = mkpath(path, dents[cur].name, newpath, PATH_MAX);
- if (!appendfilepath(newpath, r))
+ if (!appendfpath(newpath, r))
goto nochange;
+ ++ncp;
printmsg(newpath);
} else if (cfg.quote) {
g_buf[0] = '\'';
g_crc = crc8fast((uchar *)dents, ndents * sizeof(struct entry));
copystartid = cur;
copybufpos = 0;
+ ncp = 0;
printmsg("multi-copy on");
DPRINTF_S("copymode on");
} else {
- static size_t len;
- len = 0;
-
- /* Handle range selection */
- if (copybufpos == 0) {
-
+ if (!ncp) { /* Handle range selection */
if (cur < copystartid) {
copyendid = copystartid;
copystartid = cur;
copyendid = cur;
if (copystartid < copyendid) {
- for (r = copystartid; r <= copyendid; ++r) {
- len = mkpath(path, dents[r].name, newpath, PATH_MAX);
- if (!appendfilepath(newpath, len))
- goto nochange;;
- }
+ for (r = copystartid; r <= copyendid; ++r)
+ if (!appendfpath(newpath, mkpath(path, dents[r].name, newpath, PATH_MAX)))
+ goto nochange;
snprintf(newpath, PATH_MAX, "%d files copied", copyendid - copystartid + 1);
printmsg(newpath);
}
}
- if (copybufpos) {
+ if (copybufpos) { /* File path(s) written to the buffer */
if (cfg.noxdisplay)
writecp(pcopybuf, copybufpos - 1); /* Truncate NULL from end */
else
spawn(copier, pcopybuf, NULL, NULL, F_NOTRACE);
- if (!len)
- printmsg("files copied");
+
+ if (ncp) /* Some files cherry picked */
+ {
+ snprintf(newpath, PATH_MAX, "%d files copied", ncp);
+ printmsg(newpath);
+ }
} else
printmsg("multi-copy off");
}