From 17f396ffab3a5ad9d9984344cde6793685cf81be Mon Sep 17 00:00:00 2001 From: Lee Hambley Date: Fri, 28 Oct 2011 22:52:03 +0200 Subject: Improve ssh_options_get(ssh_session, enum ssh_options_e, char**). * Use SSH_ERROR and SSH_OK instead of `-1` and `0`. * Re-factor for code duplication * No longer call `ssh_set_error_invalid(ssh_session)` when the ssh_session is NULL. --- src/options.c | 47 +++++++++++++-------------------------- tests/unittests/torture_options.c | 8 +++---- 2 files changed, 20 insertions(+), 35 deletions(-) diff --git a/src/options.c b/src/options.c index 4dbcb67..4b928dd 100644 --- a/src/options.c +++ b/src/options.c @@ -838,57 +838,42 @@ int ssh_options_get_port(ssh_session session, unsigned int* port_target) { * your responsibility to free the memory using * ssh_free(). * - * @return 0 on success, < 0 on error. + * @return SSH_OK on success, SSH_ERROR on error. */ int ssh_options_get(ssh_session session, enum ssh_options_e type, char** value) { + char* src = NULL; if (session == NULL) { - return -1; + return SSH_ERROR; } switch(type) { case SSH_OPTIONS_HOST: { - if (session->host == NULL) { - ssh_set_error_invalid(session); - return -1; - } - *value = strdup(session->host); - if (*value == NULL) { - ssh_set_error_oom(session); - return -1; - } + src = session->host; break; } case SSH_OPTIONS_USER: { - if (session->username == NULL) { - ssh_set_error_invalid(session); - return -1; - } - *value = strdup(session->username); - if (*value == NULL) { - ssh_set_error_oom(session); - return -1; - } + src = session->username; break; } case SSH_OPTIONS_IDENTITY: { - if (session->identity == NULL) { - ssh_set_error_invalid(session); - return -1; - } - *value = strdup(session->identity->root->data); - if(*value == NULL){ - ssh_set_error_oom(session); - return -1; - } + src = ssh_iterator_value(char *, ssh_list_get_iterator(session->identity)); break; } default: ssh_set_error(session, SSH_REQUEST_DENIED, "Unknown ssh option %d", type); - return -1; + return SSH_ERROR; break; } - return 0; + if (src == NULL) { + return SSH_ERROR; + } + *value = strdup(src); + if (*value == NULL) { + ssh_set_error_oom(session); + return SSH_ERROR; + } + return SSH_OK; } /** diff --git a/tests/unittests/torture_options.c b/tests/unittests/torture_options.c index 3830981..b90d163 100644 --- a/tests/unittests/torture_options.c +++ b/tests/unittests/torture_options.c @@ -83,7 +83,7 @@ static void torture_options_get_user(void **state) { char* user = NULL; int rc; rc = ssh_options_set(session, SSH_OPTIONS_USER, "magicaltrevor"); - assert_true(rc == 0); + assert_true(rc == SSH_OK); rc = ssh_options_get(session, SSH_OPTIONS_USER, &user); assert_string_equal(user, "magicaltrevor"); } @@ -98,7 +98,7 @@ static void torture_options_set_fd(void **state) { assert_true(session->fd == fd); rc = ssh_options_set(session, SSH_OPTIONS_FD, NULL); - assert_true(rc == -1); + assert_true(rc == SSH_ERROR); assert_true(session->fd == SSH_INVALID_SOCKET); } @@ -161,14 +161,14 @@ static void torture_options_get_identity(void **state) { rc = ssh_options_set(session, SSH_OPTIONS_ADD_IDENTITY, "identity1"); assert_true(rc == 0); rc = ssh_options_get(session, SSH_OPTIONS_IDENTITY, &identity); - assert_true(rc == 0); + assert_true(rc == SSH_OK); assert_string_equal(identity, "identity1"); rc = ssh_options_set(session, SSH_OPTIONS_IDENTITY, "identity2"); assert_true(rc == 0); assert_string_equal(session->identity->root->data, "identity2"); rc = ssh_options_get(session, SSH_OPTIONS_IDENTITY, &identity); - assert_true(rc == 0); + assert_true(rc == SSH_OK); assert_string_equal(identity, "identity2"); } -- cgit