]> asedeno.scripts.mit.edu Git - PuTTY_svn.git/blobdiff - pscp.c
Enable xterm mouse reporting of wheel actions in GTK.
[PuTTY_svn.git] / pscp.c
diff --git a/pscp.c b/pscp.c
index 70e3e7a111d9410eb5617be788531be80d927d24..f63e6b5986538acfe18ecdbd80281ea800d812f9 100644 (file)
--- a/pscp.c
+++ b/pscp.c
@@ -41,6 +41,7 @@ static int try_sftp = 1;
 static int main_cmd_is_sftp = 0;
 static int fallback_cmd_is_sftp = 0;
 static int using_sftp = 0;
+static int uploading = 0;
 
 static Backend *back;
 static void *backhandle;
@@ -129,6 +130,19 @@ void modalfatalbox(char *fmt, ...)
 
     cleanup_exit(1);
 }
+void nonfatal(char *fmt, ...)
+{
+    char *str, *str2;
+    va_list ap;
+    va_start(ap, fmt);
+    str = dupvprintf(fmt, ap);
+    str2 = dupcat("Error: ", str, "\n", NULL);
+    sfree(str);
+    va_end(ap);
+    tell_str(stderr, str2);
+    sfree(str2);
+    errs++;
+}
 void connection_fatal(void *frontend, char *fmt, ...)
 {
     char *str, *str2;
@@ -218,11 +232,12 @@ int from_backend_untrusted(void *frontend_handle, const char *data, int len)
 int from_backend_eof(void *frontend)
 {
     /*
-     * We expect to be the party deciding when to close the
+     * We usually expect to be the party deciding when to close the
      * connection, so if we see EOF before we sent it ourselves, we
-     * should panic.
+     * should panic. The exception is if we're using old-style scp and
+     * downloading rather than uploading.
      */
-    if (!sent_eof) {
+    if ((using_sftp || uploading) && !sent_eof) {
         connection_fatal(frontend,
                          "Received unexpected end-of-file from server");
     }
@@ -355,15 +370,9 @@ static void do_cmd(char *host, char *user, char *cmd)
        bump("Empty host name");
 
     /*
-     * Remove fiddly bits of address: remove a colon suffix, and
-     * the square brackets around an IPv6 literal address.
+     * Remove a colon suffix.
      */
-    if (host[0] == '[') {
-       host++;
-       host[strcspn(host, "]")] = '\0';
-    } else {
-       host[strcspn(host, ":")] = '\0';
-    }
+    host[host_strcspn(host, ":")] = '\0';
 
     /*
      * If we haven't loaded session details already (e.g., from -load),
@@ -598,17 +607,7 @@ static char *colon(char *str)
     if (str[0] == '\0' || str[0] == ':' ||
         (str[0] != '[' && str[1] == ':'))
        return (NULL);
-    while (*str != '\0' && *str != ':' && *str != '/' && *str != '\\') {
-       if (*str == '[') {
-           /* Skip over IPv6 literal addresses
-            * (eg: 'jeroen@[2001:db8::1]:myfile.txt') */
-           char *ipv6_end = strchr(str, ']');
-           if (ipv6_end) {
-               str = ipv6_end;
-           }
-       }
-       str++;
-    }
+    str += host_strcspn(str, ":/\\");
     if (*str == ':')
        return (str);
     else
@@ -2013,7 +2012,6 @@ static void sink(char *targ, char *src)
            set_file_times(f, act.mtime, act.atime);
        }
 
-       sfree(stat_name);
        close_wfile(f);
        if (wrerror) {
            run_err("%s: Write error", destfname);
@@ -2035,6 +2033,8 @@ static void toremote(int argc, char *argv[])
     char *cmd;
     int i, wc_type;
 
+    uploading = 1;
+
     targ = argv[argc - 1];
 
     /* Separate host from filename */
@@ -2124,6 +2124,8 @@ static void tolocal(int argc, char *argv[])
     char *src, *targ, *host, *user;
     char *cmd;
 
+    uploading = 0;
+
     if (argc != 2)
        bump("More than one remote source not supported");
 
@@ -2289,6 +2291,9 @@ void cmdline_error(char *p, ...)
     exit(1);
 }
 
+const int share_can_be_downstream = TRUE;
+const int share_can_be_upstream = FALSE;
+
 /*
  * Main program. (Called `psftp_main' because it gets called from
  * *sftp.c; bit silly, I know, but it had to be called _something_.)