summaryrefslogtreecommitdiff
path: root/libs/pthreads/src/semaphore.h
diff options
context:
space:
mode:
Diffstat (limited to 'libs/pthreads/src/semaphore.h')
-rw-r--r--libs/pthreads/src/semaphore.h203
1 files changed, 76 insertions, 127 deletions
diff --git a/libs/pthreads/src/semaphore.h b/libs/pthreads/src/semaphore.h
index c6e9407e25..1288be8955 100644
--- a/libs/pthreads/src/semaphore.h
+++ b/libs/pthreads/src/semaphore.h
@@ -9,161 +9,110 @@
*
* --------------------------------------------------------------------------
*
- * Pthreads-win32 - POSIX Threads Library for Win32
+ * Pthreads4w - POSIX Threads Library for Win32
* Copyright(C) 1998 John E. Bossom
- * Copyright(C) 1999,2005 Pthreads-win32 contributors
- *
- * Contact Email: rpj@callisto.canberra.edu.au
- *
+ * Copyright(C) 1999-2018, Pthreads4w contributors
+ *
+ * Homepage: https://sourceforge.net/projects/pthreads4w/
+ *
* The current list of contributors is contained
* in the file CONTRIBUTORS included with the source
* code distribution. The list can also be seen at the
* following World Wide Web location:
- * http://sources.redhat.com/pthreads-win32/contributors.html
- *
- * This library 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 of the License, or (at your option) any later version.
- *
- * This library 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 library in the file COPYING.LIB;
- * if not, write to the Free Software Foundation, Inc.,
- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
+ * https://sourceforge.net/p/pthreads4w/wiki/Contributors/
+ *
+ * This file is part of Pthreads4w.
+ *
+ * Pthreads4w 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 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Pthreads4w 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 Pthreads4w. If not, see <http://www.gnu.org/licenses/>. *
*/
#if !defined( SEMAPHORE_H )
#define SEMAPHORE_H
-#undef PTW32_SEMAPHORE_LEVEL
-
-#if defined(_POSIX_SOURCE)
-#define PTW32_SEMAPHORE_LEVEL 0
-/* Early POSIX */
-#endif
-
-#if defined(_POSIX_C_SOURCE) && _POSIX_C_SOURCE >= 199309
-#undef PTW32_SEMAPHORE_LEVEL
-#define PTW32_SEMAPHORE_LEVEL 1
-/* Include 1b, 1c and 1d */
-#endif
-
-#if defined(INCLUDE_NP)
-#undef PTW32_SEMAPHORE_LEVEL
-#define PTW32_SEMAPHORE_LEVEL 2
-/* Include Non-Portable extensions */
-#endif
-
-#define PTW32_SEMAPHORE_LEVEL_MAX 3
-
-#if !defined(PTW32_SEMAPHORE_LEVEL)
-#define PTW32_SEMAPHORE_LEVEL PTW32_SEMAPHORE_LEVEL_MAX
-/* Include everything */
-#endif
-
-#if defined(__GNUC__) && ! defined (__declspec)
-# error Please upgrade your GNU compiler to one that supports __declspec.
-#endif
-
-/*
- * When building the library, you should define PTW32_BUILD so that
- * the variables/functions are exported correctly. When using the library,
- * do NOT define PTW32_BUILD, and then the variables/functions will
- * be imported correctly.
- */
-#if !defined(PTW32_STATIC_LIB)
-# if defined(PTW32_BUILD)
-# define PTW32_DLLPORT __declspec (dllexport)
-# else
-# define PTW32_DLLPORT __declspec (dllimport)
-# endif
-#else
-# define PTW32_DLLPORT
-#endif
-
-/*
- * This is a duplicate of what is in the autoconf config.h,
- * which is only used when building the pthread-win32 libraries.
- */
-
-#if !defined(PTW32_CONFIG_H)
-# if defined(WINCE)
-# define NEED_ERRNO
-# define NEED_SEM
-# endif
-# if defined(__MINGW64__)
-# define HAVE_STRUCT_TIMESPEC
-# define HAVE_MODE_T
-# elif defined(_UWIN) || defined(__MINGW32__)
-# define HAVE_MODE_T
-# endif
-#endif
-
-/*
+/* FIXME: POSIX.1 says that _POSIX_SEMAPHORES should be defined
+ * in <unistd.h>, not here; for later POSIX.1 versions, its value
+ * should match the corresponding _POSIX_VERSION number, but in
+ * the case of POSIX.1b-1993, the value is unspecified.
*
+ * Notwithstanding the above, since POSIX semaphores, (and indeed
+ * having any <unistd.h> to #include), are not a standard feature
+ * on MS-Windows, it is convenient to retain this definition here;
+ * we may consider adding a hook, to make it selectively available
+ * for inclusion by <unistd.h>, in those cases (e.g. MinGW) where
+ * <unistd.h> is provided.
*/
-
-#if PTW32_SEMAPHORE_LEVEL >= PTW32_SEMAPHORE_LEVEL_MAX
-#if defined(NEED_ERRNO)
-#include "need_errno.h"
-#else
-#include <errno.h>
-#endif
-#endif /* PTW32_SEMAPHORE_LEVEL >= PTW32_SEMAPHORE_LEVEL_MAX */
-
#define _POSIX_SEMAPHORES
-#if defined(__cplusplus)
-extern "C"
-{
-#endif /* __cplusplus */
-
-#if !defined(HAVE_MODE_T)
-typedef unsigned int mode_t;
-#endif
+/* Internal macros, common to the public interfaces for various
+ * Pthreads4w components, are defined in <_ptw32.h>; we must
+ * include them here.
+ */
+#include <_ptw32.h>
+/* The sem_timedwait() function was added in POSIX.1-2001; it
+ * requires struct timespec to be defined, at least as a partial
+ * (a.k.a. incomplete) data type. Forward declare it as such,
+ * then include <time.h> selectively, to acquire a complete
+ * definition, (if available).
+ */
+struct timespec;
+#define __need_struct_timespec
+#include <time.h>
+/* The data type used to represent our semaphore implementation,
+ * as required by POSIX.1; FIXME: consider renaming the underlying
+ * structure tag, to avoid possible pollution of user namespace.
+ */
typedef struct sem_t_ * sem_t;
-PTW32_DLLPORT int __cdecl sem_init (sem_t * sem,
- int pshared,
- unsigned int value);
+/* POSIX.1b (and later) mandates SEM_FAILED as the value to be
+ * returned on failure of sem_open(); (our implementation is a
+ * stub, which will always return this).
+ */
+#define SEM_FAILED (sem_t *)(-1)
+
+__PTW32_BEGIN_C_DECLS
-PTW32_DLLPORT int __cdecl sem_destroy (sem_t * sem);
+/* Function prototypes: some are implemented as stubs, which
+ * always fail; (FIXME: identify them).
+ */
+PTW32_DLLPORT int PTW32_CDECL sem_init (sem_t * sem,
+ int pshared,
+ unsigned int value);
-PTW32_DLLPORT int __cdecl sem_trywait (sem_t * sem);
+PTW32_DLLPORT int PTW32_CDECL sem_destroy (sem_t * sem);
-PTW32_DLLPORT int __cdecl sem_wait (sem_t * sem);
+PTW32_DLLPORT int PTW32_CDECL sem_trywait (sem_t * sem);
-PTW32_DLLPORT int __cdecl sem_timedwait (sem_t * sem,
- const struct timespec * abstime);
+PTW32_DLLPORT int PTW32_CDECL sem_wait (sem_t * sem);
-PTW32_DLLPORT int __cdecl sem_post (sem_t * sem);
+PTW32_DLLPORT int PTW32_CDECL sem_timedwait (sem_t * sem,
+ const struct timespec * abstime);
-PTW32_DLLPORT int __cdecl sem_post_multiple (sem_t * sem,
- int count);
+PTW32_DLLPORT int PTW32_CDECL sem_post (sem_t * sem);
-PTW32_DLLPORT int __cdecl sem_open (const char * name,
- int oflag,
- mode_t mode,
- unsigned int value);
+PTW32_DLLPORT int PTW32_CDECL sem_post_multiple (sem_t * sem,
+ int count);
-PTW32_DLLPORT int __cdecl sem_close (sem_t * sem);
+PTW32_DLLPORT sem_t * PTW32_CDECL sem_open (const char *, int, ...);
-PTW32_DLLPORT int __cdecl sem_unlink (const char * name);
+PTW32_DLLPORT int PTW32_CDECL sem_close (sem_t * sem);
-PTW32_DLLPORT int __cdecl sem_getvalue (sem_t * sem,
- int * sval);
+PTW32_DLLPORT int PTW32_CDECL sem_unlink (const char * name);
-#if defined(__cplusplus)
-} /* End of extern "C" */
-#endif /* __cplusplus */
+PTW32_DLLPORT int PTW32_CDECL sem_getvalue (sem_t * sem,
+ int * sval);
-#undef PTW32_SEMAPHORE_LEVEL
-#undef PTW32_SEMAPHORE_LEVEL_MAX
+__PTW32_END_C_DECLS
#endif /* !SEMAPHORE_H */