diff options
author | Andreas Schneider <mail@cynapses.org> | 2009-04-29 09:57:12 +0000 |
---|---|---|
committer | Andreas Schneider <mail@cynapses.org> | 2009-04-29 09:57:12 +0000 |
commit | c26fb22122f9737e6bb7fbffa3d53e2152de545d (patch) | |
tree | 04d237f5c0723c089637f5c380a89f92bdeb0f25 | |
parent | 4cc2acda3a0a9fca14d146648cbc5f2ace6083e9 (diff) | |
download | libssh-c26fb22122f9737e6bb7fbffa3d53e2152de545d.tar.gz libssh-c26fb22122f9737e6bb7fbffa3d53e2152de545d.tar.xz libssh-c26fb22122f9737e6bb7fbffa3d53e2152de545d.zip |
Improve kbdint_free.
git-svn-id: svn+ssh://svn.berlios.de/svnroot/repos/libssh/trunk@638 7dcaeef0-15fb-0310-b436-a5af3365683c
-rw-r--r-- | libssh/auth.c | 49 |
1 files changed, 27 insertions, 22 deletions
diff --git a/libssh/auth.c b/libssh/auth.c index f2e449f..65badc6 100644 --- a/libssh/auth.c +++ b/libssh/auth.c @@ -938,30 +938,35 @@ static struct ssh_kbdint *kbdint_new(void) { } -static void kbdint_free(struct ssh_kbdint *kbd){ - int i,n=kbd->nprompts; - if(kbd->name) - free(kbd->name); - if(kbd->instruction) - free(kbd->instruction); - if(kbd->prompts){ - for(i=0;i<n;++i){ - burn(kbd->prompts[i]); - free(kbd->prompts[i]); - } - free(kbd->prompts); - } - if(kbd->answers){ - for(i=0;i<n;++i){ - burn(kbd->answers[i]); - free(kbd->answers[i]); - } - free(kbd->answers); +static void kbdint_free(struct ssh_kbdint *kbd) { + int i, n; + + if (kbd == NULL) { + return; + } + + n = kbd->nprompts; + + SAFE_FREE(kbd->name); + SAFE_FREE(kbd->instruction); + SAFE_FREE(kbd->echo); + + if (kbd->prompts) { + for (i = 0; i < n; i++) { + burn(kbd->prompts[i]); + SAFE_FREE(kbd->prompts[i]); } - if(kbd->echo){ - free(kbd->echo); + SAFE_FREE(kbd->prompts); + } + if (kbd->answers) { + for (i = 0; i < n; i++) { + burn(kbd->answers[i]); + SAFE_FREE(kbd->answers[i]); } - free(kbd); + SAFE_FREE(kbd->answers); + } + + SAFE_FREE(kbd); } static void kbdint_clean(struct ssh_kbdint *kbd){ |