aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog26
-rw-r--r--crypt/md5-crypt.c28
-rw-r--r--libio/tst_putwc.c10
-rw-r--r--libio/wfiledoalloc.c9
-rw-r--r--locale/duplocale.c15
-rw-r--r--locale/freelocale.c6
-rw-r--r--locale/newlocale.c43
-rw-r--r--locale/nl_langinfo.c2
-rw-r--r--locale/xlocale.h5
9 files changed, 89 insertions, 55 deletions
diff --git a/ChangeLog b/ChangeLog
index 4f1ef5a..971ec0c 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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
diff --git a/crypt/md5-crypt.c b/crypt/md5-crypt.c
index c842be5..e99f8ca 100644
--- a/crypt/md5-crypt.c
+++ b/crypt/md5-crypt.c
@@ -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;
}
diff --git a/libio/tst_putwc.c b/libio/tst_putwc.c
index 142b3bc..60bb232 100644
--- a/libio/tst_putwc.c
+++ b/libio/tst_putwc.c
@@ -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;
}
diff --git a/libio/wfiledoalloc.c b/libio/wfiledoalloc.c
index 76226e9..4e4ca67 100644
--- a/libio/wfiledoalloc.c
+++ b/libio/wfiledoalloc.c
@@ -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;
diff --git a/locale/duplocale.c b/locale/duplocale.c
index 2dcc0f5..4b3bc89 100644
--- a/locale/duplocale.c
+++ b/locale/duplocale.c
@@ -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. */
diff --git a/locale/freelocale.c b/locale/freelocale.c
index 3cfa527..5e7dcbd 100644
--- a/locale/freelocale.c
+++ b/locale/freelocale.c
@@ -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]);
diff --git a/locale/newlocale.c b/locale/newlocale.c
index 4a2f145..5c0d7ba 100644
--- a/locale/newlocale.c
+++ b/locale/newlocale.c
@@ -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;
diff --git a/locale/nl_langinfo.c b/locale/nl_langinfo.c
index 9b0b7c7..5347d79 100644
--- a/locale/nl_langinfo.c
+++ b/locale/nl_langinfo.c
@@ -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 *) "";
diff --git a/locale/xlocale.h b/locale/xlocale.h
index 8096080..d1c3f97 100644
--- a/locale/xlocale.h
+++ b/locale/xlocale.h
@@ -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;