From a164874646386e3bba4d0ac17e6e69033396363f Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Sat, 25 Sep 1999 06:37:46 +0000 Subject: [PATCH] Update. 1999-09-24 Andreas Jaeger * stdio-common/tst-printf.c (main): Add a testcase for large precision. Reported by Tymm Twillman . 1999-09-24 Andreas Schwab * math/bits/mathcalls.h: Fix last change. Also declare __finite. 1999-09-24 Andreas Jaeger * intl/finddomain.c (_nl_find_domain): Fix memory leak: Free normalized_codeset. Reported by Belicky Zsolt . 1999-09-23 Mark Kettenis * sysdeps/unix/sysv/linux/Makefile [malloc] (CFLAGS-malloc.c): New variable. Define MORECORE_CLEARS to 2. * malloc/malloc.c (cALLOc): Correctly handle systems where sbrk doesn't clear the contents of memory that is reallocated after decrementing the break value first. Update comment about MORECORE_CLEARS, explaining the meaning of the values it can be set to. --- ChangeLog | 27 ++++++++++++++++++++++++++- intl/finddomain.c | 4 ++++ malloc/malloc.c | 24 +++++++++++++++++++----- math/bits/mathcalls.h | 9 ++++++--- stdio-common/tst-printf.c | 3 +++ sysdeps/unix/sysv/linux/Makefile | 4 ++++ 6 files changed, 62 insertions(+), 9 deletions(-) diff --git a/ChangeLog b/ChangeLog index ec116225a7..f214f1519c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,28 @@ +1999-09-24 Andreas Jaeger + + * stdio-common/tst-printf.c (main): Add a testcase for large + precision. Reported by Tymm Twillman . + +1999-09-24 Andreas Schwab + + * math/bits/mathcalls.h: Fix last change. Also declare __finite. + +1999-09-24 Andreas Jaeger + + * intl/finddomain.c (_nl_find_domain): Fix memory leak: Free + normalized_codeset. Reported by Belicky Zsolt . + +1999-09-23 Mark Kettenis + + * sysdeps/unix/sysv/linux/Makefile [malloc] (CFLAGS-malloc.c): New + variable. Define MORECORE_CLEARS to 2. + + * malloc/malloc.c (cALLOc): Correctly handle systems where sbrk + doesn't clear the contents of memory that is reallocated after + decrementing the break value first. Update comment about + MORECORE_CLEARS, explaining the meaning of the values it can be + set to. + 1999-09-23 Ulrich Drepper * nis/nss_compat/compat-pwd.c (internal_getpwuid_r): Set errno in @@ -13,7 +38,7 @@ * stdio-common/tstscanf.c (main): Add test case from PR libc/1313 reported by Ben Caradoc-Davies . - + 1999-09-22 Andreas Schwab * stdio-common/vfscanf.c: Fix width handling when scanning floats. diff --git a/intl/finddomain.c b/intl/finddomain.c index a3083b10e2..c6c176ae2b 100644 --- a/intl/finddomain.c +++ b/intl/finddomain.c @@ -191,6 +191,10 @@ _nl_find_domain (dirname, locale, domainname) if (alias_value != NULL) free (locale); + /* The space for normalized_codeset is dynamically allocated. Free it. */ + if (mask & XPG_NORM_CODESET) + free (normalized_codeset); + return retval; } diff --git a/malloc/malloc.c b/malloc/malloc.c index 98a248b894..5fd2dfba76 100644 --- a/malloc/malloc.c +++ b/malloc/malloc.c @@ -226,8 +226,12 @@ MORECORE_FAILURE (default: -1) The value returned upon failure of MORECORE. MORECORE_CLEARS (default 1) - True (1) if the routine mapped to MORECORE zeroes out memory (which - holds for sbrk). + The degree to which the routine mapped to MORECORE zeroes out + memory: never (0), only for newly allocated space (1) or always + (2). The distinction between (1) and (2) is necessary because on + some systems, if the application first decrements and then + increments the break value, the contents of the reallocated space + are unspecified. DEFAULT_TRIM_THRESHOLD DEFAULT_TOP_PAD DEFAULT_MMAP_THRESHOLD @@ -861,11 +865,15 @@ Void_t *(*__morecore)() = __default_morecore; #endif -static size_t __libc_pagesize; - #define MORECORE (*__morecore) #define MORECORE_FAILURE 0 + +#ifndef MORECORE_CLEARS #define MORECORE_CLEARS 1 +#endif + +static size_t __libc_pagesize; + #define mmap __mmap #define munmap __munmap #define mremap __mremap @@ -3596,10 +3604,16 @@ Void_t* cALLOc(n, elem_size) size_t n; size_t elem_size; if(!ar_ptr) return 0; - /* check if expand_top called, in which case don't need to clear */ + /* Check if expand_top called, in which case there may be + no need to clear. */ #if MORECORE_CLEARS oldtop = top(ar_ptr); oldtopsize = chunksize(top(ar_ptr)); +#if MORECORE_CLEARS < 2 + /* Only newly allocated memory is guaranteed to be cleared. */ + if (oldtopsize < sbrk_base + max_sbrked_mem - (char *)oldtop) + oldtopsize = (sbrk_base + max_sbrked_mem - (char *)oldtop); +#endif #endif p = chunk_alloc (ar_ptr, sz); diff --git a/math/bits/mathcalls.h b/math/bits/mathcalls.h index 0a4f3eaab4..97bda451aa 100644 --- a/math/bits/mathcalls.h +++ b/math/bits/mathcalls.h @@ -175,13 +175,16 @@ __MATHCALL (fmod,, (_Mdouble_ __x, _Mdouble_ __y)); is +Infinity, -1 if it is -Infinity. */ __MATHDECL_1 (int,__isinf,, (_Mdouble_ __value)) __attribute__ ((__const__)); +/* Return nonzero if VALUE is finite and not NaN. */ +__MATHDECL_1 (int,__finite,, (_Mdouble_ __value)) __attribute__ ((__const__)); + #ifdef __USE_MISC /* Return 0 if VALUE is finite or NaN, +1 if it is +Infinity, -1 if it is -Infinity. */ __MATHDECL_1 (int,isinf,, (_Mdouble_ __value)) __attribute__ ((__const__)); /* Return nonzero if VALUE is finite and not NaN. */ -__MATHDECLX (int,finite,, (_Mdouble_ __value), (__const__)); +__MATHDECL_1 (int,finite,, (_Mdouble_ __value)) __attribute__ ((__const__)); /* Deal with an infinite or NaN result. If ERROR is ERANGE, result is +Inf; @@ -211,11 +214,11 @@ __MATHCALLX (nan,, (__const char *__tagb), (__const__)); /* Return nonzero if VALUE is not a number. */ -__MATHDECLX (int,__isnan,, (_Mdouble_ __value), (__const__)); +__MATHDECL_1 (int,__isnan,, (_Mdouble_ __value)) __attribute__ ((__const__)); #if defined __USE_MISC || defined __USE_XOPEN /* Return nonzero if VALUE is not a number. */ -__MATHDECLX (int,isnan,, (_Mdouble_ __value), (__const__)); +__MATHDECL_1 (int,isnan,, (_Mdouble_ __value)) __attribute__ ((__const__)); /* Bessel functions. */ __MATHCALL (j0,, (_Mdouble_)); diff --git a/stdio-common/tst-printf.c b/stdio-common/tst-printf.c index c50c882028..28d5c5116a 100644 --- a/stdio-common/tst-printf.c +++ b/stdio-common/tst-printf.c @@ -213,8 +213,11 @@ I am ready for my first lesson today."; { char buf[20]; + char buf2[512]; printf ("snprintf (\"%%30s\", \"foo\") == %d, \"%.*s\"\n", snprintf (buf, sizeof (buf), "%30s", "foo"), sizeof (buf), buf); + printf ("snprintf (\"%%.999999u\", 10)\n", + snprintf(buf2, sizeof(buf2), "%.999999u", 10)); } fp_test (); diff --git a/sysdeps/unix/sysv/linux/Makefile b/sysdeps/unix/sysv/linux/Makefile index ef41259ba4..974b4ff20c 100644 --- a/sysdeps/unix/sysv/linux/Makefile +++ b/sysdeps/unix/sysv/linux/Makefile @@ -8,6 +8,10 @@ ifeq ($(subdir),db2) CPPFLAGS += -DHAVE_LLSEEK=1 endif +ifeq ($(subdir),malloc) +CFLAGS-malloc.c = -DMORECORE_CLEARS=2 +endif + ifeq ($(subdir),misc) sysdep_routines += sysctl clone llseek getresuid getresgid umount umount2