1997-06-15 00:43  Ulrich Drepper  <drepper@cygnus.com>

	* Makeconfig: Define libc-map here.
	* Makefile: And remove definition here.
	* Makerules (load-map-file): Handle case where map file is in
	other directory.
	(build-shlib): Likewise.

	* libc.map: Add more symbols.
	* resolv/libresolv.map: Likewise.

	* db/libdb.map: Add __dbopen.  Patch by HJ Lu.

	* libio/stdio.h: Remove "optmizations" for vfscanf and vsscanf.

	* locale/programs/localedef.c: Add normalize_codeset function.  We
	don't want to use the _nl_normalize_codeset functions from libc.

	* sysdeps/libm-i387/s_asinh.S: Handle +-Inf and NaN correctly.
	* sysdeps/libm-i387/s_asinhf.S: Likewise.
	* sysdeps/libm-i387/s_asinhl.S: Likewise.
	* sysdeps/libm-i387/s_nearbyint.S: Correctly leave function.
	* sysdeps/libm-i387/s_nearbyintf.S: Likewise.
	* sysdeps/libm-i387/s_nearbyintl.S: Likewise.

1997-06-14 12:45  Thorsten Kukuk  <kukuk@vt.uni-paderborn.de>

	* nis/nss_nis/nis-ethers.c: Add static to internal_nis_setetherent.

	* nis/nss_nis/nis-proto.c: Add static to internal_nis_setprotoent.

	* nis/nss_nisplus/nisplus-hosts.c: Rewrite parser and fix
	_nss_nisplus_gethostbyaddr_r interface.

	* nis/libnsl.map: Add all GLOBAL functions.

1997-06-13 18:32  Andreas Jaeger  <aj@arthur.rhein-neckar.de>

	* libm-test.c 	(main): Call new tests, reorder tests.
	(fmod_test): Test function fmod.
	(nearbyint_test): Test function nearbyint.
	(acos_test): Add more test cases.
	(signbit_test): Test macro signbit.
	(output_result_bool): Output result if test fails.
	(asin_test): Add another test case.
	(atan2_test): Add more tests.
	(asinh_test): Add more tests.
	(atanh_test): Add more tests.
	(hypot_test): Add more tests.
	(isfinite_test): Test macro isfinite.
	(isnormal_test): Test macro isnormal.
	(sincos_test): Tests for sincos.
	(main): Enable remquo_test since the tests are
	correct (according to ANSI/IEEE 754-1985).
	(remquo_test): Corrected tests cases and added more tests.
	(remainder_test): Tests for remainder.
	(check_int): New Function to compare int values.
	(check_isnan_exc_ext): New function.
	(sqrt_test): Add some extra tests for sqrt.
	(erf_test): Tests for erf.
	(erfc_test): Tests for erfc.
	(gamma_test): Tests for gamma.
	(lgamma_test): Tests for lgamma.

1997-06-08 10:54  H.J. Lu  <hjl@gnu.ai.mit.edu>

	* sysdeps/unix/sysv/linux/configure.in: Try to generate
	stdio_lim.h using the target C preprocessor and mk-stdiolim.c.
	* sysdeps/unix/sysv/linux/stdio_lim.h.in: New, template for
	stdio_lim.h.
	* sysdeps/unix/sysv/linux/mk-stdiolim.c: New, used by the
	target C preprocessor to extract OPEN_MAX and PATH_MAX.

1997-06-14 17:32  Andreas Jaeger  <aj@arthur.rhein-neckar.de>

	* math/libm.map: Add inline functions, global variables.
This commit is contained in:
Ulrich Drepper 1997-06-14 23:17:05 +00:00
parent ce37fa887b
commit 900bec852d
24 changed files with 885 additions and 177 deletions

View File

@ -1,3 +1,80 @@
1997-06-15 00:43 Ulrich Drepper <drepper@cygnus.com>
* Makeconfig: Define libc-map here.
* Makefile: And remove definition here.
* Makerules (load-map-file): Handle case where map file is in
other directory.
(build-shlib): Likewise.
* libc.map: Add more symbols.
* resolv/libresolv.map: Likewise.
* db/libdb.map: Add __dbopen. Patch by HJ Lu.
* libio/stdio.h: Remove "optmizations" for vfscanf and vsscanf.
* locale/programs/localedef.c: Add normalize_codeset function. We
don't want to use the _nl_normalize_codeset functions from libc.
* sysdeps/libm-i387/s_asinh.S: Handle +-Inf and NaN correctly.
* sysdeps/libm-i387/s_asinhf.S: Likewise.
* sysdeps/libm-i387/s_asinhl.S: Likewise.
* sysdeps/libm-i387/s_nearbyint.S: Correctly leave function.
* sysdeps/libm-i387/s_nearbyintf.S: Likewise.
* sysdeps/libm-i387/s_nearbyintl.S: Likewise.
1997-06-14 12:45 Thorsten Kukuk <kukuk@vt.uni-paderborn.de>
* nis/nss_nis/nis-ethers.c: Add static to internal_nis_setetherent.
* nis/nss_nis/nis-proto.c: Add static to internal_nis_setprotoent.
* nis/nss_nisplus/nisplus-hosts.c: Rewrite parser and fix
_nss_nisplus_gethostbyaddr_r interface.
* nis/libnsl.map: Add all GLOBAL functions.
1997-06-13 18:32 Andreas Jaeger <aj@arthur.rhein-neckar.de>
* libm-test.c (main): Call new tests, reorder tests.
(fmod_test): Test function fmod.
(nearbyint_test): Test function nearbyint.
(acos_test): Add more test cases.
(signbit_test): Test macro signbit.
(output_result_bool): Output result if test fails.
(asin_test): Add another test case.
(atan2_test): Add more tests.
(asinh_test): Add more tests.
(atanh_test): Add more tests.
(hypot_test): Add more tests.
(isfinite_test): Test macro isfinite.
(isnormal_test): Test macro isnormal.
(sincos_test): Tests for sincos.
(main): Enable remquo_test since the tests are
correct (according to ANSI/IEEE 754-1985).
(remquo_test): Corrected tests cases and added more tests.
(remainder_test): Tests for remainder.
(check_int): New Function to compare int values.
(check_isnan_exc_ext): New function.
(sqrt_test): Add some extra tests for sqrt.
(erf_test): Tests for erf.
(erfc_test): Tests for erfc.
(gamma_test): Tests for gamma.
(lgamma_test): Tests for lgamma.
1997-06-08 10:54 H.J. Lu <hjl@gnu.ai.mit.edu>
* sysdeps/unix/sysv/linux/configure.in: Try to generate
stdio_lim.h using the target C preprocessor and mk-stdiolim.c.
* sysdeps/unix/sysv/linux/stdio_lim.h.in: New, template for
stdio_lim.h.
* sysdeps/unix/sysv/linux/mk-stdiolim.c: New, used by the
target C preprocessor to extract OPEN_MAX and PATH_MAX.
1997-06-14 17:32 Andreas Jaeger <aj@arthur.rhein-neckar.de>
* math/libm.map: Add inline functions, global variables.
1997-06-14 00:39 Ulrich Drepper <drepper@cygnus.com>
* libc.map: Add more libio functions which are used in libio.h.

View File

@ -380,6 +380,14 @@ else
link-libc = $(common-objpfx)libc.a $(gnulib) $(common-objpfx)libc.a
endif
endif
# We have a versioning file for libc.so. We must define this here since
# otherwise in the subdirs this definition is not available and a rebuild
# of libc.so happens without versioning.
ifndef libc-map
libc-map = libc.map
endif
ifndef link-extra-libs
ifeq (yes,$(build-shared))
ifneq ($(common-objpfx),$(objpfx))

