diff options
Diffstat (limited to 'src/fenv/fegetexceptflag.c')
-rw-r--r-- | src/fenv/fegetexceptflag.c | 10 |
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; } |