diff lib/sshv2.c @ 787:3751478bb260

2006-7-27 Brian Masney <masneyb@gftp.org> * lib/protocols.c (gftp_get_all_subdirs) - split this function into several smaller functions. Added support for getting the true file size if it is a symlink. Added more error handling. Fixed a segfault that may occur when transferring deeply nested directories * lib/fsp.c lib/gftp.h lib/local.c lib/protocols.c lib/rfc2068.c lib/rfc959.c lib/sshv2.c (*_chdir) - removed support for passing the request->directory into this function. There is no longer a need for this. (*_stat_filename) - added support for getting the file size
author masneyb
date Fri, 28 Jul 2006 01:44:54 +0000
parents d553d14a2565
children f2772ac00751
line wrap: on
line diff
--- a/lib/sshv2.c	Thu Jul 27 18:25:38 2006 +0000
+++ b/lib/sshv2.c	Fri Jul 28 01:44:54 2006 +0000
@@ -1416,38 +1416,32 @@
   g_return_val_if_fail (request != NULL, GFTP_EFATAL);
   g_return_val_if_fail (request->protonum == GFTP_SSHV2_NUM, GFTP_EFATAL);
 
-  if (request->directory != directory)
-    {
-      len = 0;
-      tempstr = sshv2_initialize_string_with_path (request, directory,
-                                                   &len, NULL);
+  len = 0;
+  tempstr = sshv2_initialize_string_with_path (request, directory, &len, NULL);
 
-      ret = sshv2_send_command (request, SSH_FXP_REALPATH, tempstr, len);
+  ret = sshv2_send_command (request, SSH_FXP_REALPATH, tempstr, len);
 
-      g_free (tempstr);
-      if (ret < 0)
-        return (ret);
+  g_free (tempstr);
+  if (ret < 0)
+    return (ret);
 
-      ret = sshv2_read_status_response (request, &message, -1, SSH_FXP_STATUS,
-                                        SSH_FXP_NAME);
-      if (ret < 0)
-        return (ret);
+  ret = sshv2_read_status_response (request, &message, -1, SSH_FXP_STATUS,
+                                    SSH_FXP_NAME);
+  if (ret < 0)
+    return (ret);
 
-      message.pos += 4;
-      if ((ret = sshv2_buffer_get_int32 (request, &message, 1, 1, NULL)) < 0)
-        return (ret);
+  message.pos += 4;
+  if ((ret = sshv2_buffer_get_int32 (request, &message, 1, 1, NULL)) < 0)
+    return (ret);
 
-      if ((dir = sshv2_buffer_get_string (request, &message, 1)) == NULL)
-        return (GFTP_EFATAL);
-
-      if (request->directory)
-        g_free (request->directory);
+  if ((dir = sshv2_buffer_get_string (request, &message, 1)) == NULL)
+    return (GFTP_EFATAL);
 
-      request->directory = dir;
-      sshv2_message_free (&message);
-      return (0);
-    }
+  if (request->directory)
+    g_free (request->directory);
 
+  request->directory = dir;
+  sshv2_message_free (&message);
   return (0);
 }
 
@@ -1744,7 +1738,7 @@
 
 static int
 sshv2_stat_filename (gftp_request * request, const char *filename,
-                     mode_t * mode)
+                     mode_t * mode, off_t * filesize)
 {
   gftp_file fle;
   int ret;
@@ -1755,6 +1749,8 @@
     return (ret);
 
   *mode = fle.st_mode;
+  *filesize = fle.size;
+
   gftp_file_destroy (&fle, 0);
 
   return (0);