diff options
author | Moritz Schulte <mo@g10code.com> | 2003-08-27 14:53:29 +0000 |
---|---|---|
committer | Moritz Schulte <mo@g10code.com> | 2003-08-27 14:53:29 +0000 |
commit | 5024734ba4f2e9b13a4b5c0ed05c0e8324e1b6de (patch) | |
tree | 857ff6928d03633c8564c34d39784e21a9778fe6 /src/ath.c | |
parent | 07259b9e3ec87fd9b4549d176fd98ce599c14494 (diff) | |
download | libgcrypt-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.c | 182 |
1 files changed, 79 insertions, 103 deletions
@@ -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); } |