Mercurial > gftp.yaz
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);