2000-07-24  Jakub Jelinek  <jakub@redhat.com>

	* libio/wfiledoalloc.c (_IO_wfile_doallocate): Measure size
	in wide characters, not bytes.
	* libio/tst_putwc.c (do_test): Add test for writing lots of data
	into file.

2000-07-22  Bruno Haible  <haible@clisp.cons.org>

	* locale/nl_langinfo.c (nl_langinfo): Accept items belonging to the
	new categories LC_PAPER, LC_NAME, LC_ADDRESS, LC_TELEPHONE,
	LC_MEASUREMENT, LC_IDENTIFICATION.

	* locale/xlocale.h (struct __locale_struct): Increase size of
	__locales array.
	* locale/duplocale.c (__duplocale): Copy newly added categories as
	well.
	* locale/freelocale.c (__freelocale): Free newly added categories.
	* locale/newlocale.c (__newlocale): Fix typo in sanity check.
	If a base is given, use it, don't simply return it.

2000-07-22  Bruno Haible  <haible@clisp.cons.org>

	* crypt/md5-crypt.c (__md5_crypt_r): Avoid gcc warnings: Use pointer
	variables, copied_key and copied_salt, instead of boolean variables.
This commit is contained in:
Ulrich Drepper 2000-07-24 21:03:16 +00:00
parent f3d5834e69
commit 5bef282098
9 changed files with 89 additions and 55 deletions

View File

@ -1,3 +1,29 @@
2000-07-24 Jakub Jelinek <jakub@redhat.com>
* libio/wfiledoalloc.c (_IO_wfile_doallocate): Measure size
in wide characters, not bytes.
* libio/tst_putwc.c (do_test): Add test for writing lots of data
into file.
2000-07-22 Bruno Haible <haible@clisp.cons.org>
* locale/nl_langinfo.c (nl_langinfo): Accept items belonging to the
new categories LC_PAPER, LC_NAME, LC_ADDRESS, LC_TELEPHONE,
LC_MEASUREMENT, LC_IDENTIFICATION.
* locale/xlocale.h (struct __locale_struct): Increase size of
__locales array.
* locale/duplocale.c (__duplocale): Copy newly added categories as
well.
* locale/freelocale.c (__freelocale): Free newly added categories.
* locale/newlocale.c (__newlocale): Fix typo in sanity check.
If a base is given, use it, don't simply return it.
2000-07-22 Bruno Haible <haible@clisp.cons.org>
* crypt/md5-crypt.c (__md5_crypt_r): Avoid gcc warnings: Use pointer
variables, copied_key and copied_salt, instead of boolean variables.
2000-07-24 Andreas Jaeger <aj@suse.de>
* sysdeps/unix/sysv/linux/powerpc/mmap64.c (__mmap64): Fix offset

View File

@ -60,8 +60,8 @@ __md5_crypt_r (key, salt, buffer, buflen)
size_t key_len;
size_t cnt;
char *cp;
int key_copied = 0;
int salt_copied = 0;
char *copied_key = NULL;
char *copied_salt = NULL;
/* Find beginning of salt string. The prefix should normally always
be present. Just in case it is not. */
@ -75,21 +75,21 @@ __md5_crypt_r (key, salt, buffer, buflen)
if ((key - (char *) 0) % __alignof__ (md5_uint32) != 0)
{
char *tmp = (char *) alloca (key_len + __alignof__ (md5_uint32));
key = memcpy (tmp + __alignof__ (md5_uint32)
- (tmp - (char *) 0) % __alignof__ (md5_uint32),
key, key_len);
key = copied_key =
memcpy (tmp + __alignof__ (md5_uint32)
- (tmp - (char *) 0) % __alignof__ (md5_uint32),
key, key_len);
assert ((key - (char *) 0) % __alignof__ (md5_uint32) == 0);
key_copied = 1;
}
if ((salt - (char *) 0) % __alignof__ (md5_uint32) != 0)
{
char *tmp = (char *) alloca (salt_len + __alignof__ (md5_uint32));
salt = memcpy (tmp + __alignof__ (md5_uint32)
- (tmp - (char *) 0) % __alignof__ (md5_uint32),
salt, salt_len);
salt = copied_salt =
memcpy (tmp + __alignof__ (md5_uint32)
- (tmp - (char *) 0) % __alignof__ (md5_uint32),
salt, salt_len);
assert ((salt - (char *) 0) % __alignof__ (md5_uint32) == 0);
salt_copied = 1;
}
/* Prepare for the real work. */
@ -225,10 +225,10 @@ __md5_crypt_r (key, salt, buffer, buflen)
__md5_finish_ctx (&ctx, alt_result);
memset (&ctx, '\0', sizeof (ctx));
memset (&alt_ctx, '\0', sizeof (alt_ctx));
if (key_copied)
memset ((char *) key, '\0', key_len);
if (salt_copied)
memset ((char *) salt, '\0', salt_len);
if (copied_key != NULL)
memset (copied_key, '\0', key_len);
if (copied_salt != NULL)
memset (copied_salt, '\0', salt_len);
return buffer;
}

