summaryrefslogtreecommitdiff
path: root/src/fenv/fegetenv.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/fenv/fegetenv.c')
-rw-r--r--src/fenv/fegetenv.c12
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;
}