1999-11-08  Andreas Jaeger  <aj@suse.de>

	* locale/findlocale.c (_nl_find_locale): Free normalized_codeset;
	this fixes a memory leak (closes PR libc/1435).

	* intl/l10nflist.c (_nl_normalize_codeset): Update comment to
	reflect memory allocation.

	* intl/loadinfo.h: Comment _nl_normalize_codeset, comment memory
	allocation in _nl_explode_name.

1999-11-06  Andreas Jaeger  <aj@suse.de>

	* time/tzset.c: Use __libc_lock_define_initialized for tzset_lock
	to initialize it.
	Reported by wes@surety.com, closes PR libc/1432.

1999-11-05  Geoff Keating  <geoffk@cygnus.com>

	* sysdeps/powerpc/fpu/bits/fenv.h: Don't put commas at the end of
	enumerator lists (-pedantic complains).
	(feraiseexcept): Use i#*X as the constraint.  Fix a bug in the
	test for 'one bit set'.
	(feclearexcept): Likewise.
This commit is contained in:
Ulrich Drepper 1999-11-08 23:44:12 +00:00
parent 36e7206eac
commit 727211c429
7 changed files with 65 additions and 23 deletions

View File

@ -1,3 +1,28 @@
1999-11-08 Andreas Jaeger <aj@suse.de>
* locale/findlocale.c (_nl_find_locale): Free normalized_codeset;
this fixes a memory leak (closes PR libc/1435).
* intl/l10nflist.c (_nl_normalize_codeset): Update comment to
reflect memory allocation.
* intl/loadinfo.h: Comment _nl_normalize_codeset, comment memory
allocation in _nl_explode_name.
1999-11-06 Andreas Jaeger <aj@suse.de>
* time/tzset.c: Use __libc_lock_define_initialized for tzset_lock
to initialize it.
Reported by wes@surety.com, closes PR libc/1432.
1999-11-05 Geoff Keating <geoffk@cygnus.com>
* sysdeps/powerpc/fpu/bits/fenv.h: Don't put commas at the end of
enumerator lists (-pedantic complains).
(feraiseexcept): Use i#*X as the constraint. Fix a bug in the
test for 'one bit set'.
(feclearexcept): Likewise.
1999-11-05 Ulrich Drepper <drepper@cygnus.com> 1999-11-05 Ulrich Drepper <drepper@cygnus.com>
* sysdeps/unix/sysv/linux/setrlimit.c: New file. * sysdeps/unix/sysv/linux/setrlimit.c: New file.

View File