View File

@ -101,6 +101,16 @@ do_test (void)
res = 1;
}
/* Next test: write a bit more than a few bytes. */
fp = fopen (outname, "w");
if (fp == NULL)
error (EXIT_FAILURE, errno, "cannot open temporary file");
for (n = 0; n < 4098; ++n)
putwc (n & 255, fp);
fclose (fp);
return res;
}

View File

@ -82,7 +82,7 @@ _IO_wfile_doallocate (fp)
if (fp->_fileno < 0 || _IO_SYSSTAT (fp, &st) < 0)
{
couldbetty = 0;
size = _IO_BUFSIZ * sizeof (wchar_t);
size = _IO_BUFSIZ;
#if 0
/* do not try to optimise fseek() */
fp->_flags |= __SNPT;
@ -92,13 +92,12 @@ _IO_wfile_doallocate (fp)
{
couldbetty = S_ISCHR (st.st_mode);
#if _IO_HAVE_ST_BLKSIZE
size = ((st.st_blksize <= 0 ? _IO_BUFSIZ : st.st_blksize)
* sizeof (wchar_t));
size = st.st_blksize <= 0 ? _IO_BUFSIZ : st.st_blksize;
#else
size = _IO_BUFSIZ * sizeof (wchar_t);
size = _IO_BUFSIZ;
#endif
}
ALLOC_WBUF (p, size, EOF);
ALLOC_WBUF (p, size * sizeof (wchar_t), EOF);
_IO_wsetb (fp, p, p + size, 1);
if (couldbetty && isatty (fp->_fileno))
fp->_flags |= _IO_LINE_BUF;

View File

@ -1,5 +1,5 @@
/* Duplicate handle for selection of locales.
Copyright (C) 1997 Free Software Foundation, Inc.
Copyright (C) 1997, 2000 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
@ -42,12 +42,13 @@ __duplocale (__locale_t dataset)
if (result != NULL)
{
int cnt;
for (cnt = 0; cnt < LC_ALL; ++cnt)
{
result->__locales[cnt] = dataset->__locales[cnt];
if (result->__locales[cnt]->usage_count < MAX_USAGE_COUNT)
++result->__locales[cnt]->usage_count;
}
for (cnt = 0; cnt < __LC_LAST; ++cnt)
if (cnt != LC_ALL)
{
result->__locales[cnt] = dataset->__locales[cnt];
if (result->__locales[cnt]->usage_count < MAX_USAGE_COUNT)
++result->__locales[cnt]->usage_count;
}
}
/* It's done. */

View File

@ -1,5 +1,5 @@
/* Free data allocated by a call to setlocale_r
Copyright (C) 1996, 1997 Free Software Foundation, Inc.
Copyright (C) 1996, 1997, 2000 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
@ -37,8 +37,8 @@ __freelocale (__locale_t dataset)
/* We modify global data. */
__libc_lock_lock (__libc_setlocale_lock);
for (cnt = 0; cnt < LC_ALL; ++cnt)
if (dataset->__locales[cnt]->usage_count != UNDELETABLE)
for (cnt = 0; cnt < __LC_LAST; ++cnt)
if (cnt != LC_ALL && dataset->__locales[cnt]->usage_count != UNDELETABLE)
/* We can remove the data. */
_nl_remove_locale (cnt, dataset->__locales[cnt]);

View File

@ -1,5 +1,5 @@
/* Return a reference to locale information record.
Copyright (C) 1996, 1997, 1999 Free Software Foundation, Inc.
Copyright (C) 1996, 1997, 1999, 2000 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
@ -54,7 +54,7 @@ __newlocale (int category_mask, const char *locale, __locale_t base)
category_mask = (1 << __LC_LAST) - 1 - (1 << LC_ALL);
/* Sanity check for CATEGORY argument. */
if ((category_mask & ~((1 << LC_ALL) - 1 - (1 << LC_ALL))) != 0)
if ((category_mask & ~((1 << __LC_LAST) - 1 - (1 << LC_ALL))) != 0)
ERROR_RETURN;
/* `newlocale' does not support asking for the locale name. */
@ -63,28 +63,25 @@ __newlocale (int category_mask, const char *locale, __locale_t base)
/* Allocate memory for the result. */
if (base != NULL)
{
if (base != NULL)
return base;
result = *base;
}
result = *base;
else
{
/* Fill with pointers to C locale data to . */
/* Fill with pointers to C locale data. */
for (cnt = 0; cnt < __LC_LAST; ++cnt)
if (cnt != LC_ALL)
result.__locales[cnt] = _nl_C[cnt];
}
/* If no category is to be set we return BASE if available or a
dataset using the C locale data. */
if (category_mask == 0)
{
result_ptr = (__locale_t) malloc (sizeof (struct __locale_struct));
*result_ptr = result;
/* If no category is to be set we return BASE if available or a
dataset using the C locale data. */
if (category_mask == 0)
{
result_ptr = (__locale_t) malloc (sizeof (struct __locale_struct));
if (result_ptr == NULL)
return NULL;
*result_ptr = result;
goto update;
}
goto update;
}
/* We perhaps really have to load some data. So we determine the
@ -175,12 +172,12 @@ __newlocale (int category_mask, const char *locale, __locale_t base)
update:
{
union locale_data_value *ctypes = result_ptr->__locales[LC_CTYPE]->values;
result_ptr->__ctype_b = (const unsigned short int *)
(ctypes[_NL_ITEM_INDEX (_NL_CTYPE_CLASS)] .string);
result_ptr->__ctype_tolower = (const int *)
(ctypes[_NL_ITEM_INDEX (_NL_CTYPE_TOLOWER)].string);
result_ptr->__ctype_toupper = (const int *)
(ctypes[_NL_ITEM_INDEX (_NL_CTYPE_TOUPPER)].string);
result_ptr->__ctype_b = (const unsigned short int *)
(ctypes[_NL_ITEM_INDEX (_NL_CTYPE_CLASS)].string);
result_ptr->__ctype_tolower = (const int *)
(ctypes[_NL_ITEM_INDEX (_NL_CTYPE_TOLOWER)].string);
result_ptr->__ctype_toupper = (const int *)
(ctypes[_NL_ITEM_INDEX (_NL_CTYPE_TOUPPER)].string);
}
return result_ptr;

View File

@ -33,7 +33,7 @@ nl_langinfo (item)
unsigned int index = _NL_ITEM_INDEX (item);
const struct locale_data *data;
if (category < 0 || category >= LC_ALL)
if (category < 0 || category == LC_ALL || category >= __LC_LAST)
/* Bogus category: bogus item. */
return (char *) "";

View File

@ -1,5 +1,5 @@
/* Definition of locale datatype.
Copyright (C) 1997 Free Software Foundation, Inc.
Copyright (C) 1997, 2000 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
@ -27,7 +27,8 @@
go away without warning. */
typedef struct __locale_struct
{
struct locale_data *__locales[6]; /* XXX LC_ALL should be used here */
/* Note: LC_ALL is not a valid index into this array. */
struct locale_data *__locales[13]; /* 13 = __LC_LAST. */
/* To increase the speed of this solution we add some special members. */
const unsigned short int *__ctype_b;