2004-04-22 Marcus Brinkmann <marcus@g10code.de>
[libgcrypt.git] / src / ath.h
index b01e07a..d492c2a 100644 (file)
--- a/src/ath.h
+++ b/src/ath.h
@@ -1,5 +1,5 @@
 /* ath.h - Thread-safeness library.
-   Copyright (C) 2002, 2003 g10 Code GmbH
+   Copyright (C) 2002, 2003, 2004 g10 Code GmbH
 
    This file is part of Libgcrypt.
  
@@ -30,6 +30,9 @@ typedef int pid_t;
 #include <sys/types.h>
 #include <sys/socket.h>
 #endif
+#include <gpg-error.h>
+
+#include <config.h>
 
 \f
 /* Define _ATH_EXT_SYM_PREFIX if you want to give all external symbols
@@ -40,6 +43,8 @@ typedef int pid_t;
 #define _ATH_PREFIX1(x,y) x ## y
 #define _ATH_PREFIX2(x,y) _ATH_PREFIX1(x,y)
 #define _ATH_PREFIX(x) _ATH_PREFIX2(_ATH_EXT_SYM_PREFIX,x)
+#define ath_install _ATH_PREFIX(ath_install)
+#define ath_init _ATH_PREFIX(ath_init)
 #define ath_mutex_init _ATH_PREFIX(ath_mutex_init)
 #define ath_mutex_destroy _ATH_PREFIX(ath_mutex_destroy)
 #define ath_mutex_lock _ATH_PREFIX(ath_mutex_lock)
@@ -55,15 +60,47 @@ typedef int pid_t;
 #endif
 
 \f
+enum ath_thread_option
+  {
+    ATH_THREAD_OPTION_DEFAULT = 0,
+    ATH_THREAD_OPTION_USER = 1,
+    ATH_THREAD_OPTION_PTH = 2,
+    ATH_THREAD_OPTION_PTHREAD = 3
+  };
+
+struct ath_ops
+{
+  enum ath_thread_option option;
+  int (*init) (void);
+  int (*mutex_init) (void **priv);
+  int (*mutex_destroy) (void *priv);
+  int (*mutex_lock) (void *priv);
+  int (*mutex_unlock) (void *priv);
+  ssize_t (*read) (int fd, void *buf, size_t nbytes);
+  ssize_t (*write) (int fd, const void *buf, size_t nbytes);
+  ssize_t (*select) (int nfd, fd_set *rset, fd_set *wset, fd_set *eset,
+                    struct timeval *timeout);
+  ssize_t (*waitpid) (pid_t pid, int *status, int options);
+  int (*accept) (int s, struct sockaddr *addr, socklen_t *length_ptr);
+  int (*connect) (int s, struct sockaddr *addr, socklen_t length);
+  int (*sendmsg) (int s, const struct msghdr *msg, int flags);
+  int (*recvmsg) (int s, struct msghdr *msg, int flags);
+};
+
+gpg_err_code_t ath_install (struct ath_ops *ath_ops, int check_only);
+int ath_init (void);
+
+
+/* Functions for mutual exclusion.  */
 typedef void *ath_mutex_t;
 #define ATH_MUTEX_INITIALIZER 0
 
-/* Functions for mutual exclusion.  */
 int ath_mutex_init (ath_mutex_t *mutex);
 int ath_mutex_destroy (ath_mutex_t *mutex);
 int ath_mutex_lock (ath_mutex_t *mutex);
 int ath_mutex_unlock (ath_mutex_t *mutex);
 
+
 /* Replacement for the POSIX functions, which can be used to allow
    other (user-level) threads to run.  */
 ssize_t ath_read (int fd, void *buf, size_t nbytes);
@@ -73,41 +110,7 @@ ssize_t ath_select (int nfd, fd_set *rset, fd_set *wset, fd_set *eset,
 ssize_t ath_waitpid (pid_t pid, int *status, int options);
 int ath_accept (int s, struct sockaddr *addr, socklen_t *length_ptr);
 int ath_connect (int s, struct sockaddr *addr, socklen_t length);
-#ifndef _WIN32
 int ath_sendmsg (int s, const struct msghdr *msg, int flags);
 int ath_recvmsg (int s, struct msghdr *msg, int flags);
-#endif
-
-#define _ATH_COMPAT
-#ifdef _ATH_COMPAT
-struct ath_ops
-{
-  int (*mutex_init) (void **priv, int just_check);
-  int (*mutex_destroy) (void *priv);
-  int (*mutex_lock) (void *priv);
-  int (*mutex_unlock) (void *priv);
-  ssize_t (*read) (int fd, void *buf, size_t nbytes);
-  ssize_t (*write) (int fd, const void *buf, size_t nbytes);
-  ssize_t (*select) (int nfd, fd_set *rset, fd_set *wset, fd_set *eset,
-                    struct timeval *timeout);
-  ssize_t (*waitpid) (pid_t pid, int *status, int options);
-  int (*accept) (int s, struct sockaddr *addr, socklen_t *length_ptr);
-  int (*connect) (int s, struct sockaddr *addr, socklen_t length);
-#ifndef WIN32
-  int (*sendmsg) (int s, const struct msghdr *msg, int flags);
-  int (*recvmsg) (int s, struct msghdr *msg, int flags);
-#endif
-};
-
-/* Initialize the any-thread package.  */
-#define ath_init _ATH_PREFIX(ath_init)
-void ath_init (void);
-
-/* Used by ath_pkg_init.  */
-#define ath_pthread_available _ATH_PREFIX(ath_pthread_available)
-struct ath_ops *ath_pthread_available (void);
-#define ath_pth_available _ATH_PREFIX(ath_pth_available)
-struct ath_ops *ath_pth_available (void);
-#endif
 
 #endif /* ATH_H */