summaryrefslogtreecommitdiffstats
path: root/mdk-stage1/dietlibc/lib/strtold.c
diff options
context:
space:
mode:
Diffstat (limited to 'mdk-stage1/dietlibc/lib/strtold.c')
-rw-r--r--mdk-stage1/dietlibc/lib/strtold.c66
1 files changed, 0 insertions, 66 deletions
diff --git a/mdk-stage1/dietlibc/lib/strtold.c b/mdk-stage1/dietlibc/lib/strtold.c
deleted file mode 100644
index ae5f0fa48..000000000
--- a/mdk-stage1/dietlibc/lib/strtold.c
+++ /dev/null
@@ -1,66 +0,0 @@
-#include <string.h>
-#include <stdlib.h>
-#include <ctype.h>
-
-long double strtold(const char* s, char** endptr) {
- register const char* p = s;
- register long double value = 0.L;
- int sign = +1;
- long double factor;
- unsigned int expo;
-
- while ( isspace(*p) )
- p++;
-
- switch (*p) {
- case '-': sign = -1;
- case '+': p++;
- default : break;
- }
-
- while ( (unsigned int)(*p - '0') < 10u )
- value = value*10 + (*p++ - '0');
-
- if ( *p == '.' ) {
- factor = 1.;
-
- p++;
- while ( (unsigned int)(*p - '0') < 10u ) {
- factor *= 0.1;
- value += (*p++ - '0') * factor;
- }
- }
-
- if ( (*p | 32) == 'e' ) {
- expo = 0;
- factor = 10.L;
-
- switch (*++p) { // ja hier weiß ich nicht, was mindestens nach einem 'E' folgenden MUSS.
- case '-': factor = 0.1;
- case '+': p++;
- break;
- case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9':
- break;
- default : value = 0.L;
- p = s;
- goto done;
- }
-
- while ( (unsigned int)(*p - '0') < 10u )
- expo = 10 * expo + (*p++ - '0');
-
- while ( 1 ) {
- if ( expo & 1 )
- value *= factor;
- if ( (expo >>= 1) == 0 )
- break;
- factor *= factor;
- }
- }
-
-done:
- if ( endptr != NULL )
- *endptr = (char*)p;
-
- return value * sign;
-}