summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndreas Schneider <mail@cynapses.org>2009-04-03 12:50:17 +0000
committerAndreas Schneider <mail@cynapses.org>2009-04-03 12:50:17 +0000
commitb5eb33bb69c9d5331b6f6c1cc922976c36c1d299 (patch)
tree8b6abb739cd50ac7fbf09eadda6a965a01639816
parent2791ce7e01f9e177d3bd4c49ff2400b04ce9a399 (diff)
downloadlibssh-b5eb33bb69c9d5331b6f6c1cc922976c36c1d299.tar.gz
libssh-b5eb33bb69c9d5331b6f6c1cc922976c36c1d299.tar.xz
libssh-b5eb33bb69c9d5331b6f6c1cc922976c36c1d299.zip
Improve ssh_socket_free().
git-svn-id: svn+ssh://svn.berlios.de/svnroot/repos/libssh/trunk@381 7dcaeef0-15fb-0310-b436-a5af3365683c
-rw-r--r--libssh/session.c38
-rw-r--r--libssh/socket.c11
2 files changed, 24 insertions, 25 deletions
diff --git a/libssh/session.c b/libssh/session.c
index 4a623bfd..972dc29b 100644
--- a/libssh/session.c
+++ b/libssh/session.c
@@ -41,6 +41,7 @@
*/
SSH_SESSION *ssh_new(void) {
SSH_SESSION *session;
+
session = malloc(sizeof (SSH_SESSION));
if (session == NULL) {
return NULL;
@@ -87,28 +88,23 @@ err:
return NULL;
}
-void ssh_cleanup(SSH_SESSION *session){
- int i;
- enter_function();
+void ssh_cleanup(SSH_SESSION *session) {
+ int i;
+ enter_function();
+
+ if (session == NULL) {
+ return;
+ }
- if(session->serverbanner)
- free(session->serverbanner);
- if(session->clientbanner)
- free(session->clientbanner);
- if(session->in_buffer)
- buffer_free(session->in_buffer);
- if(session->out_buffer)
- buffer_free(session->out_buffer);
- if(session->banner)
- free(session->banner);
- if(session->options)
- ssh_options_free(session->options);
- if(session->current_crypto)
- crypto_free(session->current_crypto);
- if(session->next_crypto)
- crypto_free(session->next_crypto);
- if(session->socket)
- ssh_socket_free(session->socket);
+ SAFE_FREE(session->serverbanner);
+ SAFE_FREE(session->clientbanner);
+ SAFE_FREE(session->banner);
+ buffer_free(session->in_buffer);
+ buffer_free(session->out_buffer);
+ crypto_free(session->current_crypto);
+ crypto_free(session->next_crypto);
+ ssh_socket_free(session->socket);
+ ssh_options_free(session->options);
// delete all channels
while(session->channels)
channel_free(session->channels);
diff --git a/libssh/socket.c b/libssh/socket.c
index 0fe4ad52..d587f494 100644
--- a/libssh/socket.c
+++ b/libssh/socket.c
@@ -120,10 +120,13 @@ struct socket *ssh_socket_new(SSH_SESSION *session) {
* \brief Deletes a socket object
*/
void ssh_socket_free(struct socket *s){
- ssh_socket_close(s);
- buffer_free(s->in_buffer);
- buffer_free(s->out_buffer);
- free(s);
+ if (s == NULL) {
+ return;
+ }
+ ssh_socket_close(s);
+ buffer_free(s->in_buffer);
+ buffer_free(s->out_buffer);
+ SAFE_FREE(s);
}
#ifndef _WIN32