View File

@ -107,9 +107,6 @@ $(objpfx)munch-init.c: munch.awk munch-tmpl.c $(+subdir_inits)
generated := $(generated) munch-init.c
endif
# We have a versioning file for libc.so.
libc-map = libc.map
include Makerules

View File

@ -345,7 +345,11 @@ no-whole-archive =
endif
ifeq ($(versioning),yes)
load-map-file = $($(@F:%.so=%)-map:%=-Wl,--version-script=%)
ifneq ($(..),)
load-map-file = $(wildcard $($(@F:%.so=%)-map) $(..)$($(@F:%.so=%)-map))
else
load-map-file = $($(@F:%.so=%)-map)
endif
else
load-map-file =
endif
@ -361,11 +365,11 @@ $(patsubst %,$(objpfx)%.so,$(extra-libs)): $(interp-obj)
define build-shlib
$(LINK.o) -shared -o $@ $(sysdep-LDFLAGS) $(config-LDFLAGS) \
-B$(csu-objpfx) $(load-map-file) \
-B$(csu-objpfx) $(load-map-file:%=-Wl,--version-script=%) \
-Wl,-soname=lib$(libprefix)$(@F:lib%.so=%).so$($(@F)-version) \
$(LDFLAGS.so) $(LDFLAGS-$(@F:lib%.so=%).so) \
-L$(subst :, -L,$(rpath-link)) -Wl,-rpath-link=$(rpath-link) \
-Wl,--whole-archive $(filter-out $($(@F:%.so=%-map)),$^) \
-Wl,--whole-archive $(filter-out $(load-map-file),$^) \
$(no-whole-archive) $(LDLIBS-$(@F:lib%.so=%).so)
test -z "$($(@F)-version)" || \
(rm -f $@$($(@F)-version); $(LN_S) $(@F) $@$($(@F)-version))
@ -383,7 +387,7 @@ LDFLAGS-c.so += -e __libc_main
$(common-objpfx)libc.so: $(elfobjdir)/soinit.so \
$(common-objpfx)libc_pic.a \
$(elfobjdir)/sofini.so $(elfobjdir)/ld.so \
$(libc-map)
$(libc-map:%=$(..)%)
$(build-shlib)
endif

View File

