summaryrefslogtreecommitdiff
path: root/src/fenv/fegetexceptflag.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/fenv/fegetexceptflag.c')
-rw-r--r--src/fenv/fegetexceptflag.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/src/fenv/fegetexceptflag.c b/src/fenv/fegetexceptflag.c
index 921dc1b8..ef8517f9 100644
--- a/src/fenv/fegetexceptflag.c
+++ b/src/fenv/fegetexceptflag.c
@@ -5,7 +5,15 @@ int fegetexceptflag(fexcept_t *flagp, int excepts)
{
SIGNAL_SAFE(0);
ASSERT_VALID_EXCEPTION_MASK(excepts);
- (void)flagp; (void)excepts;
+ if (!(flagp->__impl >= __fenv_h.fexcept && flagp->__impl <= __fenv_h.fexcept + __fenv_h.nfexcept)) {
+ struct __fexcept_t *tmp = realloc(__fenv_h.fexcept, sizeof(*__fenv_h.fexcept) * (__fenv_h.nfexcept + 1));
+ if (tmp == NULL) {
+ abort();
+ }
+ __fenv_h.fexcept = tmp;
+ flagp->__impl = &(__fenv_h.fexcept[__fenv_h.nfexcept++]);
+ }
+ flagp->__impl->mask = excepts;
return 0;
}