summaryrefslogtreecommitdiff
path: root/StdLib/LibC/gdtoa/strtold_subr.c
diff options
context:
space:
mode:
Diffstat (limited to 'StdLib/LibC/gdtoa/strtold_subr.c')
-rw-r--r--StdLib/LibC/gdtoa/strtold_subr.c45
1 files changed, 45 insertions, 0 deletions
diff --git a/StdLib/LibC/gdtoa/strtold_subr.c b/StdLib/LibC/gdtoa/strtold_subr.c
new file mode 100644
index 0000000000..db85fe8f23
--- /dev/null
+++ b/StdLib/LibC/gdtoa/strtold_subr.c
@@ -0,0 +1,45 @@
+/* $NetBSD: strtold_subr.c,v 1.1 2006/03/15 17:35:18 kleink Exp $ */
+
+/*
+ * Written by Klaus Klein <kleink@NetBSD.org>, November 16, 2005.
+ * Public domain.
+ */
+
+/*
+ * NOTICE: This is not a standalone file. To use it, #include it in
+ * the format-specific strtold_*.c, like so:
+ *
+ * #define GDTOA_LD_FMT <gdtoa extended-precision format code>
+ * #include "strtold_subr.c"
+ */
+#include <LibConfig.h>
+#include <sys/EfiCdefs.h>
+
+#include "namespace.h"
+#include <math.h>
+#include <sys/stdint.h>
+#include <stdlib.h>
+#include "gdtoa.h"
+
+#ifdef __weak_alias
+__weak_alias(strtold, _strtold)
+#endif
+
+#ifndef __HAVE_LONG_DOUBLE
+#error no extended-precision long double type
+#endif
+
+#ifndef GDTOA_LD_FMT
+#error GDTOA_LD_FMT must be defined by format-specific source file
+#endif
+
+#define STRTOP(x) __CONCAT(strtop, x)
+
+long double
+strtold(const char *nptr, char **endptr)
+{
+ long double ld;
+
+ (void)STRTOP(GDTOA_LD_FMT)(nptr, endptr, &ld);
+ return ld;
+}