1*37da2899SCharles.Forsyth #include <lib9.h> 2*37da2899SCharles.Forsyth 3*37da2899SCharles.Forsyth static int strtodf(void * vp)4*37da2899SCharles.Forsythstrtodf(void *vp) 5*37da2899SCharles.Forsyth { 6*37da2899SCharles.Forsyth return *(*((char**)vp))++; 7*37da2899SCharles.Forsyth } 8*37da2899SCharles.Forsyth 9*37da2899SCharles.Forsyth double strtod(char * s,char ** end)10*37da2899SCharles.Forsythstrtod(char *s, char **end) 11*37da2899SCharles.Forsyth { 12*37da2899SCharles.Forsyth double d; 13*37da2899SCharles.Forsyth char *ss; 14*37da2899SCharles.Forsyth int c; 15*37da2899SCharles.Forsyth 16*37da2899SCharles.Forsyth ss = s; 17*37da2899SCharles.Forsyth d = charstod(strtodf, &s); 18*37da2899SCharles.Forsyth /* 19*37da2899SCharles.Forsyth * Fix cases like 2.3e+ , which charstod will consume 20*37da2899SCharles.Forsyth */ 21*37da2899SCharles.Forsyth if(end){ 22*37da2899SCharles.Forsyth *end = --s; 23*37da2899SCharles.Forsyth while(s > ss){ 24*37da2899SCharles.Forsyth c = *--s; 25*37da2899SCharles.Forsyth if(c!='-' && c!='+' && c!='e' && c!='E') 26*37da2899SCharles.Forsyth break; 27*37da2899SCharles.Forsyth (*end)--; 28*37da2899SCharles.Forsyth } 29*37da2899SCharles.Forsyth } 30*37da2899SCharles.Forsyth return d; 31*37da2899SCharles.Forsyth } 32