Local patches:
- include extra system headers and add appropriate #defines - use a spinlock to synchronize parts of gdtoa - protect exported symbols with leading underscores Reviewed by: bde (briefly), mike (mentor), obrien
This commit is contained in:
parent
19a59cf3b3
commit
de9840c6e5
@ -26,6 +26,8 @@ THIS SOFTWARE.
|
||||
|
||||
****************************************************************/
|
||||
|
||||
/* $FreeBSD$ */
|
||||
|
||||
/* This is a variation on dtoa.c that converts arbitary binary
|
||||
floating-point formats to and from decimal notation. It uses
|
||||
double-precision arithmetic internally, so there are still
|
||||
@ -182,8 +184,11 @@ THIS SOFTWARE.
|
||||
#define Bug(x) {fprintf(stderr, "%s\n", x); exit(1);}
|
||||
#endif
|
||||
|
||||
#include "limits.h"
|
||||
#include "stdlib.h"
|
||||
#include "string.h"
|
||||
#include "libc_private.h"
|
||||
#include "spinlock.h"
|
||||
|
||||
#ifdef KR_headers
|
||||
#define Char char
|
||||
@ -197,6 +202,8 @@ extern Char *MALLOC ANSI((size_t));
|
||||
#define MALLOC malloc
|
||||
#endif
|
||||
|
||||
#define INFNAN_CHECK
|
||||
|
||||
#undef IEEE_Arith
|
||||
#undef Avoid_Underflow
|
||||
#ifdef IEEE_MC68k
|
||||
@ -456,10 +463,16 @@ extern double rnd_prod(double, double), rnd_quot(double, double);
|
||||
#define ALL_ON 0xffff
|
||||
#endif
|
||||
|
||||
#ifndef MULTIPLE_THREADS
|
||||
#define ACQUIRE_DTOA_LOCK(n) /*nothing*/
|
||||
#define FREE_DTOA_LOCK(n) /*nothing*/
|
||||
#endif
|
||||
#define MULTIPLE_THREADS
|
||||
extern spinlock_t __gdtoa_locks[2];
|
||||
#define ACQUIRE_DTOA_LOCK(n) do { \
|
||||
if (__isthreaded) \
|
||||
_SPINLOCK(&__gdtoa_locks[n]); \
|
||||
} while(0)
|
||||
#define FREE_DTOA_LOCK(n) do { \
|
||||
if (__isthreaded) \
|
||||
_SPINUNLOCK(&__gdtoa_locks[n]); \
|
||||
} while(0)
|
||||
|
||||
#define Kmax 15
|
||||
|
||||
@ -482,51 +495,88 @@ extern void memcpy_D2A ANSI((void*, const void*, size_t));
|
||||
#define Bcopy(x,y) memcpy(&x->sign,&y->sign,y->wds*sizeof(ULong) + 2*sizeof(int))
|
||||
#endif /* NO_STRING_H */
|
||||
|
||||
#define Balloc Balloc_D2A
|
||||
#define Bfree Bfree_D2A
|
||||
#define ULtoQ ULtoQ_D2A
|
||||
#define ULtof ULtof_D2A
|
||||
#define ULtod ULtod_D2A
|
||||
#define ULtodd ULtodd_D2A
|
||||
#define ULtox ULtox_D2A
|
||||
#define ULtoxL ULtoxL_D2A
|
||||
#define any_on any_on_D2A
|
||||
#define b2d b2d_D2A
|
||||
#define bigtens bigtens_D2A
|
||||
#define cmp cmp_D2A
|
||||
#define copybits copybits_D2A
|
||||
#define d2b d2b_D2A
|
||||
#define decrement decrement_D2A
|
||||
#define diff diff_D2A
|
||||
#define dtoa_result dtoa_result_D2A
|
||||
#define g__fmt g__fmt_D2A
|
||||
#define gethex gethex_D2A
|
||||
#define hexdig hexdig_D2A
|
||||
#define hexnan hexnan_D2A
|
||||
#define hi0bits hi0bits_D2A
|
||||
#define i2b i2b_D2A
|
||||
#define increment increment_D2A
|
||||
#define lo0bits lo0bits_D2A
|
||||
#define lshift lshift_D2A
|
||||
#define match match_D2A
|
||||
#define mult mult_D2A
|
||||
#define multadd multadd_D2A
|
||||
#define nrv_alloc nrv_alloc_D2A
|
||||
#define pow5mult pow5mult_D2A
|
||||
#define quorem quorem_D2A
|
||||
#define ratio ratio_D2A
|
||||
#define rshift rshift_D2A
|
||||
#define rv_alloc rv_alloc_D2A
|
||||
#define s2b s2b_D2A
|
||||
#define set_ones set_ones_D2A
|
||||
#define strcp strcp_D2A
|
||||
#define strtoIg strtoIg_D2A
|
||||
#define sum sum_D2A
|
||||
#define tens tens_D2A
|
||||
#define tinytens tinytens_D2A
|
||||
#define tinytens tinytens_D2A
|
||||
#define trailz trailz_D2A
|
||||
#define ulp ulp_D2A
|
||||
/*
|
||||
* Paranoia: Protect exported symbols, including ones in files we don't
|
||||
* compile right now. The standard strtof and strtod survive.
|
||||
*/
|
||||
#define dtoa __dtoa
|
||||
#define gdtoa __gdtoa
|
||||
#define freedtoa __freedtoa
|
||||
#define strtodg __strtodg
|
||||
#define g_ddfmt __g_ddfmt
|
||||
#define g_dfmt __g_dfmt
|
||||
#define g_ffmt __g_ffmt
|
||||
#define g_Qfmt __g_Qfmt
|
||||
#define g_xfmt __g_xfmt
|
||||
#define g_xLfmt __g_xLfmt
|
||||
#define strtoId __strtoId
|
||||
#define strtoIdd __strtoIdd
|
||||
#define strtoIf __strtoIf
|
||||
#define strtoIQ __strtoIQ
|
||||
#define strtoIx __strtoIx
|
||||
#define strtoIxL __strtoIxL
|
||||
#define strtord __strtord
|
||||
#define strtordd __strtordd
|
||||
#define strtorf __strtorf
|
||||
#define strtorQ __strtorQ
|
||||
#define strtorx __strtorx
|
||||
#define strtorxL __strtorxL
|
||||
#define strtodI __strtodI
|
||||
#define strtopd __strtopd
|
||||
#define strtopdd __strtopdd
|
||||
#define strtopf __strtopf
|
||||
#define strtopQ __strtopQ
|
||||
#define strtopx __strtopx
|
||||
#define strtopxL __strtopxL
|
||||
|
||||
/* Protect gdtoa-internal symbols */
|
||||
#define Balloc __Balloc_D2A
|
||||
#define Bfree __Bfree_D2A
|
||||
#define ULtoQ __ULtoQ_D2A
|
||||
#define ULtof __ULtof_D2A
|
||||
#define ULtod __ULtod_D2A
|
||||
#define ULtodd __ULtodd_D2A
|
||||
#define ULtox __ULtox_D2A
|
||||
#define ULtoxL __ULtoxL_D2A
|
||||
#define any_on __any_on_D2A
|
||||
#define b2d __b2d_D2A
|
||||
#define bigtens __bigtens_D2A
|
||||
#define cmp __cmp_D2A
|
||||
#define copybits __copybits_D2A
|
||||
#define d2b __d2b_D2A
|
||||
#define decrement __decrement_D2A
|
||||
#define diff __diff_D2A
|
||||
#define dtoa_result __dtoa_result_D2A
|
||||
#define g__fmt __g__fmt_D2A
|
||||
#define gethex __gethex_D2A
|
||||
#define hexdig __hexdig_D2A
|
||||
#define hexdig_init_D2A __hexdig_init_D2A
|
||||
#define hexnan __hexnan_D2A
|
||||
#define hi0bits __hi0bits_D2A
|
||||
#define i2b __i2b_D2A
|
||||
#define increment __increment_D2A
|
||||
#define lo0bits __lo0bits_D2A
|
||||
#define lshift __lshift_D2A
|
||||
#define match __match_D2A
|
||||
#define mult __mult_D2A
|
||||
#define multadd __multadd_D2A
|
||||
#define nrv_alloc __nrv_alloc_D2A
|
||||
#define pow5mult __pow5mult_D2A
|
||||
#define quorem __quorem_D2A
|
||||
#define ratio __ratio_D2A
|
||||
#define rshift __rshift_D2A
|
||||
#define rv_alloc __rv_alloc_D2A
|
||||
#define s2b __s2b_D2A
|
||||
#define set_ones __set_ones_D2A
|
||||
#define strcp __strcp_D2A
|
||||
#define strcp_D2A __strcp_D2A
|
||||
#define strtoIg __strtoIg_D2A
|
||||
#define sum __sum_D2A
|
||||
#define tens __tens_D2A
|
||||
#define tinytens __tinytens_D2A
|
||||
#define tinytens __tinytens_D2A
|
||||
#define trailz __trailz_D2A
|
||||
#define ulp __ulp_D2A
|
||||
|
||||
extern char *dtoa_result;
|
||||
extern CONST double bigtens[], tens[], tinytens[];
|
||||
|
Loading…
Reference in New Issue
Block a user