aboutsummaryrefslogtreecommitdiffstats
path: root/gpgme/ath.c
diff options
context:
space:
mode:
authorMarcus Brinkmann <[email protected]>2003-08-20 20:20:46 +0000
committerMarcus Brinkmann <[email protected]>2003-08-20 20:20:46 +0000
commit0217495902bbb33d3c429599885192c3aec295e6 (patch)
tree4dc536749c85c1fa9c72a1464f2730d5a2dfc502 /gpgme/ath.c
parent2003-08-18 Marcus Brinkmann <[email protected]> (diff)
downloadgpgme-0217495902bbb33d3c429599885192c3aec295e6.tar.gz
gpgme-0217495902bbb33d3c429599885192c3aec295e6.zip
2003-08-18 Marcus Brinkmann <[email protected]>
*configure.ac (AM_PATH_GPG_ERROR): Require 0.3. assuan/ See README.1st. gpgme/ 2003-08-19 Marcus Brinkmann <[email protected]> The ath files (ath.h, ath.c, ath-pth.c, ath-pthread.c, ath-compat.c, ath-pth-compat.c and ath-pthread-compat.c) have been updated to have better thread support, and the Makefile.am was changed to reflect that. * util.h [!HAVE_FOPENCOOKIE]: Remove fopencookie declaration. * engine-gpgsm.c (gpgsm_assuan_simple_command): Set ERR to return value of status_fnc. * rungpg.c (start): Return SAVED_ERRNO, not errno.
Diffstat (limited to '')
-rw-r--r--gpgme/ath.c155
1 files changed, 76 insertions, 79 deletions
diff --git a/gpgme/ath.c b/gpgme/ath.c
index 1d8d94be..cdef2b82 100644
--- a/gpgme/ath.c
+++ b/gpgme/ath.c
@@ -1,27 +1,27 @@
-/* ath.c - self-adapting thread-safeness library
- * Copyright (C) 2002 g10 Code GmbH
- *
- * This file is part of GPGME.
- *
- * GPGME 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.
- *
- * GPGME 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 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 GPGME.
+
+ GPGME 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.
+
+ GPGME 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 GPGME; 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>
#ifdef HAVE_SYS_SELECT_H
# include <sys/select.h>
@@ -33,94 +33,69 @@
#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
-}
+#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);
}
@@ -128,18 +103,40 @@ ssize_t
ath_select (int nfd, fd_set *rset, fd_set *wset, fd_set *eset,
struct timeval *timeout)
{
- if (ath_ops && ath_ops->select)
- return ath_ops->select (nfd, rset, wset, eset, timeout);
- else
- return select (nfd, rset, wset, eset, timeout);
+ return select (nfd, rset, wset, eset, timeout);
}
ssize_t
ath_waitpid (pid_t pid, int *status, int options)
{
- if (ath_ops && ath_ops->waitpid)
- return ath_ops->waitpid (pid, status, options);
- else
- return waitpid (pid, status, options);
+ 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);
}