Theo Markettos's unsigned-vs-signed-char pedantry patch.
[u/mdw/putty] / scp.c
diff --git a/scp.c b/scp.c
index 70f13be..28bc964 100644 (file)
--- a/scp.c
+++ b/scp.c
@@ -290,7 +290,7 @@ static void bump(char *fmt, ...)
     if (back != NULL && back->socket(backhandle) != NULL) {
        char ch;
        back->special(backhandle, TS_EOF);
-       ssh_scp_recv(&ch, 1);
+       ssh_scp_recv((unsigned char *) &ch, 1);
     }
 
     if (gui_mode)
@@ -455,7 +455,7 @@ static void print_stats(char *name, unsigned long size, unsigned long done,
     pct = (int) (100 * (done * 1.0 / size));
 
     if (gui_mode) {
-       gui_update_stats(name, size, pct, elap, done, eta, 
+       gui_update_stats(name, size, pct, elap, done, eta,
                         (unsigned long) ratebs);
     } else {
        len = printf("\r%-25.25s | %10ld kB | %5.1f kB/s | ETA: %8s | %3d%%",
@@ -466,6 +466,8 @@ static void print_stats(char *name, unsigned long size, unsigned long done,
 
        if (done == size)
            printf("\n");
+
+       fflush(stdout);
     }
 }
 
@@ -529,7 +531,7 @@ static int response(void)
     char ch, resp, rbuf[2048];
     int p;
 
-    if (ssh_scp_recv(&resp, 1) <= 0)
+    if (ssh_scp_recv((unsigned char *) &resp, 1) <= 0)
        bump("Lost connection");
 
     p = 0;
@@ -542,7 +544,7 @@ static int response(void)
       case 1:                         /* error */
       case 2:                         /* fatal error */
        do {
-           if (ssh_scp_recv(&ch, 1) <= 0)
+           if (ssh_scp_recv((unsigned char *) &ch, 1) <= 0)
                bump("Protocol error: Lost connection");
            rbuf[p++] = ch;
        } while (p < sizeof(rbuf) && ch != '\n');
@@ -558,11 +560,11 @@ static int response(void)
 
 int sftp_recvdata(char *buf, int len)
 {
-    return ssh_scp_recv(buf, len);
+    return ssh_scp_recv((unsigned char *) buf, len);
 }
 int sftp_senddata(char *buf, int len)
 {
-    back->send(backhandle, (unsigned char *) buf, len);
+    back->send(backhandle, buf, len);
     return 1;
 }
 
@@ -1318,14 +1320,14 @@ int scp_get_sink_action(struct scp_sink_action *act)
        bufsize = 0;
 
        while (!done) {
-           if (ssh_scp_recv(&ch, 1) <= 0)
+           if (ssh_scp_recv((unsigned char *) &ch, 1) <= 0)
                return 1;
            if (ch == '\n')
                bump("Protocol error: Unexpected newline");
            i = 0;
            action = ch;
            do {
-               if (ssh_scp_recv(&ch, 1) <= 0)
+               if (ssh_scp_recv((unsigned char *) &ch, 1) <= 0)
                    bump("Lost connection");
                if (i >= bufsize) {
                    bufsize = i + 128;
@@ -1440,7 +1442,7 @@ int scp_recv_filedata(char *data, int len)
 
        return actuallen;
     } else {
-       return ssh_scp_recv(data, len);
+       return ssh_scp_recv((unsigned char *) data, len);
     }
 }
 
@@ -2032,7 +2034,7 @@ static void get_dir_list(int argc, char *argv[])
     if (using_sftp) {
        scp_sftp_listdir(src);
     } else {
-       while (ssh_scp_recv(&c, 1) > 0)
+       while (ssh_scp_recv((unsigned char *) &c, 1) > 0)
            tell_char(stdout, c);
     }
 }
@@ -2169,13 +2171,19 @@ int psftp_main(int argc, char *argv[])
     if (back != NULL && back->socket(backhandle) != NULL) {
        char ch;
        back->special(backhandle, TS_EOF);
-       ssh_scp_recv(&ch, 1);
+       ssh_scp_recv((unsigned char *) &ch, 1);
     }
     random_save_seed();
 
     if (gui_mode)
        gui_send_errcount(list, errs);
 
+    cmdline_cleanup();
+    console_provide_logctx(NULL);
+    back->free(backhandle);
+    backhandle = NULL;
+    back = NULL;
+    sk_cleanup();
     return (errs == 0 ? 0 : 1);
 }