diff options
author | Jakob Kaivo <jkk@ung.org> | 2024-06-07 13:43:01 -0400 |
---|---|---|
committer | Jakob Kaivo <jkk@ung.org> | 2024-06-07 13:43:01 -0400 |
commit | 85ee577101d7ee7fdafcc73bd73e2a3c3944022d (patch) | |
tree | a545e2fdac8b85ad3d09d17d4f3ef2092a5492e0 /src/fenv/fegetenv.c | |
parent | 5fdba7baaab65651eb5bd431e969d59242e484db (diff) |
track usable fenv_t values
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; } |