summaryrefslogtreecommitdiffstats
path: root/contrib/syslinux/latest/com32/lib/math/strtod.c
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/syslinux/latest/com32/lib/math/strtod.c')
-rw-r--r--contrib/syslinux/latest/com32/lib/math/strtod.c156
1 files changed, 0 insertions, 156 deletions
diff --git a/contrib/syslinux/latest/com32/lib/math/strtod.c b/contrib/syslinux/latest/com32/lib/math/strtod.c
deleted file mode 100644
index f99531a..0000000
--- a/contrib/syslinux/latest/com32/lib/math/strtod.c
+++ /dev/null
@@ -1,156 +0,0 @@
-/*
- * strtod.c
- *
- * Convert string to double
- *
- * Copyright (C) 2002 Michael Ringgaard. All rights reserved.
- * Copyright 2006-2008 H. Peter Anvin - All Rights Reserved
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the project nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
- * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
- * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
- * OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include <errno.h>
-#include <ctype.h>
-#include <stdlib.h>
-#include <math.h>
-
-static inline int is_real(double x)
-{
- const double Inf = 1.0 / 0.0;
- return (x < Inf) && (x >= -Inf);
-}
-
-double strtod(const char *str, char **endptr)
-{
- double number;
- int exponent;
- int negative;
- char *p = (char *)str;
- double p10;
- int n;
- int num_digits;
- int num_decimals;
- const double Inf = 1.0 / 0.0;
-
- // Skip leading whitespace
- while (isspace(*p))
- p++;
-
- // Handle optional sign
- negative = 0;
- switch (*p) {
- case '-':
- negative = 1; // Fall through to increment position
- case '+':
- p++;
- }
-
- number = 0.;
- exponent = 0;
- num_digits = 0;
- num_decimals = 0;
-
- // Process string of digits
- while (isdigit(*p)) {
- number = number * 10. + (*p - '0');
- p++;
- num_digits++;
- }
-
- // Process decimal part
- if (*p == '.') {
- p++;
-
- while (isdigit(*p)) {
- number = number * 10. + (*p - '0');
- p++;
- num_digits++;
- num_decimals++;
- }
-
- exponent -= num_decimals;
- }
-
- if (num_digits == 0) {
- errno = ERANGE;
- return 0.0;
- }
- // Correct for sign
- if (negative)
- number = -number;
-
- // Process an exponent string
- if (*p == 'e' || *p == 'E') {
- // Handle optional sign
- negative = 0;
- switch (*++p) {
- case '-':
- negative = 1; // Fall through to increment pos
- case '+':
- p++;
- }
-
- // Process string of digits
- n = 0;
- while (isdigit(*p)) {
- n = n * 10 + (*p - '0');
- p++;
- }
-
- if (negative)
- exponent -= n;
- else
- exponent += n;
- }
-
- if (exponent < __DBL_MIN_EXP__ || exponent > __DBL_MAX_EXP__) {
- errno = ERANGE;
- return Inf;
- }
- // Scale the result
- p10 = 10.;
- n = exponent;
- if (n < 0)
- n = -n;
- while (n) {
- if (n & 1) {
- if (exponent < 0)
- number /= p10;
- else
- number *= p10;
- }
- n >>= 1;
- p10 *= p10;
- }
-
- if (!is_real(number))
- errno = ERANGE;
- if (endptr)
- *endptr = p;
-
- return number;
-}