Welcome to mirror list, hosted at ThFree Co, Russian Federation.

cygwin.com/git/newlib-cygwin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCorinna Vinschen <corinna@vinschen.de>2008-01-15 12:41:06 +0300
committerCorinna Vinschen <corinna@vinschen.de>2008-01-15 12:41:06 +0300
commit12df8a5b53be662f717944285dc31544b31ce052 (patch)
tree5399d85f708ab86278d8293fb1fe76b6d27b5ea2
parent2652ae1036c9b2d6b8551343692835bcd02ead46 (diff)
* libc/include/machine/setjmp.h (__SIGMASK_FUNC): Define as
pthread_sigmask or sigprocmask depending on _POSIX_THREADS. (sigsetjmp): Use __SIGMASK_FUNC. (siglongjmp): Ditto. (_setjmp): Define as macro. (_longjmp): Ditto.
-rw-r--r--newlib/ChangeLog9
-rw-r--r--newlib/libc/include/machine/setjmp.h20
2 files changed, 25 insertions, 4 deletions
diff --git a/newlib/ChangeLog b/newlib/ChangeLog
index f445db1d1..4bd356c5b 100644
--- a/newlib/ChangeLog
+++ b/newlib/ChangeLog
@@ -1,3 +1,12 @@
+2008-01-15 Corinna Vinschen <corinna@vinschen.de>
+
+ * libc/include/machine/setjmp.h (__SIGMASK_FUNC): Define as
+ pthread_sigmask or sigprocmask depending on _POSIX_THREADS.
+ (sigsetjmp): Use __SIGMASK_FUNC.
+ (siglongjmp): Ditto.
+ (_setjmp): Define as macro.
+ (_longjmp): Ditto.
+
2008-01-11 Eric Blake <ebb9@byu.net>
Make strstr and strcasestr O(n), not O(n^2); add memmem.
diff --git a/newlib/libc/include/machine/setjmp.h b/newlib/libc/include/machine/setjmp.h
index 2b7aeb278..4e850cf2f 100644
--- a/newlib/libc/include/machine/setjmp.h
+++ b/newlib/libc/include/machine/setjmp.h
@@ -268,6 +268,12 @@ typedef int sigjmp_buf[_JBLEN+2];
# define _CYGWIN_WORKING_SIGSETJMP
#endif
+#ifdef _POSIX_THREADS
+#define __SIGMASK_FUNC pthread_sigmask
+#else
+#define __SIGMASK_FUNC sigprocmask
+#endif
+
#if defined(__GNUC__)
#define sigsetjmp(env, savemask) \
@@ -275,7 +281,7 @@ typedef int sigjmp_buf[_JBLEN+2];
({ \
sigjmp_buf *_sjbuf = &(env); \
((*_sjbuf)[_SAVEMASK] = savemask,\
- sigprocmask (SIG_SETMASK, 0, (sigset_t *)((*_sjbuf) + _SIGMASK)),\
+ __SIGMASK_FUNC (SIG_SETMASK, 0, (sigset_t *)((*_sjbuf) + _SIGMASK)),\
setjmp (*_sjbuf)); \
})
@@ -284,7 +290,7 @@ typedef int sigjmp_buf[_JBLEN+2];
({ \
sigjmp_buf *_sjbuf = &(env); \
((((*_sjbuf)[_SAVEMASK]) ? \
- sigprocmask (SIG_SETMASK, (sigset_t *)((*_sjbuf) + _SIGMASK), 0)\
+ __SIGMASK_FUNC (SIG_SETMASK, (sigset_t *)((*_sjbuf) + _SIGMASK), 0)\
: 0), \
longjmp (*_sjbuf, val)); \
})
@@ -292,15 +298,21 @@ typedef int sigjmp_buf[_JBLEN+2];
#else /* !__GNUC__ */
#define sigsetjmp(env, savemask) ((env)[_SAVEMASK] = savemask,\
- sigprocmask (SIG_SETMASK, 0, (sigset_t *) ((env) + _SIGMASK)),\
+ __SIGMASK_FUNC (SIG_SETMASK, 0, (sigset_t *) ((env) + _SIGMASK)),\
setjmp (env))
#define siglongjmp(env, val) ((((env)[_SAVEMASK])?\
- sigprocmask (SIG_SETMASK, (sigset_t *) ((env) + _SIGMASK), 0):0),\
+ __SIGMASK_FUNC (SIG_SETMASK, (sigset_t *) ((env) + _SIGMASK), 0):0),\
longjmp (env, val))
#endif
+/* POSIX _setjmp/_longjmp macros, maintained for XSI compatibility. These
+ are equivalent to sigsetjmp/siglongjmp when not saving the signal mask.
+ New applications should use sigsetjmp/siglongjmp instead. */
+#define _setjmp(env) sigsetjmp ((env), 0)
+#define _longjmp(env, val) siglongjmp ((env), (val))
+
#ifdef __cplusplus
}
#endif