summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndreas Schneider <mail@cynapses.org>2009-04-23 07:13:25 +0000
committerAndreas Schneider <mail@cynapses.org>2009-04-23 07:13:25 +0000
commit8fecf4d74c49823760857609bc7f95b7eed5500e (patch)
tree2a6ba83c04b9936d5d41da467417727579ac6b9b
parentb5bda67235334e1c143e644040de03b63ba29f69 (diff)
downloadlibssh-8fecf4d74c49823760857609bc7f95b7eed5500e.tar.gz
libssh-8fecf4d74c49823760857609bc7f95b7eed5500e.tar.xz
libssh-8fecf4d74c49823760857609bc7f95b7eed5500e.zip
Improve parse_handle_msg().
git-svn-id: svn+ssh://svn.berlios.de/svnroot/repos/libssh/trunk@588 7dcaeef0-15fb-0310-b436-a5af3365683c
-rw-r--r--libssh/sftp.c45
1 files changed, 25 insertions, 20 deletions
diff --git a/libssh/sftp.c b/libssh/sftp.c
index 787cf74..5e5bfdc 100644
--- a/libssh/sftp.c
+++ b/libssh/sftp.c
@@ -631,28 +631,33 @@ static void status_msg_free(STATUS_MESSAGE *status){
}
static SFTP_FILE *parse_handle_msg(SFTP_MESSAGE *msg){
- SFTP_FILE *file;
- if(msg->packet_type != SSH_FXP_HANDLE){
- ssh_set_error(msg->sftp->session,SSH_FATAL,"Not a ssh_fxp_handle message passed in !");
- return NULL;
- }
+ SFTP_FILE *file;
- file = malloc(sizeof(SFTP_FILE));
- if (file == NULL) {
- return NULL;
- }
+ if(msg->packet_type != SSH_FXP_HANDLE) {
+ ssh_set_error(msg->sftp->session, SSH_FATAL,
+ "Not a ssh_fxp_handle message passed in!");
+ return NULL;
+ }
- memset(file,0,sizeof(*file));
- file->sftp=msg->sftp;
- file->handle=buffer_get_ssh_string(msg->payload);
- file->offset=0;
- file->eof=0;
- if(!file->handle){
- ssh_set_error(msg->sftp->session,SSH_FATAL,"Invalid SSH_FXP_HANDLE message");
- free(file);
- return NULL;
- }
- return file;
+ file = malloc(sizeof(SFTP_FILE));
+ if (file == NULL) {
+ return NULL;
+ }
+ ZERO_STRUCTP(file);
+
+ file->handle = buffer_get_ssh_string(msg->payload);
+ if (file->handle == NULL) {
+ ssh_set_error(msg->sftp->session, SSH_FATAL,
+ "Invalid SSH_FXP_HANDLE message");
+ SAFE_FREE(file);
+ return NULL;
+ }
+
+ file->sftp = msg->sftp;
+ file->offset = 0;
+ file->eof = 0;
+
+ return file;
}
/* Open a directory */