X-Git-Url: https://git.distorted.org.uk/~mdw/sgt/putty/blobdiff_plain/b8a191936d08d23e2c828fc3eed7598f793f3a3d..486543a109b8b1ae0a893d3e96711de97c81a96c:/scp.c diff --git a/scp.c b/scp.c index 1b9bcee0..f359c6e8 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); @@ -120,14 +120,10 @@ static void do_cmd(char *host, char *user, char *cmd) cfg.port = 22; } - if (portnumber) - cfg.port = portnumber; - /* Set username */ if (user != NULL && user[0] != '\0') { strncpy(cfg.username, user, sizeof(cfg.username)-1); cfg.username[sizeof(cfg.username)-1] = '\0'; - cfg.port = 22; } else if (cfg.username[0] == '\0') { bump("Empty user name"); } @@ -135,6 +131,9 @@ static void do_cmd(char *host, char *user, char *cmd) if (cfg.protocol != PROT_SSH) cfg.port = 22; + if (portnumber) + cfg.port = portnumber; + err = ssh_init(cfg.host, cfg.port, cmd, &realhost); if (err != NULL) bump("ssh_init: %s", err); @@ -164,7 +163,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 +276,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; } @@ -296,7 +310,7 @@ static void source(char *src) f = CreateFile(src, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, 0); if (f == INVALID_HANDLE_VALUE) { - run_err("%s: Cannot open file"); + run_err("%s: Cannot open file", src); return; } @@ -457,7 +471,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 +485,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];