@ -352,7 +352,8 @@ _nl_make_l10nflist (l10nfile_list, dirlist, dirlist_len, mask, language,
/* Normalize codeset name. There is no standard for the codeset /* Normalize codeset name. There is no standard for the codeset
names. Normalization allows the user to use any of the common names. Normalization allows the user to use any of the common
names. */ names. The return value is dynamically allocated and has to be
freed by the caller. */
const char * const char *
_nl_normalize_codeset (codeset, name_len) _nl_normalize_codeset (codeset, name_len)
const char *codeset; const char *codeset;

View File

@ -54,6 +54,10 @@ struct loaded_l10nfile
}; };
/* Normalize codeset name. There is no standard for the codeset
names. Normalization allows the user to use any of the common
names. The return value is dynamically allocated and has to be
freed by the caller. */
extern const char *_nl_normalize_codeset PARAMS ((const char *codeset, extern const char *_nl_normalize_codeset PARAMS ((const char *codeset,
size_t name_len)); size_t name_len));
@ -70,6 +74,8 @@ _nl_make_l10nflist PARAMS ((struct loaded_l10nfile **l10nfile_list,
extern const char *_nl_expand_alias PARAMS ((const char *name)); extern const char *_nl_expand_alias PARAMS ((const char *name));
/* normalized_codeset is dynamically allocated and has to be freed by
the caller. */
extern int _nl_explode_name PARAMS ((char *name, const char **language, extern int _nl_explode_name PARAMS ((char *name, const char **language,
const char **modifier, const char **modifier,
const char **territory, const char **territory,

View File

@ -141,6 +141,10 @@ _nl_find_locale (const char *locale_path, size_t locale_path_len,
between two locales would slowly eat up all memory. */ between two locales would slowly eat up all memory. */
free ((void *) loc_name); free ((void *) loc_name);
/* The space for normalized_codeset is dynamically allocated. Free it. */
if (mask & XPG_NORM_CODESET)
free ((void *) normalized_codeset);
if (locale_file->decided == 0) if (locale_file->decided == 0)
_nl_load_locale (locale_file, category); _nl_load_locale (locale_file, category);

View File

@ -86,7 +86,7 @@ enum
# define FE_INVALID_SQRT FE_INVALID_SQRT # define FE_INVALID_SQRT FE_INVALID_SQRT
/* Conversion-to-integer of a NaN or a number too large or too small. */ /* Conversion-to-integer of a NaN or a number too large or too small. */
FE_INVALID_INTEGER_CONVERSION = 1 << (31 - 23), FE_INVALID_INTEGER_CONVERSION = 1 << (31 - 23)
# define FE_INVALID_INTEGER_CONVERSION FE_INVALID_INTEGER_CONVERSION # define FE_INVALID_INTEGER_CONVERSION FE_INVALID_INTEGER_CONVERSION
# define FE_ALL_INVALID \ # define FE_ALL_INVALID \
@ -110,7 +110,7 @@ enum
#define FE_TOWARDZERO FE_TOWARDZERO #define FE_TOWARDZERO FE_TOWARDZERO
FE_UPWARD = 2, FE_UPWARD = 2,
#define FE_UPWARD FE_UPWARD #define FE_UPWARD FE_UPWARD
FE_DOWNWARD = 3, FE_DOWNWARD = 3
#define FE_DOWNWARD FE_DOWNWARD #define FE_DOWNWARD FE_DOWNWARD
}; };
@ -152,27 +152,33 @@ extern const fenv_t *__fe_nomask_env __P ((void));
: "=r"(__fegetround_result) : : "cr7"); \ : "=r"(__fegetround_result) : : "cr7"); \
__fegetround_result & 3; })) __fegetround_result & 3; }))
/* The weird 'i#*X' constraints on the following suppress a gcc
warning when __excepts is not a constant. Otherwise, they mean the
same as just plain 'i'. */
/* Inline definition for feraiseexcept. */ /* Inline definition for feraiseexcept. */
# define feraiseexcept(__excepts) \ # define feraiseexcept(__excepts) \
(__extension__ ({ if (__builtin_constant_p (__excepts) \ ((__builtin_constant_p (__excepts) \
&& ((__excepts) & -(__excepts)) == 0 \ && ((__excepts) & ((__excepts)-1)) == 0 \
&& (__excepts) != FE_INVALID) { \ && (__excepts) != FE_INVALID) \
if ((__excepts) != 0) \ ? ((__excepts) != 0 \
__asm__ __volatile__ \ ? (__extension__ ({ __asm__ __volatile__ \
("mtfsb1 %0" \ ("mtfsb1 %s0" \
: : "i"(32 - __builtin_ffs (__excepts))); \ : : "i#*X"(__builtin_ffs (__excepts))); \
} else \ (void)0; })) \
(feraiseexcept) (__excepts); })) : (void)0) \
: (feraiseexcept) (__excepts))
/* Inline definition for feclearexcept. */ /* Inline definition for feclearexcept. */
# define feclearexcept(__excepts) \ # define feclearexcept(__excepts) \
(__extension__ ({ if (__builtin_constant_p (__excepts) \ ((__builtin_constant_p (__excepts) \
&& ((__excepts) & -(__excepts)) == 0 \ && ((__excepts) & ((__excepts)-1)) == 0 \
&& (__excepts) != FE_INVALID) { \ && (__excepts) != FE_INVALID) \
if ((__excepts) != 0) \ ? ((__excepts) != 0 \
__asm__ __volatile__ \ ? (__extension__ ({ __asm__ __volatile__ \
("mtfsb0 %0" \ ("mtfsb0 %s0" \
: : "i"(32 - __builtin_ffs (__excepts))); \ : : "i#*X"(__builtin_ffs (__excepts))); \
} else \ (void)0; })) \
(feclearexcept) (__excepts); })) : (void)0) \
: (feclearexcept) (__excepts))
#endif /* __OPTIMIZE__ && !_SOFT_FLOAT */ #endif /* __OPTIMIZE__ && !_SOFT_FLOAT */

View File

@ -23,7 +23,7 @@
#include <sysdep.h> #include <sysdep.h>
#include <sys/syscall.h> #include <sys/syscall.h>
#include "../kernel-features.h" #include "kernel-features.h"
/* Linux 2.3.25 introduced a new system call since the types used for /* Linux 2.3.25 introduced a new system call since the types used for

View File

@ -38,7 +38,7 @@ weak_alias (__daylight, daylight)
weak_alias (__timezone, timezone) weak_alias (__timezone, timezone)
/* This locks all the state variables in tzfile.c and this file. */ /* This locks all the state variables in tzfile.c and this file. */
__libc_lock_define (static, tzset_lock) __libc_lock_define_initialized (static, tzset_lock)
#define min(a, b) ((a) < (b) ? (a) : (b)) #define min(a, b) ((a) < (b) ? (a) : (b))