]>
Commit | Line | Data |
---|---|---|
34e8f829 A |
1 | --- gdtoaimp.h.orig 2008-10-28 11:36:44.000000000 -0700 |
2 | +++ gdtoaimp.h 2008-10-28 12:01:07.000000000 -0700 | |
3 | @@ -170,6 +170,91 @@ | |
3d9156a7 A |
4 | |
5 | #ifndef GDTOAIMP_H_INCLUDED | |
6 | #define GDTOAIMP_H_INCLUDED | |
34e8f829 A |
7 | +/* |
8 | + * Paranoia: Protect exported symbols, including ones in files we don't | |
9 | + * compile right now. The standard strtof and strtod survive. | |
10 | + */ | |
11 | +#define dtoa __dtoa | |
12 | +#define gdtoa __gdtoa | |
13 | +#define freedtoa __freedtoa | |
14 | +#define strtodg __strtodg | |
15 | +#define g_ddfmt __g_ddfmt | |
16 | +#define g_dfmt __g_dfmt | |
17 | +#define g_ffmt __g_ffmt | |
18 | +#define g_Qfmt __g_Qfmt | |
19 | +#define g_xfmt __g_xfmt | |
20 | +#define g_xLfmt __g_xLfmt | |
21 | +#define strtoId __strtoId | |
22 | +#define strtoIdd __strtoIdd | |
23 | +#define strtoIf __strtoIf | |
24 | +#define strtoIQ __strtoIQ | |
25 | +#define strtoIx __strtoIx | |
26 | +#define strtoIxL __strtoIxL | |
27 | +#define strtord __strtord | |
28 | +#define strtordd __strtordd | |
29 | +#define strtorf __strtorf | |
30 | +#define strtorQ __strtorQ | |
31 | +#define strtorx __strtorx | |
32 | +#define strtorxL __strtorxL | |
33 | +#define strtodI __strtodI | |
34 | +#define strtopd __strtopd | |
35 | +#define strtopdd __strtopdd | |
36 | +#define strtopf __strtopf | |
37 | +#define strtopQ __strtopQ | |
38 | +#define strtopx __strtopx | |
39 | +#define strtopxL __strtopxL | |
40 | + | |
41 | +/* Protect gdtoa-internal symbols */ | |
42 | +#define Balloc __Balloc_D2A | |
43 | +#define Bfree __Bfree_D2A | |
44 | +#define ULtoQ __ULtoQ_D2A | |
45 | +#define ULtof __ULtof_D2A | |
46 | +#define ULtod __ULtod_D2A | |
47 | +#define ULtodd __ULtodd_D2A | |
48 | +#define ULtox __ULtox_D2A | |
49 | +#define ULtoxL __ULtoxL_D2A | |
50 | +#define any_on __any_on_D2A | |
51 | +#define b2d __b2d_D2A | |
52 | +#define bigtens __bigtens_D2A | |
53 | +#define cmp __cmp_D2A | |
54 | +#define copybits __copybits_D2A | |
55 | +#define d2b __d2b_D2A | |
56 | +#define decrement __decrement_D2A | |
57 | +#define diff __diff_D2A | |
58 | +#define dtoa_result __dtoa_result_D2A | |
59 | +#define g__fmt __g__fmt_D2A | |
60 | +#define gethex __gethex_D2A | |
61 | +#define hexdig __hexdig_D2A | |
62 | +#define hexdig_init_D2A __hexdig_init_D2A | |
63 | +#define hexnan __hexnan_D2A | |
64 | +#define hi0bits __hi0bits_D2A | |
65 | +#define hi0bits_D2A __hi0bits_D2A | |
66 | +#define i2b __i2b_D2A | |
67 | +#define increment __increment_D2A | |
68 | +#define lo0bits __lo0bits_D2A | |
69 | +#define lshift __lshift_D2A | |
70 | +#define match __match_D2A | |
71 | +#define mult __mult_D2A | |
72 | +#define multadd __multadd_D2A | |
73 | +#define nrv_alloc __nrv_alloc_D2A | |
74 | +#define pow5mult __pow5mult_D2A | |
75 | +#define quorem __quorem_D2A | |
76 | +#define ratio __ratio_D2A | |
77 | +#define rshift __rshift_D2A | |
78 | +#define rv_alloc __rv_alloc_D2A | |
79 | +#define s2b __s2b_D2A | |
80 | +#define set_ones __set_ones_D2A | |
81 | +#define strcp __strcp_D2A | |
82 | +#define strcp_D2A __strcp_D2A | |
83 | +#define strtoIg __strtoIg_D2A | |
84 | +#define sum __sum_D2A | |
85 | +#define tens __tens_D2A | |
86 | +#define tinytens __tinytens_D2A | |
87 | +#define tinytens __tinytens_D2A | |
88 | +#define trailz __trailz_D2A | |
89 | +#define ulp __ulp_D2A | |
90 | + | |
3d9156a7 A |
91 | +#include <xlocale.h> |
92 | #include "gdtoa.h" | |
93 | #include "gd_qnan.h" | |
34e8f829 A |
94 | #ifdef Honor_FLT_ROUNDS |
95 | @@ -181,8 +266,11 @@ | |
3d9156a7 A |
96 | #define Bug(x) {fprintf(stderr, "%s\n", x); exit(1);} |
97 | #endif | |
98 | ||
99 | +#include "limits.h" | |
100 | #include "stdlib.h" | |
101 | #include "string.h" | |
102 | +#include "libc_private.h" | |
103 | +#include "spinlock.h" | |
104 | ||
105 | #ifdef KR_headers | |
106 | #define Char char | |
34e8f829 | 107 | @@ -196,6 +284,10 @@ |
3d9156a7 A |
108 | #define MALLOC malloc |
109 | #endif | |
110 | ||
111 | +#define INFNAN_CHECK | |
112 | +#define USE_LOCALE | |
34e8f829 | 113 | +#define NO_LOCALE_CACHE |
3d9156a7 A |
114 | + |
115 | #undef IEEE_Arith | |
116 | #undef Avoid_Underflow | |
117 | #ifdef IEEE_MC68k | |
34e8f829 | 118 | @@ -455,10 +547,14 @@ |
3d9156a7 A |
119 | #define ALL_ON 0xffff |
120 | #endif | |
121 | ||
122 | -#ifndef MULTIPLE_THREADS | |
123 | -#define ACQUIRE_DTOA_LOCK(n) /*nothing*/ | |
124 | -#define FREE_DTOA_LOCK(n) /*nothing*/ | |
125 | -#endif | |
126 | +#define MULTIPLE_THREADS | |
127 | +extern spinlock_t __gdtoa_locks[2]; | |
34e8f829 A |
128 | +#define ACQUIRE_DTOA_LOCK(n) do { \ |
129 | + if (__isthreaded) _SPINLOCK(&__gdtoa_locks[n]); \ | |
3d9156a7 | 130 | +} while(0) |
34e8f829 A |
131 | +#define FREE_DTOA_LOCK(n) do { \ |
132 | + if (__isthreaded) _SPINUNLOCK(&__gdtoa_locks[n]); \ | |
3d9156a7 A |
133 | +} while(0) |
134 | ||
135 | #define Kmax 15 | |
136 | ||
34e8f829 | 137 | @@ -481,52 +577,6 @@ |
3d9156a7 A |
138 | #define Bcopy(x,y) memcpy(&x->sign,&y->sign,y->wds*sizeof(ULong) + 2*sizeof(int)) |
139 | #endif /* NO_STRING_H */ | |
140 | ||
141 | -#define Balloc Balloc_D2A | |
142 | -#define Bfree Bfree_D2A | |
143 | -#define ULtoQ ULtoQ_D2A | |
144 | -#define ULtof ULtof_D2A | |
145 | -#define ULtod ULtod_D2A | |
146 | -#define ULtodd ULtodd_D2A | |
147 | -#define ULtox ULtox_D2A | |
148 | -#define ULtoxL ULtoxL_D2A | |
149 | -#define any_on any_on_D2A | |
150 | -#define b2d b2d_D2A | |
151 | -#define bigtens bigtens_D2A | |
152 | -#define cmp cmp_D2A | |
153 | -#define copybits copybits_D2A | |
154 | -#define d2b d2b_D2A | |
155 | -#define decrement decrement_D2A | |
156 | -#define diff diff_D2A | |
157 | -#define dtoa_result dtoa_result_D2A | |
158 | -#define g__fmt g__fmt_D2A | |
159 | -#define gethex gethex_D2A | |
160 | -#define hexdig hexdig_D2A | |
161 | -#define hexnan hexnan_D2A | |
162 | -#define hi0bits(x) hi0bits_D2A((ULong)(x)) | |
163 | -#define i2b i2b_D2A | |
164 | -#define increment increment_D2A | |
165 | -#define lo0bits lo0bits_D2A | |
166 | -#define lshift lshift_D2A | |
167 | -#define match match_D2A | |
168 | -#define mult mult_D2A | |
169 | -#define multadd multadd_D2A | |
170 | -#define nrv_alloc nrv_alloc_D2A | |
171 | -#define pow5mult pow5mult_D2A | |
172 | -#define quorem quorem_D2A | |
173 | -#define ratio ratio_D2A | |
174 | -#define rshift rshift_D2A | |
175 | -#define rv_alloc rv_alloc_D2A | |
176 | -#define s2b s2b_D2A | |
177 | -#define set_ones set_ones_D2A | |
178 | -#define strcp strcp_D2A | |
179 | -#define strtoIg strtoIg_D2A | |
180 | -#define sum sum_D2A | |
181 | -#define tens tens_D2A | |
182 | -#define tinytens tinytens_D2A | |
183 | -#define tinytens tinytens_D2A | |
184 | -#define trailz trailz_D2A | |
185 | -#define ulp ulp_D2A | |
34e8f829 | 186 | - |
3d9156a7 A |
187 | extern char *dtoa_result; |
188 | extern CONST double bigtens[], tens[], tinytens[]; | |
34e8f829 A |
189 | extern unsigned char hexdig[]; |
190 | @@ -549,7 +599,7 @@ | |
3d9156a7 A |
191 | extern char *dtoa ANSI((double d, int mode, int ndigits, |
192 | int *decpt, int *sign, char **rve)); | |
34e8f829 | 193 | extern char *g__fmt ANSI((char*, char*, char*, int, ULong, size_t)); |
3d9156a7 A |
194 | - extern int gethex ANSI((CONST char**, FPI*, Long*, Bigint**, int)); |
195 | + extern int gethex ANSI((CONST char**, FPI*, Long*, Bigint**, int, locale_t)); | |
196 | extern void hexdig_init_D2A(Void); | |
197 | extern int hexnan ANSI((CONST char**, FPI*, ULong*)); | |
198 | extern int hi0bits_D2A ANSI((ULong)); | |
34e8f829 | 199 | @@ -566,11 +616,12 @@ |
224c7076 A |
200 | extern double ratio ANSI((Bigint*, Bigint*)); |
201 | extern void rshift ANSI((Bigint*, int)); | |
202 | extern char *rv_alloc ANSI((int)); | |
203 | - extern Bigint *s2b ANSI((CONST char*, int, int, ULong)); | |
204 | + extern Bigint *s2b ANSI((CONST char*, int, int, ULong, int)); | |
3d9156a7 A |
205 | extern Bigint *set_ones ANSI((Bigint*, int)); |
206 | extern char *strcp ANSI((char*, const char*)); | |
3d9156a7 | 207 | extern int strtoIg ANSI((CONST char*, char**, FPI*, Long*, Bigint**, int*)); |
3d9156a7 A |
208 | extern double strtod ANSI((const char *s00, char **se)); |
209 | + extern double strtod_l ANSI((const char *s00, char **se, locale_t)); | |
3d9156a7 A |
210 | extern Bigint *sum ANSI((Bigint*, Bigint*)); |
211 | extern int trailz ANSI((Bigint*)); | |
212 | extern double ulp ANSI((double)); |