2003-10-06 Marcus Brinkmann <marcus@g10code.de>
[gpgme.git] / gpgme / ath.c
1 /* ath.c - Thread-safeness library.
2    Copyright (C) 2002, 2003 g10 Code GmbH
3
4    This file is part of GPGME.
5  
6    GPGME is free software; you can redistribute it and/or modify it
7    under the terms of the GNU General Public License as published by
8    the Free Software Foundation; either version 2 of the License, or
9    (at your option) any later version.
10  
11    GPGME is distributed in the hope that it will be useful, but
12    WITHOUT ANY WARRANTY; without even the implied warranty of
13    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14    General Public License for more details.
15  
16    You should have received a copy of the GNU General Public License
17    along with GPGME; if not, write to the Free Software Foundation,
18    Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
19
20 #ifdef HAVE_CONFIG_H
21 #include <config.h>
22 #endif
23
24 #include <assert.h>
25 #include <unistd.h>
26 #ifdef HAVE_SYS_SELECT_H
27 # include <sys/select.h>
28 #else
29 # include <sys/time.h>
30 #endif
31 #include <sys/types.h>
32 #include <sys/wait.h>
33
34 #include "ath.h"
35
36
37 #define MUTEX_UNLOCKED  ((ath_mutex_t) 0)
38 #define MUTEX_LOCKED    ((ath_mutex_t) 1)
39 #define MUTEX_DESTROYED ((ath_mutex_t) 2)
40
41
42 int
43 ath_mutex_init (ath_mutex_t *lock)
44 {
45 #ifndef NDEBUG
46   *lock = MUTEX_UNLOCKED;
47 #endif
48   return 0;
49 }
50
51
52 int
53 ath_mutex_destroy (ath_mutex_t *lock)
54 {
55 #ifndef NDEBUG
56   assert (*lock == MUTEX_UNLOCKED);
57
58   *lock = MUTEX_DESTROYED;
59 #endif
60   return 0;
61 }
62
63
64 int
65 ath_mutex_lock (ath_mutex_t *lock)
66 {
67 #ifndef NDEBUG
68   assert (*lock == MUTEX_UNLOCKED);
69
70   *lock = MUTEX_LOCKED;
71 #endif
72   return 0;
73 }
74
75
76 int
77 ath_mutex_unlock (ath_mutex_t *lock)
78 {
79 #ifndef NDEBUG
80   assert (*lock == MUTEX_LOCKED);
81
82   *lock = MUTEX_UNLOCKED;
83 #endif
84   return 0;
85 }
86
87
88 ssize_t
89 ath_read (int fd, void *buf, size_t nbytes)
90 {
91   return read (fd, buf, nbytes);
92 }
93
94
95 ssize_t
96 ath_write (int fd, const void *buf, size_t nbytes)
97 {
98   return write (fd, buf, nbytes);
99 }
100
101
102 ssize_t
103 ath_select (int nfd, fd_set *rset, fd_set *wset, fd_set *eset,
104             struct timeval *timeout)
105 {
106   return select (nfd, rset, wset, eset, timeout);
107 }
108
109  
110 ssize_t
111 ath_waitpid (pid_t pid, int *status, int options)
112 {
113   return waitpid (pid, status, options);
114 }
115
116
117 int
118 ath_accept (int s, struct sockaddr *addr, socklen_t *length_ptr)
119 {
120   return accept (s, addr, length_ptr);
121 }
122
123
124 int
125 ath_connect (int s, const struct sockaddr *addr, socklen_t length)
126 {
127   return connect (s, addr, length);
128 }
129
130
131 int
132 ath_sendmsg (int s, const struct msghdr *msg, int flags)
133 {
134   return sendmsg (s, msg, flags);
135 }
136
137
138 int
139 ath_recvmsg (int s, struct msghdr *msg, int flags)
140 {
141   return recvmsg (s, msg, flags);
142 }