diff options
author | Andreas Schneider <mail@cynapses.org> | 2009-04-04 14:38:39 +0000 |
---|---|---|
committer | Andreas Schneider <mail@cynapses.org> | 2009-04-04 14:38:39 +0000 |
commit | f7959bd5eb68e873714d468a1ad9a10857fe1916 (patch) | |
tree | 431924b2a4277d2afa42c91e3b511133b9ebbba1 /libssh/keyfiles.c | |
parent | 226e48b4b7ac98a26259ee8f968a2cf64132b4ac (diff) | |
download | libssh-f7959bd5eb68e873714d468a1ad9a10857fe1916.tar.gz libssh-f7959bd5eb68e873714d468a1ad9a10857fe1916.tar.xz libssh-f7959bd5eb68e873714d468a1ad9a10857fe1916.zip |
Improve free functions of the keyfiles.
git-svn-id: svn+ssh://svn.berlios.de/svnroot/repos/libssh/trunk@389 7dcaeef0-15fb-0310-b436-a5af3365683c
Diffstat (limited to 'libssh/keyfiles.c')
-rw-r--r-- | libssh/keyfiles.c | 35 |
1 files changed, 18 insertions, 17 deletions
diff --git a/libssh/keyfiles.c b/libssh/keyfiles.c index 8640dfb2..7d922270 100644 --- a/libssh/keyfiles.c +++ b/libssh/keyfiles.c @@ -660,23 +660,20 @@ PRIVATE_KEY *_privatekey_from_file(void *session,char *filename,int type){ /** \brief deallocate a private key * \param prv a PRIVATE_KEY object */ -void private_key_free(PRIVATE_KEY *prv){ +void private_key_free(PRIVATE_KEY *prv) { if (prv == NULL) { return; } + #ifdef HAVE_LIBGCRYPT - if(prv->dsa_priv) - gcry_sexp_release(prv->dsa_priv); - if(prv->rsa_priv) - gcry_sexp_release(prv->rsa_priv); + gcry_sexp_release(prv->dsa_priv); + gcry_sexp_release(prv->rsa_priv); #elif defined HAVE_LIBCRYPTO - if(prv->dsa_priv) - DSA_free(prv->dsa_priv); - if(prv->rsa_priv) - RSA_free(prv->rsa_priv); + DSA_free(prv->dsa_priv); + RSA_free(prv->rsa_priv); #endif - memset(prv,0,sizeof(PRIVATE_KEY)); - free(prv); + memset(prv, 0, sizeof(PRIVATE_KEY)); + SAFE_FREE(prv); } /** \brief Retrieve a public key from a file @@ -825,12 +822,16 @@ static char *lowercase(const char* str) { /** \brief frees a token array * \internal */ -static void tokens_free(char **tokens){ - free(tokens[0]); - /* It's not needed to free other pointers because tokens generated by - * space_tokenize fit all in one malloc - */ - free(tokens); +static void tokens_free(char **tokens) { + if (tokens == NULL) { + return; + } + + SAFE_FREE(tokens[0]); + /* It's not needed to free other pointers because tokens generated by + * space_tokenize fit all in one malloc + */ + SAFE_FREE(tokens); } /** \brief returns one line of known host file * will return a token array containing (host|ip) keytype key |