X-Git-Url: https://asedeno.scripts.mit.edu/gitweb/?a=blobdiff_plain;f=scp.c;h=ac232fa5ae376f3c6c52c5b7808f469222b750c7;hb=5176e1e9bbdc6620a115da0f92ca2282a6714721;hp=1b9bcee0e28494333ebfbccd7a5e7691aef8f72c;hpb=1d837144c4446f5785393ade20998cad7ae4f046;p=PuTTY.git diff --git a/scp.c b/scp.c index 1b9bcee0..ac232fa5 100644 --- a/scp.c +++ b/scp.c @@ -95,7 +95,7 @@ void ssh_get_password(char *prompt, char *str, int maxlen) SetConsoleMode(hin, savemode); - if (i > maxlen) i = maxlen-1; else i = i - 2; + if ((int)i > maxlen) i = maxlen-1; else i = i - 2; str[i] = '\0'; WriteFile(hout, "\r\n", 2, &i, NULL); @@ -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];