Loading...
stdlib.subproj/strtod.c Libc-167 Libc-186
--- Libc/Libc-167/stdlib.subproj/strtod.c
+++ Libc/Libc-186/stdlib.subproj/strtod.c
@@ -386,7 +386,7 @@
 #ifdef __cplusplus
 extern "C" double strtod(const char *s00, char **se);
 extern "C" char *__dtoa(double d, int mode, int ndigits,
-			int *decpt, int *sign, char **rve);
+			int *decpt, int *sign, char **rve, char **resultp);
 #endif
 
  struct
@@ -398,8 +398,6 @@
 
  typedef struct Bigint Bigint;
 
- static Bigint *freelist[Kmax+1];
-
  static Bigint *
 Balloc
 #ifdef KR_headers
@@ -411,18 +409,13 @@
 	int x;
 	Bigint *rv;
 
-	if (rv = freelist[k]) {
-		freelist[k] = rv->next;
-		}
-	else {
-		x = 1 << k;
-		rv = (Bigint *)MALLOC(sizeof(Bigint) + (x-1)*sizeof(Long));
-		rv->k = k;
-		rv->maxwds = x;
-		}
+	x = 1 << k;
+	rv = (Bigint *)malloc(sizeof(Bigint) + (x-1)*sizeof(Long));
+	rv->k = k;
+	rv->maxwds = x;
 	rv->sign = rv->wds = 0;
 	return rv;
-	}
+}
 
  static void
 Bfree
@@ -432,11 +425,8 @@
 	(Bigint *v)
 #endif
 {
-	if (v) {
-		v->next = freelist[v->k];
-		freelist[v->k] = v;
-		}
-	}
+	free(v);
+}
 
 #define Bcopy(x,y) memcpy((char *)&x->sign, (char *)&y->sign, \
 y->wds*sizeof(Long) + 2*sizeof(int))
@@ -1916,9 +1906,9 @@
 __dtoa
 #ifdef KR_headers
 	(d, mode, ndigits, decpt, sign, rve)
-	double d; int mode, ndigits, *decpt, *sign; char **rve;
-#else
-	(double d, int mode, int ndigits, int *decpt, int *sign, char **rve)
+	double d; int mode, ndigits, *decpt, *sign; char **rve, char **resultp;
+#else
+	(double d, int mode, int ndigits, int *decpt, int *sign, char **rve, char **resultp)
 #endif
 {
  /*	Arguments ndigits, decpt, sign are similar to those
@@ -1966,15 +1956,6 @@
 	Bigint *b, *b1, *delta, *mlo, *mhi, *S;
 	double d2, ds, eps;
 	char *s, *s0;
-	static Bigint *result;
-	static int result_k;
-
-	if (result) {
-		result->k = result_k;
-		result->maxwds = 1 << result_k;
-		Bfree(result);
-		result = 0;
-		}
 
 	if (word0(d) & Sign_bit) {
 		/* set sign for everything, including 0's and NaNs */
@@ -2136,11 +2117,8 @@
 			if (i <= 0)
 				i = 1;
 		}
-	j = sizeof(ULong);
-	for(result_k = 0; sizeof(Bigint) - sizeof(ULong) + j <= i;
-		j <<= 1) result_k++;
-	result = Balloc(result_k);
-	s = s0 = (char *)result;
+	*resultp = (char *) malloc(i + 1);
+	s = s0 = *resultp;
 
 	if (ilim >= 0 && ilim <= Quick_max && try_quick) {