aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnderson Toshiyuki Sasaki <ansasaki@redhat.com>2020-04-06 12:07:28 +0200
committerAndreas Schneider <asn@cryptomilk.org>2020-04-09 11:25:49 +0200
commitdba2114ed78796caa06fc9d53268cb9cc302699f (patch)
treec570b67dc5b55a47f9b4ecd2b64f265e5ea08ff5
parente3e52394c11e7b9bafa3086e7be937388540daeb (diff)
downloadlibssh-dba2114ed78796caa06fc9d53268cb9cc302699f.tar.gz
libssh-dba2114ed78796caa06fc9d53268cb9cc302699f.tar.xz
libssh-dba2114ed78796caa06fc9d53268cb9cc302699f.zip
init: Introduce internal is_ssh_initialized()
The introduced function returns whether the library is initialized or not. Signed-off-by: Anderson Toshiyuki Sasaki <ansasaki@redhat.com> Reviewed-by: Andreas Schneider <asn@cryptomilk.org>
-rw-r--r--include/libssh/priv.h3
-rw-r--r--src/init.c19
-rw-r--r--tests/unittests/torture_init.c23
3 files changed, 45 insertions, 0 deletions
diff --git a/include/libssh/priv.h b/include/libssh/priv.h
index 6e7f2de8..3cf2004e 100644
--- a/include/libssh/priv.h
+++ b/include/libssh/priv.h
@@ -32,6 +32,7 @@
#include <stdint.h>
#include <stdlib.h>
#include <string.h>
+#include <stdbool.h>
#if !defined(HAVE_STRTOULL)
# if defined(HAVE___STRTOULL)
@@ -417,4 +418,6 @@ void explicit_bzero(void *s, size_t n);
void ssh_agent_state_free(void *data);
+bool is_ssh_initialized(void);
+
#endif /* _LIBSSH_PRIV_H */
diff --git a/src/init.c b/src/init.c
index edecb95e..2ebcedf6 100644
--- a/src/init.c
+++ b/src/init.c
@@ -261,4 +261,23 @@ BOOL WINAPI DllMain(HINSTANCE hinstDLL,
#endif /* _WIN32 */
+/**
+ * @internal
+ * @brief Return whether the library is initialized
+ *
+ * @returns true if the library is initialized; false otherwise.
+ *
+ * @see ssh_init()
+ */
+bool is_ssh_initialized() {
+
+ bool is_initialized = false;
+
+ ssh_mutex_lock(&ssh_init_mutex);
+ is_initialized = _ssh_initialized > 0;
+ ssh_mutex_unlock(&ssh_init_mutex);
+
+ return is_initialized;
+}
+
/** @} */
diff --git a/tests/unittests/torture_init.c b/tests/unittests/torture_init.c
index 6a97a182..f719fc99 100644
--- a/tests/unittests/torture_init.c
+++ b/tests/unittests/torture_init.c
@@ -2,6 +2,7 @@
#define LIBSSH_STATIC
+#include <errno.h>
#include "torture.h"
#include "libssh/libssh.h"
@@ -32,11 +33,33 @@ static void torture_ssh_init_after_finalize(void **state) {
assert_int_equal(rc, SSH_OK);
}
+static void torture_is_ssh_initialized(UNUSED_PARAM(void **state)) {
+
+ int rc;
+ bool initialized = false;
+
+ /* Make sure the library is not initialized */
+ while (is_ssh_initialized()) {
+ rc = ssh_finalize();
+ assert_return_code(rc, errno);
+ }
+
+ rc = ssh_init();
+ assert_return_code(rc, errno);
+ initialized = is_ssh_initialized();
+ assert_true(initialized);
+ rc = ssh_finalize();
+ assert_return_code(rc, errno);
+ initialized = is_ssh_initialized();
+ assert_false(initialized);
+}
+
int torture_run_tests(void) {
int rc;
struct CMUnitTest tests[] = {
cmocka_unit_test(torture_ssh_init),
cmocka_unit_test(torture_ssh_init_after_finalize),
+ cmocka_unit_test(torture_is_ssh_initialized),
};
torture_filter_tests(tests);