diff lib/sshv2.c @ 321:3e6d0c26e37b

2003-11-30 Brian Masney <masneyb@gftp.org> * lib/sshv2.c - cleaned up some of the code. Added a temporary fix for an upload crash that is happening on FreeBSD.
author masneyb
date Mon, 01 Dec 2003 01:21:14 +0000
parents cc2eeb30b793
children 0fcc6468a0af
line wrap: on
line diff
--- a/lib/sshv2.c	Sun Nov 30 19:35:24 2003 +0000
+++ b/lib/sshv2.c	Mon Dec 01 01:21:14 2003 +0000
@@ -564,7 +564,7 @@
 
 static int
 sshv2_send_command (gftp_request * request, char type, char *command, 
-                    gint32 len)
+                    size_t len)
 {
   char buf[34000];
   gint32 clen;
@@ -1883,7 +1883,7 @@
 {
   sshv2_params * params;
   sshv2_message message;
-  char *tempstr;
+  char *tempstr, *path;
   size_t stlen;
   gint32 num;
   int ret;
@@ -1904,11 +1904,11 @@
     }
   else
     {
-      stlen = strlen (file) + strlen (request->directory) + 1;
+      path = gftp_build_path (request->directory, file, NULL);
+      stlen = strlen (path);
       tempstr = g_malloc (stlen + 16);
-      strcpy (tempstr + 8, request->directory);
-      strcat (tempstr + 8, "/");
-      strcat (tempstr + 8, file);
+      strcpy (tempstr + 8, path);
+      g_free (path);
     }
 
   num = htonl (params->id++);
@@ -1920,7 +1920,8 @@
   num = htonl (SSH_FXF_READ);
   memcpy (tempstr + 8 + stlen, &num, 4);
 
-  memset (tempstr + 12 + stlen, 0, 4);
+  num = 0;
+  memcpy (tempstr + 12 + stlen, &num, 4);
   
   if (sshv2_send_command (request, SSH_FXP_OPEN, tempstr, stlen + 16) < 0)
     {
@@ -1973,7 +1974,7 @@
 {
   sshv2_params * params;
   sshv2_message message;
-  char *tempstr;
+  char *tempstr, *path;
   size_t stlen;
   gint32 num;
   int ret;
@@ -1994,11 +1995,11 @@
     }
   else
     {
-      stlen = strlen (file) + strlen (request->directory) + 1;
+      path = gftp_build_path (request->directory, file, NULL);
+      stlen = strlen (path);
       tempstr = g_malloc (stlen + 16);
-      strcpy (tempstr + 8, request->directory);
-      strcat (tempstr + 8, "/");
-      strcat (tempstr + 8, file);
+      strcpy (tempstr + 8, path);
+      g_free (path);
     }
 
   num = htonl (params->id++);
@@ -2013,7 +2014,8 @@
     num = htonl (SSH_FXF_WRITE | SSH_FXF_CREAT | SSH_FXF_TRUNC);
   memcpy (tempstr + 8 + stlen, &num, 4);
 
-  memset (tempstr + 12 + stlen, 0, 4);
+  num = 0;
+  memcpy (tempstr + 12 + stlen, &num, 4);
   
   if (sshv2_send_command (request, SSH_FXP_OPEN, tempstr, stlen + 16) < 0)
     {
@@ -2052,7 +2054,7 @@
     }
 
   memset (params->handle, 0, 4);
-  memcpy (params->handle + 4, message.buffer+ 4, message.length - 5);
+  memcpy (params->handle + 4, message.buffer + 4, message.length - 5);
   params->handle_len = message.length - 1;
   sshv2_message_free (&message);
 
@@ -2151,8 +2153,9 @@
 {
   sshv2_params * params;
   sshv2_message message;
-  char tempstr[32768];
+  static char tempstr[32768]; /* FIXME - temporary fix for FreeBSD */
   gint32 num;
+  size_t len;
   int ret;
 
 #ifdef G_HAVE_GINT64
@@ -2169,7 +2172,6 @@
 
   params = request->protocol_data;
 
-  num = htonl (params->handle_len);
   memcpy (tempstr, params->handle, params->handle_len);
 
   num = htonl (params->id++);
@@ -2188,7 +2190,8 @@
   memcpy (tempstr + params->handle_len + 8, &num, 4);
   memcpy (tempstr + params->handle_len + 12, buf, size);
   
-  if (sshv2_send_command (request, SSH_FXP_WRITE, tempstr, params->handle_len + size + 12) < 0)
+  len = params->handle_len + size + 12;
+  if (sshv2_send_command (request, SSH_FXP_WRITE, tempstr, len) < 0)
     {
       g_free (tempstr);
       return (GFTP_ERETRYABLE);