diff options
Diffstat (limited to 'src/fenv/fegetenv.c')
-rw-r--r-- | src/fenv/fegetenv.c | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/src/fenv/fegetenv.c b/src/fenv/fegetenv.c index 9a40e83b..554e2b9c 100644 --- a/src/fenv/fegetenv.c +++ b/src/fenv/fegetenv.c @@ -1,10 +1,20 @@ #include <fenv.h> +#include <stdlib.h> #include "_fenv.h" int fegetenv(fenv_t *envp) { SIGNAL_SAFE(0); - (void)envp; + ASSERT_NONNULL(envp); + if (!(envp->__impl >= __fenv_h.fenv && envp->__impl <= __fenv_h.fenv + __fenv_h.nfenv)) { + struct __fenv_t *tmp = realloc(__fenv_h.fenv, sizeof(*__fenv_h.fenv) * (__fenv_h.nfenv + 1)); + if (tmp == NULL) { + abort(); + } + __fenv_h.fenv = tmp; + envp->__impl = &(__fenv_h.fenv[__fenv_h.nfenv++]); + } + /* TODO: save state in envp->__impl */ return 0; } |