summaryrefslogtreecommitdiff
path: root/src/ath.c
diff options
context:
space:
mode:
authorMoritz Schulte <mo@g10code.com>2003-08-27 14:53:29 +0000
committerMoritz Schulte <mo@g10code.com>2003-08-27 14:53:29 +0000
commit5024734ba4f2e9b13a4b5c0ed05c0e8324e1b6de (patch)
tree857ff6928d03633c8564c34d39784e21a9778fe6 /src/ath.c
parent07259b9e3ec87fd9b4549d176fd98ce599c14494 (diff)
downloadlibgcrypt-5024734ba4f2e9b13a4b5c0ed05c0e8324e1b6de.tar.gz
2003-08-27 Moritz Schulte <mo@g10code.com>
* libgcrypt-config.in: Adjusted script for new thread handling. * Makefile.am: New version, based on GPGMEs Makefile.am. * ath.c, ath-compat.c, ath.h, ath-pth.c, ath-pth-compat.c, ath-pthread.c, ath-pthread-compat.c: New files, merged from GPGME. * ath.c, ath.h, ath-pthread.c, ath-pth.c: Removed files.
Diffstat (limited to 'src/ath.c')
-rw-r--r--src/ath.c182
1 files changed, 79 insertions, 103 deletions
diff --git a/src/ath.c b/src/ath.c
index 33f82d20..36d896ef 100644
--- a/src/ath.c
+++ b/src/ath.c
@@ -1,140 +1,102 @@
-/* ath.c - self-adapting thread-safeness library
- * Copyright (C) 2002 g10 Code GmbH
- * Copyright (C) 2002 Free Software Foundation, Inc.
- *
- * This file is part of Libgcrypt.
- *
- * Libgcrypt 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.
- *
- * Libgcrypt 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 this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
+/* ath.c - Thread-safeness library.
+ Copyright (C) 2002, 2003 g10 Code GmbH
+
+ This file is part of Libgcrypt.
+
+ Libgcrypt is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 2 of the License,
+ or (at your option) any later version.
+
+ Libgcrypt 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
+ General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Libgcrypt; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+ 02111-1307, USA. */
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif
+#include <assert.h>
#include <unistd.h>
-#ifndef HAVE_DOSISH_SYSTEM
#ifdef HAVE_SYS_SELECT_H
-#include <sys/select.h>
+# include <sys/select.h>
#else
-#include <sys/time.h>
+# include <sys/time.h>
#endif
#include <sys/types.h>
#include <sys/wait.h>
-#endif /*HAVE_DOSISH_SYSTEM*/
#include "ath.h"
-static struct ath_ops *ath_ops;
-void
-ath_init (void)
-{
-#ifdef HAVE_PTHREAD
- if (!ath_ops)
- ath_ops = ath_pthread_available ();
-#endif
-#ifdef HAVE_PTH
- if (!ath_ops)
- ath_ops = ath_pth_available ();
-#endif
-#ifdef HAVE_ATH_DUMMY
- if (!ath_ops)
- ath_ops = ath_dummy_available ();
-#endif
-}
-
-
-/* This function is in general not very useful but due to some
- backward compatibiltiy we need ot for gcry_control
- (GCRYCTL_DISABLE_INTERNAL_LOCKING). */
-void
-ath_deinit (void)
-{
- /* fixme: We should deallocate the resource. */
- ath_ops = NULL;
-}
+#define MUTEX_UNLOCKED ((ath_mutex_t) 0)
+#define MUTEX_LOCKED ((ath_mutex_t) 1)
+#define MUTEX_DESTROYED ((ath_mutex_t) 2)
int
ath_mutex_init (ath_mutex_t *lock)
{
- if (!ath_ops)
- return 0;
-
- return ath_ops->mutex_init (lock, 0);
+#ifndef NDEBUG
+ *lock = MUTEX_UNLOCKED;
+#endif
+ return 0;
}
int
ath_mutex_destroy (ath_mutex_t *lock)
{
- int err;
- if (!ath_ops)
- return 0;
- err = ath_ops->mutex_init (lock, 1);
- if (!err)
- err = ath_ops->mutex_destroy (*lock);
- return err;
+#ifndef NDEBUG
+ assert (*lock == MUTEX_UNLOCKED);
+
+ *lock = MUTEX_DESTROYED;
+#endif
+ return 0;
}
int
ath_mutex_lock (ath_mutex_t *lock)
{
- int err;
-
- if (!ath_ops)
- return 0;
- err = ath_ops->mutex_init (lock, 1);
- if (!err)
- err = ath_ops->mutex_lock (*lock);
- return err;
+#ifndef NDEBUG
+ assert (*lock == MUTEX_UNLOCKED);
+
+ *lock = MUTEX_LOCKED;
+#endif
+ return 0;
}
int
ath_mutex_unlock (ath_mutex_t *lock)
{
- int err;
-
- if (!ath_ops)
- return 0;
- err = ath_ops->mutex_init (lock, 1);
- if (!err)
- err = ath_ops->mutex_unlock (*lock);
- return err;
+#ifndef NDEBUG
+ assert (*lock == MUTEX_LOCKED);
+
+ *lock = MUTEX_UNLOCKED;
+#endif
+ return 0;
}
ssize_t
ath_read (int fd, void *buf, size_t nbytes)
{
- if (ath_ops && ath_ops->read)
- return ath_ops->read (fd, buf, nbytes);
- else
- return read (fd, buf, nbytes);
+ return read (fd, buf, nbytes);
}
ssize_t
ath_write (int fd, const void *buf, size_t nbytes)
{
- if (ath_ops && ath_ops->write)
- return ath_ops->write (fd, buf, nbytes);
- else
- return write (fd, buf, nbytes);
+ return write (fd, buf, nbytes);
}
@@ -142,26 +104,40 @@ ssize_t
ath_select (int nfd, fd_set *rset, fd_set *wset, fd_set *eset,
struct timeval *timeout)
{
-#ifdef HAVE_DOSISH_SYSTEM
- return 0;
-#else
- if (ath_ops && ath_ops->select)
- return ath_ops->select (nfd, rset, wset, eset, timeout);
- else
- return select (nfd, rset, wset, eset, timeout);
-#endif
+ return select (nfd, rset, wset, eset, timeout);
}
ssize_t
ath_waitpid (pid_t pid, int *status, int options)
{
-#ifdef HAVE_DOSISH_SYSTEM
- return 0;
-#else
- if (ath_ops && ath_ops->waitpid)
- return ath_ops->waitpid (pid, status, options);
- else
- return waitpid (pid, status, options);
-#endif
+ return waitpid (pid, status, options);
+}
+
+
+int
+ath_accept (int s, struct sockaddr *addr, socklen_t *length_ptr)
+{
+ return accept (s, addr, length_ptr);
+}
+
+
+int
+ath_connect (int s, struct sockaddr *addr, socklen_t length)
+{
+ return connect (s, addr, length);
+}
+
+
+int
+ath_sendmsg (int s, const struct msghdr *msg, int flags)
+{
+ return sendmsg (s, msg, flags);
+}
+
+
+int
+ath_recvmsg (int s, struct msghdr *msg, int flags)
+{
+ return recvmsg (s, msg, flags);
}