@ -1,7 +1,7 @@
GLIBC_2.0 {
global:
# the real DB entry point.
dbopen;
dbopen; __dbopen;
# The compatibility functions.
dbm_clearerr; dbm_close; dbm_delete; dbm_dirfno; dbm_error;

View File

@ -4,10 +4,11 @@ GLIBC_2.0 {
_errno; _itoa_lower_digits; _itoa_upper_digits;
__ctype_b; __ctype_tolower; __ctype_toupper;
_IO_stderr_; _IO_stdin_; _IO_stdout_;
_nl_msg_cat_cntr; __environ; _environ;
_nl_msg_cat_cntr; __environ; _environ; _res;
___brk_addr; __curbrk; _nl_current_LC_CTYPE; _libc_intl_domainname;
# helper functions
__errno_location; __libc_init_first;
__errno_location; __libc_init_first; __h_errno_location;
# functions with special/multiple interfaces
__sigsetjmp; _setjmp; __sigaddset; __sigdelset; __sigismember;
@ -34,6 +35,7 @@ GLIBC_2.0 {
# functions used in inline functions or macros
__strto*_internal; __wcsto*_internal; __getdelim;
__isnan; __isnanf; __isnanl; __finite; __finitef; __finitel;
__isinf; __isinff; __isinfl;
__signbit; __signbitf; __signbitl; __cmsg_nxthdr;
_obstack_allocated_p; _obstack_begin; _obstack_begin_1;
_obstack_free; _obstack_memory_used; _obstack_newchunk;
@ -41,7 +43,13 @@ GLIBC_2.0 {
_IO_getc; _IO_peekc_unlocked; _IO_putc; _IO_feof; _IO_ferror;
# functions used in other libraries
__printf_fp;
__printf_fp; __stpncpy; _dcgettext;
_nss_files_parse_grent; _nss_files_parse_pwent; _nss_files_parse_spent;
__nss_database_lookup; __internal_endnetgrent; __internal_getnetgrent_r;
__internal_setnetgrent; __gmtime_r; __secure_getenv;
__select; __sched_get_priority_max; __sched_get_priority_min;
__sched_getparam; __sched_getscheduler; __sched_setscheduler;
__sched_yield; __on_exit; __gettimeofday; __fork; __clone;
# all functions and variables in the normal name space
a*; b*; c*; d*; e*; f*; g*; h*; i*; j*; k*; l*; m*;

View File

@ -291,25 +291,6 @@ extern int __vsscanf __P ((__const char *__s, __const char *__format,
_G_va_list __arg));
extern int vsscanf __P ((__const char *__s, __const char *__format,
_G_va_list __arg));
#ifdef __OPTIMIZE__
extern __inline int
vfscanf (FILE *__s, const char *__fmt, _G_va_list __arg)
{
return __vfscanf (__s, __fmt, __arg);
}
extern __inline int
vscanf (const char *__fmt, _G_va_list __arg)
{
return __vfscanf (stdin, __fmt, __arg);
}
extern __inline int
vsscanf (const char *__s, const char *__fmt, _G_va_list __arg)
{
return __vsscanf (__s, __fmt, __arg);
}
#endif /* Optimizing. */
#endif /* Use GNU. */

View File

@ -36,7 +36,6 @@
#include "error.h"
#include "charset.h"
#include "locfile.h"
#include "../intl/loadinfo.h"
/* Undefine the following line in the production version. */
/* #define NDEBUG 1 */
@ -138,6 +137,7 @@ void *xmalloc (size_t __n);
/* Prototypes for local functions. */
static void error_print (void);
static const char *construct_output_path (char *path);
static const char *normalize_codeset (const char *codeset, size_t name_len);
int
@ -475,7 +475,7 @@ construct_output_path (char *path)
++endp;
if (endp > startp)
normal = _nl_normalize_codeset (startp, endp - startp);
normal = normalize_codeset (startp, endp - startp);
}
else
/* This is to keep gcc quiet. */
@ -512,3 +512,47 @@ construct_output_path (char *path)
return result;
}
/* Normalize codeset name. There is no standard for the codeset
names. Normalization allows the user to use any of the common
names. */
static const char *
normalize_codeset (codeset, name_len)
const char *codeset;
size_t name_len;
{
int len = 0;
int only_digit = 1;
char *retval;
char *wp;
size_t cnt;
for (cnt = 0; cnt < name_len; ++cnt)
if (isalnum (codeset[cnt]))
{
++len;
if (isalpha (codeset[cnt]))
only_digit = 0;
}
retval = (char *) malloc ((only_digit ? 3 : 0) + len + 1);
if (retval != NULL)
{
if (only_digit)
wp = stpcpy (retval, "iso");
else
wp = retval;
for (cnt = 0; cnt < name_len; ++cnt)
if (isalpha (codeset[cnt]))
*wp++ = tolower (codeset[cnt]);
else if (isdigit (codeset[cnt]))
*wp++ = codeset[cnt];
*wp = '\0';
}
return (const char *) retval;
}

View File

@ -41,12 +41,15 @@
/* This program isn't finished yet.
It has tests for:
acos, acosh, asin, asinh, atan, atan2, atanh,
cbrt, ceil, copysign, cos, cosh, exp, exp2, expm1,
fabs, fdim, floor, fmin, fmax, fpclassify,
frexp, hypot, ilogb, ldexp,
log, log10, log1p, log2, logb, modf, nextafter,
pow, rint, rinttol, rinttoll, round, roundtol, roundtoll,
scalb, scalbn, sin, sinh, sqrt, tan, tanh, trunc
cbrt, ceil, copysign, cos, cosh, erf, erfc, exp, exp2, expm1,
fabs, fdim, floor, fmin, fmax, fmod, fpclassify,
frexp, gamma, hypot,
ilogb, isfinite, isinf, isnan, isnormal,
ldexp, lgamma, log, log10, log1p, log2, logb,
modf, nearbyint, nextafter,
pow, remainder, remquo, rint, rinttol, rinttoll,
round, roundtol, roundtoll,
scalb, scalbn, signbit, sin, sincos, sinh, sqrt, tan, tanh, trunc
and for the following complex math functions:
cacos, cacosh, casin, casinh, catan, catanh,
@ -54,9 +57,9 @@
At the moment the following functions aren't tested:
cabs, carg, conj, cproj, cimag, creal, drem,
erf, erfc, gamma, lgamma,
j0, j1, jn, y0, y1, yn,
nearbyint, remainder, remquo, signbit, significant, sincos.
significand,
nan, comparison macros (isless,isgreater,...).
The routines using random variables are still under construction. I don't
like it the way it's working now and will change it.
@ -81,6 +84,14 @@
checked against. These implemented tests should check all cases
that are specified in ISO C 9X.
Exception testing: At the moment only divide-by-zero and invalid
exceptions are tested. Overflow/underflow and inexact exceptions
aren't checked at the moment.
NaN values: There exist signalling and quiet NaNs. This implementation
only uses signalling NaN as parameter but does not differenciate
between the two kinds of NaNs as result.
Inline functions: Inlining functions should give an improvement in
speed - but not in precission. The inlined functions return
reasonable values for a reasonable range of input values. The
@ -98,6 +109,7 @@
- Compiler has errors
With e.g. gcc 2.7.2.2 the test for cexp fails because of a compiler error.
*/
#ifndef _GNU_SOURCE
@ -201,13 +213,11 @@ random_greater (MATHTYPE min_value)
}
/* Get a random value x with x < max_value. */
#ifndef TEST_INLINE
static MATHTYPE
random_less (MATHTYPE max_value)
{
return random_value (-1e6, max_value);
}
#endif
static void
@ -359,6 +369,8 @@ output_result_bool (const char *test_name, int result)
else
{
output_fail_value (test_name);
if (verbose > 1)
printf (" Value: %d\n", result);
++noErrors;
}
@ -548,6 +560,40 @@ check_bool (const char *test_name, int computed)
output_result_bool (test_name, computed);
}
/*
check that computed and expected values are equal (int values)
*/
static void
check_int (const char *test_name, int computed, int expected)
{
int diff = computed - expected;
int result = diff == 0;
output_new_test (test_name);
test_exceptions (test_name, NO_EXCEPTION);
if (result)
{
output_pass_value ();
}
else
{
output_fail_value (test_name);
if (verbose > 1)
{
printf ("Result:\n");
printf (" is: %d\n", computed);
printf (" should be: %d\n", expected);
}
noErrors++;
}
fpstack_test (test_name);
}
/*
check that computed and expected values are equal (long int values)
*/
@ -648,7 +694,6 @@ check_isnan_maybe_exc (const char *test_name, MATHTYPE computed,
output_isvalue (test_name, isnan (computed), computed);
}
/*
check that computed value is not-a-number and supply parameter
*/
@ -663,6 +708,19 @@ check_isnan_ext (const char *test_name, MATHTYPE computed,
}
#endif
/*
check that computed value is not-a-number, test for exceptions
and supply parameter
*/
static void
check_isnan_exc_ext (const char *test_name, MATHTYPE computed,
short exception, MATHTYPE parameter)
{
output_new_test (test_name);
test_exceptions (test_name,exception);
output_isvalue_ext (test_name, isnan (computed), computed, parameter);
}
/* Tests if computed is +Inf */
static void
@ -741,11 +799,18 @@ acos_test (void)
check_isnan_exc ("acos (x) == NaN plus invalid exception for |x| > 1",
FUNC(acos) (x),
INVALID_EXCEPTION);
x = random_less (1);
check_isnan_exc ("acos (x) == NaN plus invalid exception for |x| > 1",
FUNC(acos) (x),
INVALID_EXCEPTION);
#endif
check ("acos (1) == 0", FUNC(acos) (1), 0);
check ("acos (-1) == pi", FUNC(acos) (-1), M_PI);
}
static void
acosh_test (void)
{
@ -773,6 +838,11 @@ asin_test (void)
check_isnan_exc ("asin x == NaN plus invalid exception for |x| > 1",
FUNC(asin) (x),
INVALID_EXCEPTION);
x = random_less (1);
check_isnan_exc ("asin x == NaN plus invalid exception for |x| > 1",
FUNC(asin) (x),
INVALID_EXCEPTION);
#endif
check ("asin (0) == 0", FUNC(asin) (0), 0);
@ -786,7 +856,10 @@ asinh_test (void)
check ("asinh(+0) == +0", FUNC(asinh) (0), 0);
#ifndef TEST_INLINE
check ("asinh(-0) == -0", FUNC(asinh) (minus_zero), minus_zero);
check_isinfp ("asinh(+inf) == +inf", FUNC(asinh) (plus_infty));
check_isinfn ("asinh(-inf) == -inf", FUNC(asinh) (minus_infty));
#endif
}
@ -800,6 +873,7 @@ atan_test (void)
check ("atan (-inf) == -pi/2", FUNC(atan) (minus_infty), -M_PI_2);
}
static void
atan2_test (void)
{
@ -830,6 +904,28 @@ atan2_test (void)
x = random_greater (0);
check ("atan2 (y,-0) == pi/2 for y > 0", FUNC(atan2) (x, minus_zero), M_PI_2);
x = random_less (0);
check ("atan2 (y,+0) == -pi/2 for y < 0", FUNC(atan2) (x, 0), -M_PI_2);
x = random_less (0);
check ("atan2 (y,-0) == -pi/2 for y < 0", FUNC(atan2) (x, minus_zero), -M_PI_2);
x = random_greater (0);
check ("atan2 (y,inf) == +0 for finite y > 0",
FUNC(atan2) (x, plus_infty), 0);
x = -random_greater (0);
check ("atan2 (y,inf) == -0 for finite y < 0",
FUNC(atan2) (x, plus_infty), minus_zero);
x = random_value (-1e4, 1e4);
check ("atan2(+inf, x) == pi/2 for finite x",
FUNC(atan2) (plus_infty, x), M_PI_2);
x = random_value (-1e4, 1e4);
check ("atan2(-inf, x) == -pi/2 for finite x",
FUNC(atan2) (minus_infty, x), -M_PI_2);
x = random_greater (0);
check ("atan2 (y,-inf) == +pi for finite y > 0",
FUNC(atan2) (x, minus_infty), M_PI);
@ -849,12 +945,15 @@ atan2_test (void)
check ("atan2 (-inf,-inf) == -3*pi/4",
FUNC(atan2) (minus_infty, minus_infty), -3 * M_PI_4);
/* FIXME: Add some specific tests */
}
static void
atanh_test (void)
{
MATHTYPE x;
check ("atanh(+0) == +0", FUNC(atanh) (0), 0);
#ifndef TEST_INLINE
@ -864,6 +963,15 @@ atanh_test (void)
FUNC(atanh) (1), DIVIDE_BY_ZERO_EXCEPTION);
check_isinfn_exc ("atanh(-1) == -inf plus divide-by-zero exception",
FUNC(atanh) (-1), DIVIDE_BY_ZERO_EXCEPTION);
x = random_greater (1.0);
check_isnan_exc_ext ("atanh (x) == NaN plus invalid exception if |x| > 1",
FUNC(atanh) (x), INVALID_EXCEPTION, x);
x = random_less (1.0);
check_isnan_exc_ext ("atanh (x) == NaN plus invalid exception if |x| > 1",
FUNC(atanh) (x), INVALID_EXCEPTION, x);
#endif
}
@ -931,6 +1039,38 @@ cosh_test (void)
}
static void
erf_test (void)
{
errno = 0;
FUNC(erf) (0);
if (errno == ENOSYS)
/* Function not implemented. */
return;
check ("erf (+0) == +0", FUNC(erf) (0), 0);
check ("erf (-0) == -0", FUNC(erf) (minus_zero), minus_zero);
check ("erf (+inf) == +1", FUNC(erf) (plus_infty), 1);
check ("erf (-inf) == -1", FUNC(erf) (minus_infty), -1);
}
static void
erfc_test (void)
{
errno = 0;
FUNC(erfc) (0);
if (errno == ENOSYS)
/* Function not implemented. */
return;
check ("erfc (+inf) == 0", FUNC(erfc) (plus_infty), 0.0);
check ("erfc (-inf) == 2", FUNC(erfc) (minus_infty), 2.0);
check ("erfc (+0) == 1", FUNC(erfc) (0.0), 1.0);
check ("erfc (-0) == 1", FUNC(erfc) (minus_zero), 1.0);
}
static void
exp_test (void)
{
@ -1083,6 +1223,110 @@ fpclassify_test (void)
}
static void
isfinite_test (void)
{
check_bool ("isfinite (0) != 0", isfinite (0));
check_bool ("isfinite (-0) != 0", isfinite (minus_zero));
check_bool ("isfinite (10) != 0", isfinite (10));
check_bool ("isfinite (+inf) == 0", isfinite (plus_infty) == 0);
check_bool ("isfinite (-inf) == 0", isfinite (minus_infty) == 0);
check_bool ("isfinite (NaN) == 0", isfinite (nan_value) == 0);
}
static void
isnormal_test (void)
{
check_bool ("isnormal (0) == 0", isnormal (0) == 0);
check_bool ("isnormal (-0) == 0", isnormal (minus_zero) == 0);
check_bool ("isnormal (10) != 0", isnormal (10));
check_bool ("isnormal (+inf) == 0", isnormal (plus_infty) == 0);
check_bool ("isnormal (-inf) == 0", isnormal (minus_infty) == 0);
check_bool ("isnormal (NaN) == 0", isnormal (nan_value) == 0);
}
static void
signbit_test (void)
{
MATHTYPE x;
check_bool ("signbit (+0) == 0", signbit (0) == 0);
check_bool ("signbit (-0) != 0", signbit (minus_zero));
check_bool ("signbit (+inf) == 0", signbit (plus_infty) == 0);
check_bool ("signbit (-inf) != 0", signbit (minus_infty));
check_bool ("signbit (NaN) == 0", signbit (nan_value));
x = random_less (0);
check_bool ("signbit (x) != 0 for x < 0", signbit (x));
x = random_greater (0);
check_bool ("signbit (x) == 0 for x > 0", signbit (x) == 0);
}
static void
gamma_test (void)
{
MATHTYPE x;
check_isinfp ("gamma (+inf) == +inf", FUNC(gamma) (plus_infty));
check_isnan_exc ("gamma (0) == NaN plus invalid exception",
FUNC(gamma) (0), INVALID_EXCEPTION);
x = random_less (0.0);
check_isnan_exc_ext ("gamma (x) == NaN plus invalid exception for x <= 0",
FUNC(gamma) (x), INVALID_EXCEPTION, x);
check_isnan_exc ("gamma (-inf) == NaN plus invalid exception",
FUNC(gamma) (minus_infty), INVALID_EXCEPTION);
check ("gamma (0.5) == sqrt(pi)", FUNC(gamma) (0.5), FUNC(sqrt) (M_PI));
check ("gamma (-0.5) == -2*sqrt(pi)", FUNC(gamma) (-0.5),
-2*FUNC(sqrt) (M_PI));
check ("gamma (1) == 1", FUNC(gamma) (1), 1);
check ("gamma (4) == 6", FUNC(gamma) (4), 6);
}
static void
lgamma_test (void)
{
MATHTYPE x;
check_isinfp ("lgamma (+inf) == +inf", FUNC(lgamma) (plus_infty));
check_isnan_exc ("lgamma (0) == +inf plus divide by zero exception",
FUNC(lgamma) (0), DIVIDE_BY_ZERO_EXCEPTION);
x = random_less (0.0);
check_isnan_exc_ext ("lgamma (x) == +inf plus divide by zero exception for x <= 0",
FUNC(lgamma) (x), DIVIDE_BY_ZERO_EXCEPTION, x);
check_isnan_exc ("lgamma (-inf) == NaN plus invalid exception",
FUNC(lgamma) (minus_infty), INVALID_EXCEPTION);
check ("lgamma (1) == 0", FUNC(lgamma) (1), 0);
check_int ("lgamma (0) sets signgam to 1", signgam, 1);
check ("lgamma (3) == M_LN2", FUNC(lgamma) (3), M_LN2);
check_int ("lgamma (3) sets signgam to 1", signgam, 1);
check_eps ("lgamma (0.5) == log(sqrt(pi))", FUNC(lgamma) (0.5),
FUNC(log) (FUNC(sqrt) (M_PI)), CHOOSE (0, 1e-15, 1e-7));
check_int ("lgamma (0.5) sets signgam to 1", signgam, 1);
check_eps ("lgamma (-0.5) == log(2*sqrt(pi))", FUNC(lgamma) (-0.5),
FUNC(log) (2*FUNC(sqrt) (M_PI)), CHOOSE (0, 1e-15, 0));
check_int ("lgamma (-0.5) sets signgam to -1", signgam, -1);
}
static void
ilogb_test (void)
{
@ -1347,6 +1591,58 @@ sinh_test (void)
}
static void
sincos_test (void)
{
MATHTYPE sin_res, cos_res;
fenv_t fenv;
FUNC(sincos) (0, &sin_res, &cos_res);
fegetenv (&fenv);
check ("sincos (+0, &sin, &cos) puts +0 in sin", sin_res, 0);
fesetenv (&fenv);
check ("sincos (+0, &sin, &cos) puts 1 in cos", cos_res, 1);
FUNC(sincos) (minus_zero, &sin_res, &cos_res);
fegetenv (&fenv);
check ("sincos (-0, &sin, &cos) puts -0 in sin", sin_res, minus_zero);
fesetenv (&fenv);
check ("sincos (-0, &sin, &cos) puts 1 in cos", cos_res, 1);
FUNC(sincos) (plus_infty, &sin_res, &cos_res);
fegetenv (&fenv);
check_isnan_exc ("sincos (+inf, &sin, &cos) puts NaN in sin plus invalid exception",
sin_res, INVALID_EXCEPTION);
fesetenv (&fenv);
check_isnan_exc ("sincos (+inf, &sin, &cos) puts NaN in cos plus invalid exception",
cos_res, INVALID_EXCEPTION);
FUNC(sincos) (minus_infty, &sin_res, &cos_res);
fegetenv (&fenv);
check_isnan_exc ("sincos (-inf,&sin, &cos) puts NaN in sin plus invalid exception",
sin_res, INVALID_EXCEPTION);
fesetenv (&fenv);
check_isnan_exc ("sincos (-inf,&sin, &cos) puts NaN in cos plus invalid exception",
cos_res, INVALID_EXCEPTION);
FUNC(sincos) (M_PI_2, &sin_res, &cos_res);
fegetenv (&fenv);
check ("sincos (pi/2, &sin, &cos) puts 1 in sin", sin_res, 1);
fesetenv (&fenv);
check_eps ("sincos (pi/2, &sin, &cos) puts 0 in cos", cos_res, 0,
CHOOSE(0, 1e-16, 1e-7));
FUNC(sincos) (M_PI / 6.0, &sin_res, &cos_res);
check ("sincos (pi/6, &sin, &cos) puts 0.5 in sin", sin_res, 0.5);
FUNC(sincos) (M_PI / 3.0, &sin_res, &cos_res);
check_eps ("sincos (pi/3, &sin, &cos) puts 0.5 in cos", cos_res, 0.5,
CHOOSE(0, 1e-15, 1e-7));
}
static void
tan_test (void)
{
@ -1411,6 +1707,11 @@ hypot_test (void)
check_isinfp_ext ("hypot (+inf, x) == +inf", FUNC(hypot) (plus_infty, a), a);
check_isinfp_ext ("hypot (-inf, x) == +inf", FUNC(hypot) (minus_infty, a), a);
#ifndef TEST_INLINE
check_isinfp ("hypot (+inf, NaN) == +inf", FUNC(hypot) (minus_infty, nan_value));
check_isinfp ("hypot (-inf, NaN) == +inf", FUNC(hypot) (minus_infty, nan_value));
#endif
check_isnan ("hypot (NaN, NaN) == NaN", FUNC(hypot) (nan_value, nan_value));
a = FUNC(hypot) (12.4L, 0.7L);
@ -1715,6 +2016,47 @@ fmax_test (void)
}
static void
fmod_test (void)
{
MATHTYPE x;
x = random_greater (0);
check_ext ("fmod (+0, y) == +0 for y != 0", FUNC(fmod) (0, x), 0, x);
x = random_greater (0);
check_ext ("fmod (-0, y) == -0 for y != 0", FUNC(fmod) (minus_zero, x),
minus_zero, x);
check_isnan_exc_ext ("fmod (+inf, y) == NaN plus invalid exception",
FUNC(fmod) (plus_infty, x), INVALID_EXCEPTION, x);
check_isnan_exc_ext ("fmod (-inf, y) == NaN plus invalid exception",
FUNC(fmod) (minus_infty, x), INVALID_EXCEPTION, x);
check_isnan_exc_ext ("fmod (x, +0) == NaN plus invalid exception",
FUNC(fmod) (x, 0), INVALID_EXCEPTION, x);
check_isnan_exc_ext ("fmod (x, -0) == NaN plus invalid exception",
FUNC(fmod) (x, minus_zero), INVALID_EXCEPTION, x);
x = random_greater (0);
check_ext ("fmod (x, +inf) == x for x not infinite",
FUNC(fmod) (x, plus_infty), x, x);
x = random_greater (0);
check_ext ("fmod (x, -inf) == x for x not infinite",
FUNC(fmod) (x, minus_infty), x, x);
check_eps ("fmod (6.5, 2.3) == 1.9", FUNC(fmod) (6.5, 2.3), 1.9,
CHOOSE(0, 1e-15, 0));
check_eps ("fmod (-6.5, 2.3) == 1.9", FUNC(fmod) (-6.5, 2.3), -1.9,
CHOOSE(0, 1e-15, 0));
check_eps ("fmod (6.5, -2.3) == 1.9", FUNC(fmod) (6.5, -2.3), 1.9,
CHOOSE(0, 1e-15, 0));
check_eps ("fmod (-6.5, -2.3) == 1.9", FUNC(fmod) (-6.5, -2.3), -1.9,
CHOOSE(0, 1e-15, 0));
}
static void
nextafter_test (void)
{
@ -1823,12 +2165,58 @@ sqrt_test (void)
check_isnan ("sqrt (NaN) == NaN", FUNC(sqrt) (nan_value));
check_isinfp ("sqrt (+inf) == +inf", FUNC(sqrt) (plus_infty));
check ("sqrt (-0) == -0", FUNC(sqrt) (0), 0);
x = random_less (0.0);
check_isnan_exc_ext ("sqrt (x) == NaN plus invalid exception for x < 0",
FUNC(sqrt) (x), INVALID_EXCEPTION, x);
x = random_value (0, 10000);
check_ext ("sqrt (x*x) == x", FUNC(sqrt) (x*x), x, x);
check ("sqrt (4) == 2", FUNC(sqrt) (4), 2);
}
static void
remainder_test (void)
{
MATHTYPE result;
result = FUNC(remainder) (1, 0);
check_isnan_exc ("remainder(1, +0) == NaN plus invalid exception",
result, INVALID_EXCEPTION);
result = FUNC(remainder) (1, minus_zero);
check_isnan_exc ("remainder(1, -0) == NaN plus invalid exception",
result, INVALID_EXCEPTION);
result = FUNC(remainder) (plus_infty, 1);
check_isnan_exc ("remainder(+inf, 1) == NaN plus invalid exception",
result, INVALID_EXCEPTION);
result = FUNC(remainder) (minus_infty, 1);
check_isnan_exc ("remainder(-inf, 1) == NaN plus invalid exception",
result, INVALID_EXCEPTION);
result = FUNC(remainder) (1.625, 1.0);
check ("remainder(1.625, 1.0) == -0.375", result, -0.375);
result = FUNC(remainder) (-1.625, 1.0);
check ("remainder(-1.625, 1.0) == 0.375", result, 0.375);
result = FUNC(remainder) (1.625, -1.0);
check ("remainder(1.625, -1.0) == -0.375", result, -0.375);
result = FUNC(remainder) (-1.625, -1.0);
check ("remainder(-1.625, -1.0) == 0.375", result, 0.375);
result = FUNC(remainder) (5.0, 2.0);
check ("remainder(5.0, 2.0) == 1.0", result, 1.0);
result = FUNC(remainder) (3.0, 2.0);
check ("remainder(3.0, 2.0) == -1.0", result, -1.0);
}
static void
remquo_test (void)
@ -1836,21 +2224,45 @@ remquo_test (void)
int quo;
MATHTYPE result;
result = FUNC(remquo) (1, 0, &quo);
check_isnan_exc ("remquo(1, +0, &x) == NaN plus invalid exception",
result, INVALID_EXCEPTION);
result = FUNC(remquo) (1, minus_zero, &quo);
check_isnan_exc ("remquo(1, -0, &x) == NaN plus invalid exception",
result, INVALID_EXCEPTION);
result = FUNC(remquo) (plus_infty, 1, &quo);
check_isnan_exc ("remquo(+inf, 1, &x) == NaN plus invalid exception",
result, INVALID_EXCEPTION);
result = FUNC(remquo) (minus_infty, 1, &quo);
check_isnan_exc ("remquo(-inf, 1, &x) == NaN plus invalid exception",
result, INVALID_EXCEPTION);
result = FUNC(remquo) (1.625, 1.0, &quo);
check ("remquo(1.625, 1.0, &x) == -0.375", result, -0.375);
check_long ("remquo(1.625, 1.0, &x) puts 1 in x", quo, 1);
check_long ("remquo(1.625, 1.0, &x) puts 2 in x", quo, 2);
result = FUNC(remquo) (-1.625, 1.0, &quo);
check ("remquo(-1.625, 1.0, &x) == 0.375", result, 0.375);
check_long ("remquo(-1.625, 1.0, &x) puts -1 in x", quo, -1);
check_long ("remquo(-1.625, 1.0, &x) puts -2 in x", quo, -2);
result = FUNC(remquo) (1.625, -1.0, &quo);
check ("remquo(1.625, -1.0, &x) == -0.375", result, -0.375);
check_long ("remquo(1.625, -1.0, &x) puts -1 in x", quo, -1);
check_long ("remquo(1.625, -1.0, &x) puts -2 in x", quo, -2);
result = FUNC(remquo) (-1.625, -1.0, &quo);
check ("remquo(-1.625, -1.0, &x) == 0.375", result, 0.375);
check_long ("remquo(-1.625, -1.0, &x) puts 1 in x", quo, 1);
check_long ("remquo(-1.625, -1.0, &x) puts 2 in x", quo, 2);
result = FUNC(remquo) (5.0, 2.0, &quo);
check ("remquo(5.0, 2.0, &x) == 1.0", result, 1.0);
check_long ("remquo (5.0, 2.0, &x) puts 2 in x", quo, 2);
result = FUNC(remquo) (3.0, 2.0, &quo);
check ("remquo(3.0, 2.0, &x) == -1.0", result, -1.0);
check_long ("remquo (3.0, 2.0, &x) puts 2 in x", quo, 2);
}
@ -3922,6 +4334,16 @@ cpow_test (void)
}
static void
nearbyint_test (void)
{
check ("nearbyint(+0) = 0", FUNC(nearbyint) (0.0), 0.0);
check ("nearbyint(-0) = -0", FUNC(nearbyint) (minus_zero), minus_zero);
check_isinfp ("nearbyint(+Inf) = +Inf", FUNC(nearbyint) (plus_infty));
check_isinfn ("nearbyint(-Inf) = -Inf", FUNC(nearbyint) (minus_infty));
}
static void
rint_test (void)
{
@ -4330,22 +4752,36 @@ main (int argc, char *argv[])
basic_tests ();
/* keep the tests a wee bit ordered (according to ISO 9X) */
/* classification functions */
fpclassify_test ();
isfinite_test ();
isnormal_test ();
signbit_test ();
/* trigonometric functions */
acos_test ();
acosh_test ();
asin_test ();
asinh_test ();
atan_test ();
atanh_test ();
atan2_test ();
cbrt_test ();
ceil_test ();
cos_test ();
sin_test ();
sincos_test ();
tan_test ();
/* hyperbolic functions */
acosh_test ();
asinh_test ();
atanh_test ();
cosh_test ();
sinh_test ();
tanh_test ();
/* exponential and logarithmic functions */
exp_test ();
exp2_test ();
expm1_test ();
frexp_test ();
ilogb_test ();
ldexp_test ();
log_test ();
log10_test ();
@ -4353,28 +4789,50 @@ main (int argc, char *argv[])
log2_test ();
logb_test ();
modf_test ();
ilogb_test ();
scalb_test ();
scalbn_test ();
sin_test ();
sinh_test ();
tan_test ();
tanh_test ();
/* power and absolute value functions */
cbrt_test ();
fabs_test ();
floor_test ();
fpclassify_test ();
hypot_test ();
pow_test ();
sqrt_test ();
/* error and gamma functions */
erf_test ();
erfc_test ();
gamma_test ();
lgamma_test ();
/* nearest integer functions */
ceil_test ();
floor_test ();
nearbyint_test ();
rint_test ();
rinttol_test ();
rinttoll_test ();
round_test ();
roundtol_test ();
roundtoll_test ();
trunc_test ();
/* remainder functions */
fmod_test ();
remainder_test ();
remquo_test ();
/* manipulation functions */
copysign_test ();
nextafter_test ();
/* maximum, minimum and positive difference functions */
fdim_test ();
fmin_test ();
fmax_test ();
nextafter_test ();
copysign_test ();
sqrt_test ();
trunc_test ();
#if 0
/* XXX I'm not sure what is the correct result. */
remquo_test ();
#endif
/* complex functions */
cexp_test ();
csin_test ();
csinh_test ();
@ -4391,13 +4849,7 @@ main (int argc, char *argv[])
csqrt_test ();
cpow_test ();
rint_test ();
rinttol_test ();
rinttoll_test ();
round_test ();
roundtol_test ();
roundtoll_test ();
/* special tests */
identities ();
inverse_functions ();

View File

@ -4,6 +4,16 @@ GLIBC_2.0 {
a*; b*; c*; d*; e*; f*; g*; h*; i*; j*; k*; l*; m*;
n*; o*; p*; q*; r*; s*; t*; u*; v*; w*; x*; y*; z*;
# global variables
_LIB_VERSION;
# functions used in inline functions or macros
__fpclassify; __fpclassifyf; __fpclassifyl;
__signbit; __signbitf; __signbitl;
__finite; __finitef; __fintitel;
__log1p;
local:
*;
};

View File

@ -1,13 +1,61 @@
GLIBC_2.0 {
global:
nis_add; nis_add_entry; nis_addmember; nis_checkpoint; nis_clone_directory;
nis_clone_entry; nis_clone_group; nis_clone_link; nis_clone_nis_attr;
nis_clone_objdata; nis_clone_object; nis_clone_result; nis_clone_table;
nis_creategroup; nis_destroy_object; nis_destroygroup; nis_dir_cmp;
nis_domain_of; nis_domain_of_r; nis_first_entry; nis_free_attr;
nis_free_directory; nis_free_endpoints; nis_free_entry; nis_free_group;
nis_free_link; nis_free_object; nis_free_request; nis_free_servers;
nis_free_table;
__nis_default_access; __nis_default_group; __nis_default_owner;
__nis_default_ttl; __yp_check; nis_add;
nis_add_entry; nis_addmember; nis_checkpoint;
nis_clone_directory; nis_clone_entry; nis_clone_group;
nis_clone_link; nis_clone_nis_attr; nis_clone_objdata;
nis_clone_object; nis_clone_result; nis_clone_table;
nis_creategroup; nis_destroy_object; nis_destroygroup;
nis_dir_cmp; nis_domain_of; nis_domain_of_r;
nis_first_entry; nis_free_attr; nis_free_directory;
nis_free_endpoints; nis_free_entry; nis_free_group;
nis_free_link; nis_free_object; nis_free_request;
nis_free_servers; nis_free_table; nis_freenames;
nis_freeresult; nis_freeservlist; nis_freetags;
nis_getnames; nis_getservlist; nis_ismember;
nis_leaf_of; nis_leaf_of_r; nis_lerror;
nis_list; nis_local_directory; nis_local_group;
nis_local_host; nis_local_principal; nis_lookup;
nis_mkdir; nis_modify; nis_modify_entry;
nis_name_of; nis_name_of_r; nis_next_entry;
nis_perror; nis_ping; nis_print_directory;
nis_print_entry; nis_print_group; nis_print_group_entry;
nis_print_link; nis_print_object; nis_print_result;
nis_print_rights; nis_print_table; nis_read_obj;
nis_remove; nis_remove_entry; nis_removemember;
nis_rmdir; nis_servstate; nis_sperrno;
nis_sperror; nis_sperror_r; nis_stats;
nis_verifygroup; nis_write_obj;
readColdStartFile; writeColdStartFile;
xdr_cp_result; xdr_directory_obj; xdr_domainname;
xdr_dump_args; xdr_endpoint; xdr_entry_col;
xdr_entry_obj; xdr_fd_args; xdr_fd_result;
xdr_group_obj; xdr_ib_request; xdr_keydat;
xdr_link_obj; xdr_log_entry; xdr_log_entry_t;
xdr_log_result; xdr_mapname; xdr_nis_attr;
xdr_nis_error; xdr_nis_name; xdr_nis_object;
xdr_nis_oid; xdr_nis_result; xdr_nis_server;
xdr_nis_tag; xdr_nis_taglist; xdr_ns_request;
xdr_nstype; xdr_oar_mask; xdr_objdata;
xdr_peername; xdr_ping_args; xdr_table_col;
xdr_table_obj; xdr_valdat; xdr_yp_buf;
xdr_ypbind_binding; xdr_ypbind_resp; xdr_ypbind_resptype;
xdr_ypbind_setdom; xdr_ypdelete_args; xdr_ypmap_parms;
xdr_ypmaplist; xdr_yppush_status; xdr_yppushresp_xfr;
xdr_ypreq_key; xdr_ypreq_nokey; xdr_ypreq_xfr;
xdr_ypresp_all; xdr_ypresp_key_val; xdr_ypresp_maplist;
xdr_ypresp_master; xdr_ypresp_order; xdr_ypresp_val;
xdr_ypresp_xfr; xdr_ypstat; xdr_ypupdate_args;
xdr_ypxfrstat; xdr_zotypes;
yp_all; yp_bind; yp_first;
yp_get_default_domain; yp_maplist; yp_master;
yp_match; yp_next; yp_order;
yp_unbind; yp_update; ypbinderr_string;
yperr_string; ypprot_err;
local:
*;

View File

@ -80,7 +80,7 @@ saveit (int instatus, char *inkey, int inkeylen, char *inval,
return 0;
}
enum nss_status
static enum nss_status
internal_nis_setetherent (void)
{
char *domainname;

View File

@ -72,7 +72,7 @@ saveit (int instatus, char *inkey, int inkeylen, char *inval,
return 0;
}
enum nss_status
static enum nss_status
internal_nis_setprotoent (void)
{
char *domainname;

View File

@ -44,72 +44,14 @@ static nis_name *names = NULL;
/* Get implementation for some internal functions. */
#include "../../resolv/mapv4v6addr.h"
#define ENTNAME hostent
#define DATABASE "hosts"
#define NEED_H_ERRNO
#define ENTDATA hostent_data
struct hostent_data
{
unsigned char host_addr[16]; /* IPv4 or IPv6 address. */
char *h_addr_ptrs[2]; /* Points to that and null terminator. */
};
#define TRAILING_LIST_MEMBER h_aliases
#define TRAILING_LIST_SEPARATOR_P isspace
#include "../../nss/nss_files/files-parse.c"
LINE_PARSER
("#",
{
char *addr;
STRING_FIELD (addr, isspace, 1);
/* Parse address. */
if (inet_pton (AF_INET6, addr, entdata->host_addr) > 0)
{
result->h_addrtype = AF_INET6;
result->h_length = IN6ADDRSZ;
}
else
if (inet_pton (AF_INET, addr, entdata->host_addr) > 0)
{
if (_res.options & RES_USE_INET6)
{
map_v4v6_address ((char *) entdata->host_addr,
(char *) entdata->host_addr);
result->h_addrtype = AF_INET6;
result->h_length = IN6ADDRSZ;
}
else
{
result->h_addrtype = AF_INET;
result->h_length = INADDRSZ;
}
}
else
/* Illegal address: ignore line. */
return 0;
/* Store a pointer to the address in the expected form. */
entdata->h_addr_ptrs[0] = entdata->host_addr;
entdata->h_addr_ptrs[1] = NULL;
result->h_addr_list = entdata->h_addr_ptrs;
STRING_FIELD (result->h_name, isspace, 1);
}
)
static int
_nss_nisplus_parse_hostent (nis_result *result, struct hostent *host,
_nss_nisplus_parse_hostent (nis_result *result, int af, struct hostent *host,
char *buffer, size_t buflen)
{
char *p = buffer;
size_t room_left = buflen;
int parse_res;
unsigned int i;
struct parser_data *data = (void *) buffer;
char *first_unused = buffer;
size_t room_left = buflen;
char *data, *p, *line;
if (result == NULL)
return 0;
@ -121,43 +63,117 @@ _nss_nisplus_parse_hostent (nis_result *result, struct hostent *host,
result->objects.objects_val[0].zo_data.objdata_u.en_data.en_cols.en_cols_len < 4)
return 0;
memset (p, '\0', room_left);
/* Generate the hosts entry format and use the normal parser */
if (NISENTRYLEN (0, 2, result) + 1 > room_left)
if (room_left < NISENTRYLEN (0, 2, result) + 1)
{
__set_errno (ERANGE);
return 0;
}
strncpy (p, NISENTRYVAL (0, 2, result),
NISENTRYLEN (0, 2, result));
room_left -= (NISENTRYLEN (0, 2, result) + 1);
data = first_unused;
if (inet_pton (af, NISENTRYVAL (0, 2, result), data) < 1)
/* Illegal address: ignore line. */
return 0;
host->h_addrtype = af;
if (af == AF_INET6)
host->h_length = IN6ADDRSZ;
else
{
if (_res.options & RES_USE_INET6)
{
map_v4v6_address (data, data);
host->h_addrtype = AF_INET6;
host->h_length = IN6ADDRSZ;
}
else
{
host->h_addrtype = AF_INET;
host->h_length = INADDRSZ;
}
}
first_unused+=host->h_length;
room_left-=host->h_length;
if (NISENTRYLEN (0, 0, result) + 1 > room_left)
{
__set_errno (ERANGE);
return 0;
}
strcat (p, "\t");
strncat (p, NISENTRYVAL (0, 0, result), NISENTRYLEN (0, 0, result));
p = stpncpy (first_unused, NISENTRYVAL (0, 0, result),
NISENTRYLEN (0, 0, result));
*p = '\0';
room_left -= (NISENTRYLEN (0, 0, result) + 1);
/* + 1: We overwrite the last \0 */
host->h_name = first_unused;
first_unused += NISENTRYLEN (0, 0, result) +1;
p = first_unused;
for (i = 1; i < result->objects.objects_len; i++)
line = p;
for (i = 0; i < result->objects.objects_len; i++)
{
if (NISENTRYLEN (i, 1, result) + 1 > room_left)
if (strcmp (NISENTRYVAL (i, 1, result), host->h_name) != 0)
{
if (NISENTRYLEN (i, 1, result) + 2 > room_left)
{
__set_errno (ERANGE);
return 0;
}
p = stpcpy(p, " ");
p = stpncpy (p, NISENTRYVAL (i, 1, result),
NISENTRYLEN (i, 1, result));
*p = '\0';
room_left -= (NISENTRYLEN (i, 1, result) + 1);
}
}
++p;
first_unused = p;
/* Adjust the pointer so it is aligned for
storing pointers. */
first_unused += __alignof__ (char *) - 1;
first_unused -= ((first_unused - (char *) 0) % __alignof__ (char *));
host->h_addr_list = (char **) first_unused;
if (room_left < 2 * sizeof (char *))
{
__set_errno (ERANGE);
return 0;
}
room_left -= (2 * sizeof (char *));
host->h_addr_list[0] = data;
host->h_addr_list[1] = NULL;
host->h_aliases = &host->h_addr_list[2];
host->h_aliases[0] = NULL;
i = 0;
while (*line != '\0')
{
/* Skip leading blanks. */
while (isspace (*line))
line++;
if (*line == '\0')
break;
if (room_left < sizeof (char *))
{
__set_errno (ERANGE);
return 0;
}
strcat (p, " ");
strcat (p, NISENTRYVAL (i, 1, result));
room_left -= (NISENTRYLEN (i, 1, result) + 1);
room_left -= sizeof (char *);
host->h_aliases[i] = line;
while (*line != '\0' && *line != ' ')
line++;
if (line != host->h_aliases[i])
{
*line = '\0';
line++;
i++;
}
}
parse_res = parse_line (p, host, data, buflen);
return 1;
return parse_res;
}
enum nss_status
@ -249,7 +265,11 @@ internal_nisplus_gethostent_r (struct hostent *host, char *buffer,
}
}
parse_res = _nss_nisplus_parse_hostent (result, host, buffer, buflen);
parse_res = _nss_nisplus_parse_hostent (result, AF_INET6,
host, buffer, buflen);
if (!parse_res && errno != ERANGE)
parse_res = _nss_nisplus_parse_hostent (result, AF_INET, host,
buffer, buflen);
if (!parse_res && errno == ERANGE)
{
*herrnop = NETDB_INTERNAL;
@ -326,7 +346,8 @@ _nss_nisplus_gethostbyname2_r (const char *name, int af, struct hostent *host,
return retval;
}
parse_res = _nss_nisplus_parse_hostent (result, host, buffer, buflen);
parse_res =
_nss_nisplus_parse_hostent (result, af, host, buffer, buflen);
nis_freeresult (result);
@ -360,19 +381,20 @@ _nss_nisplus_gethostbyname_r (const char *name, struct hostent *host,
}
enum nss_status
_nss_nisplus_gethostbyaddr_r (const char *addr, struct hostent *host,
char *buffer, size_t buflen, int *herrnop)
_nss_nisplus_gethostbyaddr_r (const char *addr, int addrlen, int type,
struct hostent *host, char *buffer,
size_t buflen, int *herrnop)
{
if (addr == NULL)
return NSS_STATUS_NOTFOUND;
else
{
nis_result *result;
char buf[24 + strlen (addr)];
char buf[1025];
int retval, parse_res;
sprintf(buf, "[addr=%s],hosts.org_dir", addr);
snprintf(buf, sizeof (buf) -1, "[addr=%s],hosts.org_dir",
inet_ntoa (*(struct in_addr *)addr));
result = nis_list(buf, EXPAND_NAME, NULL, NULL);
retval = niserr2nss (result->status);
@ -387,7 +409,8 @@ _nss_nisplus_gethostbyaddr_r (const char *addr, struct hostent *host,
return retval;
}
parse_res = _nss_nisplus_parse_hostent (result, host, buffer, buflen);
parse_res = _nss_nisplus_parse_hostent (result, type, host,
buffer, buflen);
nis_freeresult (result);

View File

@ -5,6 +5,8 @@ GLIBC_2.0 {
inet_net_ntop; inet_net_pton; inet_neta; res_gethostbyaddr;
res_gethostbyname; res_gethostbyname2; res_mkquery; res_query;
res_querydomain; res_search; res_send_setqhook; res_send_setrhook;
__res_dnok; __res_hnok; __p_class; __hostalias; __dn_skipname;
__p_type;
local:
*;

View File

@ -1,5 +1,5 @@
/* ix87 specific implementation of arcsinh.
Copyright (C) 1996 Free Software Foundation, Inc.
Copyright (C) 1996, 1997 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
@ -51,8 +51,12 @@ ENTRY(__asinh)
andl $0x80000000, %ecx
xorl %ecx, 8(%esp)
fldl 4(%esp) // |x|
movl %eax, %edx
cmpl $0x3e300000, %eax
jb 2f // |x| < 2^-28
orl $0x800fffff, %edx
incl %edx
jz 4f // x in ±Inf or NaN
fldln2 // log(2) : |x|
cmpl $0x41b00000, %eax
fxch // |x| : log(2)

View File

@ -1,5 +1,5 @@
/* ix87 specific implementation of arcsinh.
Copyright (C) 1996 Free Software Foundation, Inc.
Copyright (C) 1996, 1997 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
@ -51,8 +51,12 @@ ENTRY(__asinhf)
andl $0x80000000, %ecx
xorl %ecx, 8(%esp)
flds 4(%esp) // |x|
movl %eax, %edx
cmpl $0x38000000, %eax
jb 2f // |x| < 2^-14
orl $0x807fffff, %edx
incl %edx
jz 4f // x in ±Inf or NaN
fldln2 // log(2) : |x|
cmpl $0x47000000, %eax
fxch // |x| : log(2)

View File

@ -1,5 +1,5 @@
/* ix87 specific implementation of arcsinh.
Copyright (C) 1996 Free Software Foundation, Inc.
Copyright (C) 1996, 1997 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
@ -58,8 +58,12 @@ ENTRY(__asinhl)
andl $0x8000, %ecx
xorl %ecx, 12(%esp)
fldt 4(%esp) // |x|
movl %eax, %edx
cmpl $0x3fde, %eax
jb 2f // |x| < 2^-34
orl $0xffff8000, %edx
incl %edx
jz 4f // x in ±Inf or NaN
fldln2 // log(2) : |x|
cmpl $0x4020, %eax
fxch // |x| : log(2)

View File

@ -18,6 +18,8 @@ ENTRY(__nearbyint)
frndint
fclex
fldcw (%esp)
popl %ecx
popl %eax
ret
END (__nearbyint)
weak_alias (__nearbyint, nearbyint)

View File

@ -18,6 +18,8 @@ ENTRY(__nearbyintf)
frndint
fclex
fldcw (%esp)
popl %ecx
popl %eax
ret
END (__nearbyintf)
weak_alias (__nearbyintf, nearbyintf)

View File

@ -18,6 +18,8 @@ ENTRY(__nearbyintl)
frndint
fclex
fldcw (%esp)
popl %ecx
popl %eax
ret
END (__nearbyintl)
weak_alias (__nearbyintl, nearbyintl)

View File

@ -83,3 +83,27 @@ fi
if test -f $srcdir/elf/ldconfig.c; then
has_ldconfig=yes
fi
# Generate stdio_lim.h
default_fopen_max="`${CC-gcc} -E $srcdir/sysdeps/unix/sysv/linux/mk-stdiolim.c | grep DEFAULT_FOPEN_MAX | cut -f2 -d':'`"
default_filename_max="`${CC-gcc} -E $srcdir/sysdeps/unix/sysv/linux/mk-stdiolim.c | grep DEFAULT_FILENAME_MAX | cut -f2 -d':'`"
# We double check if "default_fopen_max" and "default_filename_max" are
# ok or not.
if test "x$default_fopen_max" != "xOPEN_MAX" \
-a "x$default_filename_max" != "xPATH_MAX"
then
sed -e "s/DEFAULT_FOPEN_MAX/$default_fopen_max/" \
-e "s/DEFAULT_FILENAME_MAX/$default_filename_max/" \
$srcdir/sysdeps/unix/sysv/linux/stdio_lim.h.in > stdio_lim.h.new
if test -r stdio_lim.h.new && cmp -s stdio_lim.h.new stdio_lim.h
then
echo stdio_lim.h unchanged
rm -f stdio_lim.h.new
else
mv -f stdio_lim.h.new stdio_lim.h
fi
else
# We remove the old one if we cannot generate the new one during
# configure.
rm -f stdio_lim.h
fi

View File

@ -0,0 +1,4 @@
#include <linux/limits.h>
DEFAULT_FOPEN_MAX:OPEN_MAX
DEFAULT_FILENAME_MAX:PATH_MAX

View File

@ -0,0 +1,8 @@
#define L_tmpnam 19
#define TMP_MAX 238328
#ifdef __USE_POSIX
#define L_ctermid 9
#define L_cuserid 9
#endif
#define FOPEN_MAX DEFAULT_FOPEN_MAX
#define FILENAME_MAX DEFAULT_FILENAME_MAX