X-Git-Url: https://git.distorted.org.uk/~mdw/sgt/putty/blobdiff_plain/b65b8aaea82eb57b726e495b53f6c192d0601625..3d541627ca0436e710c73b78ee9bf479141719cd:/scp.c diff --git a/scp.c b/scp.c index 075b731b..ac232fa5 100644 --- a/scp.c +++ b/scp.c @@ -164,7 +164,7 @@ static void print_stats(char *name, unsigned long size, unsigned long done, eta = size - done; else eta = (unsigned long) ((size - done) / ratebs); - sprintf(etastr, "%02d:%02d:%02d", + sprintf(etastr, "%02ld:%02ld:%02ld", eta / 3600, (eta % 3600) / 60, eta % 60); pct = (int) (100.0 * (float) done / size); @@ -277,10 +277,25 @@ static void source(char *src) } if ((attr & FILE_ATTRIBUTE_DIRECTORY) != 0) { - if (recursive) - rsource(src); - else + if (recursive) { + /* + * Avoid . and .. directories. + */ + char *p; + p = strrchr(src, '/'); + if (!p) + p = strrchr(src, '\\'); + if (!p) + p = src; + else + p++; + if (!strcmp(p, ".") || !strcmp(p, "..")) + /* skip . and .. */; + else + rsource(src); + } else { run_err("%s: not a regular file", src); + } return; } @@ -457,7 +472,7 @@ static void sink(char *targ) ssh_send("", 1); return; case 'T': - if (sscanf(buf, "T%d %*d %d %*d", + if (sscanf(buf, "T%ld %*d %ld %*d", &mtime, &atime) == 2) { settime = 1; ssh_send("", 1); @@ -471,7 +486,7 @@ static void sink(char *targ) bump("Protocol error: Expected control record"); } - if (sscanf(buf+1, "%u %u %[^\n]", &mode, &size, namebuf) != 3) + if (sscanf(buf+1, "%u %lu %[^\n]", &mode, &size, namebuf) != 3) bump("Protocol error: Illegal file descriptor format"); if (targisdir) { char t[2048];