diff options
| author | Jakob Kaivo <jkk@ung.org> | 2024-06-07 14:05:47 -0400 |
|---|---|---|
| committer | Jakob Kaivo <jkk@ung.org> | 2024-06-07 14:05:47 -0400 |
| commit | c195cb021ead7de765a0b37f5ab793802be46731 (patch) | |
| tree | 9ce55bbef9c4e3447051541782f340417e78d090 /src/fenv/fegetexceptflag.c | |
| parent | ee65289f3863fe3ed581dbf035fd77a4b6fba252 (diff) | |
track valid exception flags when calling fegetexceptflag() and check when calling fesetexceptflag()
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; } |
