aboutsummaryrefslogtreecommitdiff
path: root/src/threads
diff options
context:
space:
mode:
authorAris Adamantiadis <aris@0xbadc0de.be>2010-09-06 14:51:01 +0200
committerAris Adamantiadis <aris@0xbadc0de.be>2010-09-06 14:51:01 +0200
commit2cca490076841b431d7a83d020d90e1ad00bbca5 (patch)
tree6c42026aed29faeeb4d8e28ad3f11a4288517887 /src/threads
parentf7842e3a4b9acea2126ff725f993c299aef0e6db (diff)
downloadlibssh-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')
-rw-r--r--src/threads/pthread.c84
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 */