diff options
author | Aris Adamantiadis <aris@0xbadc0de.be> | 2010-09-06 14:51:01 +0200 |
---|---|---|
committer | Aris Adamantiadis <aris@0xbadc0de.be> | 2010-09-06 14:51:01 +0200 |
commit | 2cca490076841b431d7a83d020d90e1ad00bbca5 (patch) | |
tree | 6c42026aed29faeeb4d8e28ad3f11a4288517887 /src/threads/pthread.c | |
parent | f7842e3a4b9acea2126ff725f993c299aef0e6db (diff) | |
download | libssh-2cca490076841b431d7a83d020d90e1ad00bbca5.tar.gz libssh-2cca490076841b431d7a83d020d90e1ad00bbca5.tar.xz libssh-2cca490076841b431d7a83d020d90e1ad00bbca5.zip |
Moved pthread specific code in src/threads/pthread.c
pthread example doesn't compile du to the lack of
libssh_threads_native.so library
Diffstat (limited to 'src/threads/pthread.c')
-rw-r--r-- | src/threads/pthread.c | 84 |
1 files changed, 84 insertions, 0 deletions
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 */ |