aboutsummaryrefslogtreecommitdiff
path: root/libssh/keyfiles.c
diff options
context:
space:
mode:
authorAndreas Schneider <mail@cynapses.org>2009-04-04 14:38:39 +0000
committerAndreas Schneider <mail@cynapses.org>2009-04-04 14:38:39 +0000
commitf7959bd5eb68e873714d468a1ad9a10857fe1916 (patch)
tree431924b2a4277d2afa42c91e3b511133b9ebbba1 /libssh/keyfiles.c
parent226e48b4b7ac98a26259ee8f968a2cf64132b4ac (diff)
downloadlibssh-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.c35
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