~hitmuri/vjpirate/trunk

« back to all changes in this revision

Viewing changes to os/win/include/semaphore.h

  • Committer: Florent Berthaut
  • Date: 2014-07-26 18:53:16 UTC
  • mfrom: (5.1.12 mac)
  • Revision ID: flo@localhost.localdomain-20140726185316-c2ucnwmgm5kij4e2
Merged mac branch

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
 * Module: semaphore.h
 
3
 *
 
4
 * Purpose:
 
5
 *      Semaphores aren't actually part of the PThreads standard.
 
6
 *      They are defined by the POSIX Standard:
 
7
 *
 
8
 *              POSIX 1003.1b-1993      (POSIX.1b)
 
9
 *
 
10
 * --------------------------------------------------------------------------
 
11
 *
 
12
 *      Pthreads-win32 - POSIX Threads Library for Win32
 
13
 *      Copyright(C) 1998 John E. Bossom
 
14
 *      Copyright(C) 1999,2005 Pthreads-win32 contributors
 
15
 * 
 
16
 *      Contact Email: rpj@callisto.canberra.edu.au
 
17
 * 
 
18
 *      The current list of contributors is contained
 
19
 *      in the file CONTRIBUTORS included with the source
 
20
 *      code distribution. The list can also be seen at the
 
21
 *      following World Wide Web location:
 
22
 *      http://sources.redhat.com/pthreads-win32/contributors.html
 
23
 * 
 
24
 *      This library is free software; you can redistribute it and/or
 
25
 *      modify it under the terms of the GNU Lesser General Public
 
26
 *      License as published by the Free Software Foundation; either
 
27
 *      version 2 of the License, or (at your option) any later version.
 
28
 * 
 
29
 *      This library is distributed in the hope that it will be useful,
 
30
 *      but WITHOUT ANY WARRANTY; without even the implied warranty of
 
31
 *      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 
32
 *      Lesser General Public License for more details.
 
33
 * 
 
34
 *      You should have received a copy of the GNU Lesser General Public
 
35
 *      License along with this library in the file COPYING.LIB;
 
36
 *      if not, write to the Free Software Foundation, Inc.,
 
37
 *      59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
 
38
 */
 
39
#if !defined( SEMAPHORE_H )
 
40
#define SEMAPHORE_H
 
41
 
 
42
#undef PTW32_LEVEL
 
43
 
 
44
#if defined(_POSIX_SOURCE)
 
45
#define PTW32_LEVEL 0
 
46
/* Early POSIX */
 
47
#endif
 
48
 
 
49
#if defined(_POSIX_C_SOURCE) && _POSIX_C_SOURCE >= 199309
 
50
#undef PTW32_LEVEL
 
51
#define PTW32_LEVEL 1
 
52
/* Include 1b, 1c and 1d */
 
53
#endif
 
54
 
 
55
#if defined(INCLUDE_NP)
 
56
#undef PTW32_LEVEL
 
57
#define PTW32_LEVEL 2
 
58
/* Include Non-Portable extensions */
 
59
#endif
 
60
 
 
61
#define PTW32_LEVEL_MAX 3
 
62
 
 
63
#if !defined(PTW32_LEVEL)
 
64
#define PTW32_LEVEL PTW32_LEVEL_MAX
 
65
/* Include everything */
 
66
#endif
 
67
 
 
68
#if __GNUC__ && ! defined (__declspec)
 
69
# error Please upgrade your GNU compiler to one that supports __declspec.
 
70
#endif
 
71
 
 
72
/*
 
73
 * When building the DLL code, you should define PTW32_BUILD so that
 
74
 * the variables/functions are exported correctly. When using the DLL,
 
75
 * do NOT define PTW32_BUILD, and then the variables/functions will
 
76
 * be imported correctly.
 
77
 */
 
78
#ifndef PTW32_STATIC_LIB
 
79
#  ifdef PTW32_BUILD
 
80
#    define PTW32_DLLPORT __declspec (dllexport)
 
81
#  else
 
82
#    define PTW32_DLLPORT __declspec (dllimport)
 
83
#  endif
 
84
#else
 
85
#  define PTW32_DLLPORT
 
86
#endif
 
87
 
 
88
/*
 
89
 * This is a duplicate of what is in the autoconf config.h,
 
90
 * which is only used when building the pthread-win32 libraries.
 
91
 */
 
92
 
 
93
#ifndef PTW32_CONFIG_H
 
94
#  if defined(WINCE)
 
95
#    define NEED_ERRNO
 
96
#    define NEED_SEM
 
97
#  endif
 
98
#  if defined(_UWIN) || defined(__MINGW32__)
 
99
#    define HAVE_MODE_T
 
100
#  endif
 
101
#endif
 
102
 
 
103
/*
 
104
 *
 
105
 */
 
106
 
 
107
#if PTW32_LEVEL >= PTW32_LEVEL_MAX
 
108
#ifdef NEED_ERRNO
 
109
#include "need_errno.h"
 
110
#else
 
111
#include <errno.h>
 
112
#endif
 
113
#endif /* PTW32_LEVEL >= PTW32_LEVEL_MAX */
 
114
 
 
115
#define _POSIX_SEMAPHORES
 
116
 
 
117
#ifdef __cplusplus
 
118
extern "C"
 
119
{
 
120
#endif                          /* __cplusplus */
 
121
 
 
122
#ifndef HAVE_MODE_T
 
123
typedef unsigned int mode_t;
 
124
#endif
 
125
 
 
126
 
 
127
typedef struct sem_t_ * sem_t;
 
128
 
 
129
PTW32_DLLPORT int __cdecl sem_init (sem_t * sem,
 
130
                            int pshared,
 
131
                            unsigned int value);
 
132
 
 
133
PTW32_DLLPORT int __cdecl sem_destroy (sem_t * sem);
 
134
 
 
135
PTW32_DLLPORT int __cdecl sem_trywait (sem_t * sem);
 
136
 
 
137
PTW32_DLLPORT int __cdecl sem_wait (sem_t * sem);
 
138
 
 
139
PTW32_DLLPORT int __cdecl sem_timedwait (sem_t * sem,
 
140
                                 const struct timespec * abstime);
 
141
 
 
142
PTW32_DLLPORT int __cdecl sem_post (sem_t * sem);
 
143
 
 
144
PTW32_DLLPORT int __cdecl sem_post_multiple (sem_t * sem,
 
145
                                     int count);
 
146
 
 
147
PTW32_DLLPORT int __cdecl sem_open (const char * name,
 
148
                            int oflag,
 
149
                            mode_t mode,
 
150
                            unsigned int value);
 
151
 
 
152
PTW32_DLLPORT int __cdecl sem_close (sem_t * sem);
 
153
 
 
154
PTW32_DLLPORT int __cdecl sem_unlink (const char * name);
 
155
 
 
156
PTW32_DLLPORT int __cdecl sem_getvalue (sem_t * sem,
 
157
                                int * sval);
 
158
 
 
159
#ifdef __cplusplus
 
160
}                               /* End of extern "C" */
 
161
#endif                          /* __cplusplus */
 
162
 
 
163
#undef PTW32_LEVEL
 
164
#undef PTW32_LEVEL_MAX
 
165
 
 
166
#endif                          /* !SEMAPHORE_H */