diff options
-rw-r--r-- | include/libssh/callbacks.h | 54 | ||||
-rw-r--r-- | src/threads.c | 21 | ||||
-rw-r--r-- | src/threads/pthread.c | 84 | ||||
-rw-r--r-- | tests/unittests/torture_rand.c | 1 |
4 files changed, 85 insertions, 75 deletions
diff --git a/include/libssh/callbacks.h b/include/libssh/callbacks.h index f3e8f006..b7047d65 100644 --- a/include/libssh/callbacks.h +++ b/include/libssh/callbacks.h @@ -277,59 +277,7 @@ struct ssh_threads_callbacks_struct { LIBSSH_API int ssh_threads_set_callbacks(struct ssh_threads_callbacks_struct *cb); -/** @brief Defines the needed callbacks for pthread. Use this if your - * OS supports libpthread and want to use it for threading. - * @code - * #include <libssh/callbacks.h> - * #include <errno.h> - * #include <pthread.h> - * SSH_THREADS_PTHREAD(ssh_pthread_callbacks); - * int main(){ - * ssh_init_set_threads_callbacks(&ssh_pthread_callbacks); - * ssh_init(); - * ... - * } - * @endcode - * @param name name of the structure to be declared, containing the - * callbacks for threading - * - */ -#define SSH_THREADS_PTHREAD(name) \ -static int ssh_pthread_mutex_init (void **priv){ \ - int err = 0; \ - *priv = malloc (sizeof (pthread_mutex_t)); \ - if (*priv==NULL) \ - return ENOMEM; \ - err = pthread_mutex_init (*priv, NULL); \ - if (err != 0){ \ - free (*priv); \ - *priv=NULL; \ - } \ - return err; \ -} \ -static int ssh_pthread_mutex_destroy (void **lock) { \ - int err = pthread_mutex_destroy (*lock); \ - free (*lock); \ - *lock=NULL; \ - return err; \ -} \ -static int ssh_pthread_mutex_lock (void **lock) { \ - return pthread_mutex_lock (*lock); \ -} \ -static int ssh_pthread_mutex_unlock (void **lock){ \ - return pthread_mutex_unlock (*lock); \ -} \ -static unsigned long ssh_pthread_thread_id (void){ \ - return (unsigned long) pthread_self(); \ -} \ -static struct ssh_threads_callbacks_struct name= \ -{ \ - .mutex_init=ssh_pthread_mutex_init, \ - .mutex_destroy=ssh_pthread_mutex_destroy, \ - .mutex_lock=ssh_pthread_mutex_lock, \ - .mutex_unlock=ssh_pthread_mutex_unlock, \ - .thread_id=ssh_pthread_thread_id \ -} +extern struct ssh_threads_callbacks_struct ssh_pthread_callbacks; /** @} */ #ifdef __cplusplus diff --git a/src/threads.c b/src/threads.c index 7cac6dbf..51a4ccfb 100644 --- a/src/threads.c +++ b/src/threads.c @@ -30,22 +30,6 @@ #include "libssh/priv.h" #include "libssh/threads.h" -#ifndef _WIN32 - -#ifndef HAVE_PTHREAD -#warning "You do not have any threading library installed. If the linked" -#warning "application doesn't provide the threading callbacks, you're screwed" -#endif - - -#ifdef HAVE_PTHREAD - -#include <errno.h> -#include <pthread.h> -SSH_THREADS_PTHREAD(ssh_pthread_user_callbacks); -#endif /* HAVE_PTHREAD */ -#endif /* _WIN32 */ - static struct ssh_threads_callbacks_struct *user_callbacks; #ifdef HAVE_LIBGCRYPT @@ -123,13 +107,8 @@ int ssh_threads_init(void){ * already the case */ if(user_callbacks == NULL){ -#ifdef HAVE_PTHREAD - user_callbacks=&ssh_pthread_user_callbacks; - } -#else return SSH_ERROR; // Can't do anything to initialize threading } -#endif /* Then initialize the crypto libraries threading callbacks */ #ifdef HAVE_LIBGCRYPT diff --git a/src/threads/pthread.c b/src/threads/pthread.c new file mode 100644 index 00000000..2f62ad3c --- /dev/null +++ b/src/threads/pthread.c @@ -0,0 +1,84 @@ +/* + * This file is part of the SSH Library + * + * Copyright (c) 2010 by Aris Adamantiadis + * + * The SSH Library is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation; either version 2.1 of the License, or (at your + * option) any later version. + * + * The SSH Library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public + * License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with the SSH Library; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, + * MA 02111-1307, USA. + */ + +#include "config.h" + +#ifdef HAVE_PTHREAD + +#include <errno.h> +#include <pthread.h> + +/** @brief Defines the needed callbacks for pthread. Use this if your + * OS supports libpthread and want to use it for threading. + * @code + * #include <libssh/callbacks.h> + * #include <errno.h> + * #include <pthread.h> + * SSH_THREADS_PTHREAD(ssh_pthread_callbacks); + * int main(){ + * ssh_init_set_threads_callbacks(&ssh_pthread_callbacks); + * ssh_init(); + * ... + * } + * @endcode + * @param name name of the structure to be declared, containing the + * callbacks for threading + * + */ +#define SSH_THREADS_PTHREAD(name) \ +static int ssh_pthread_mutex_init (void **priv){ \ + int err = 0; \ + *priv = malloc (sizeof (pthread_mutex_t)); \ + if (*priv==NULL) \ + return ENOMEM; \ + err = pthread_mutex_init (*priv, NULL); \ + if (err != 0){ \ + free (*priv); \ + *priv=NULL; \ + } \ + return err; \ +} \ +static int ssh_pthread_mutex_destroy (void **lock) { \ + int err = pthread_mutex_destroy (*lock); \ + free (*lock); \ + *lock=NULL; \ + return err; \ +} \ +static int ssh_pthread_mutex_lock (void **lock) { \ + return pthread_mutex_lock (*lock); \ +} \ +static int ssh_pthread_mutex_unlock (void **lock){ \ + return pthread_mutex_unlock (*lock); \ +} \ +static unsigned long ssh_pthread_thread_id (void){ \ + return (unsigned long) pthread_self(); \ +} \ +static struct ssh_threads_callbacks_struct name= \ +{ \ + .mutex_init=ssh_pthread_mutex_init, \ + .mutex_destroy=ssh_pthread_mutex_destroy, \ + .mutex_lock=ssh_pthread_mutex_lock, \ + .mutex_unlock=ssh_pthread_mutex_unlock, \ + .thread_id=ssh_pthread_thread_id \ +} + +SSH_THREADS_PTHREAD(ssh_pthread_user_callbacks); +#endif /* HAVE_PTHREAD */ diff --git a/tests/unittests/torture_rand.c b/tests/unittests/torture_rand.c index 87ecd9a6..be4390e1 100644 --- a/tests/unittests/torture_rand.c +++ b/tests/unittests/torture_rand.c @@ -12,7 +12,6 @@ #define NUM_LOOPS 20000 #endif #define NUM_THREADS 100 -SSH_THREADS_PTHREAD(ssh_pthread_callbacks); static void setup(){ printf("setup\n"); |