diff options
author | Andreas Schneider <mail@cynapses.org> | 2009-04-23 07:13:25 +0000 |
---|---|---|
committer | Andreas Schneider <mail@cynapses.org> | 2009-04-23 07:13:25 +0000 |
commit | 8fecf4d74c49823760857609bc7f95b7eed5500e (patch) | |
tree | 2a6ba83c04b9936d5d41da467417727579ac6b9b | |
parent | b5bda67235334e1c143e644040de03b63ba29f69 (diff) | |
download | libssh-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.c | 45 |
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 */ |