aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2000-01-29 12:04:45 +0000
committerUlrich Drepper <drepper@redhat.com>2000-01-29 12:04:45 +0000
commitb6aa34eb721a209444df2c0694bb18f8f4a58e47 (patch)
tree7256c643e7830c3a6aa7e852942d11d34b988d72
parent6770573aa3190c539932fd0bd56e9b64f95065a5 (diff)
downloadglibc-b6aa34eb721a209444df2c0694bb18f8f4a58e47.zip
glibc-b6aa34eb721a209444df2c0694bb18f8f4a58e47.tar.gz
glibc-b6aa34eb721a209444df2c0694bb18f8f4a58e47.tar.bz2
Update.
* locale/loadlocale.c (_nl_load_locale): Optimize a bit. Pretty print. Add checks for _POSIX_MMAPPED_FILES where necessary. (_nl_unload_locale): If locale data was mmapped use munmap. 2000-01-29 Andreas Jaeger <aj@suse.de> * sysdeps/unix/sysv/linux/i386/sys/io.h: Add missing ints, use _EXTERN_INLINE, compile inline assembler functions only with gcc. 2000-01-29 Ulrich Drepper <drepper@redhat.com> * catgets/catgets.c (catopen): Handle NL_CAT_LOCALE correctly. * catgets/gencat.c (read_input_file): Remove messages correctly. * catgets/open_catalog.c (__open_catalog): Handle trailing colons and adjacent colons correctly. Correct loops to read territory and and codeset part. Patches by Geoff Clare <gwc@unisoft.com> (PR libc/1559). * rt/aio_misc.c (get_elem): Assign pointer to new row to correct pool entry. Patch by Jens Moeller <jens.moeller@waii.com> (PR libc/1558). 2000-01-28 Jakub Jelinek <jakub@redhat.com> * sysdeps/unix/sysv/linux/arm/Versions: Export the new *rlimit interface with symbol version GLIBC_2.2. * sysdeps/unix/sysv/linux/i386/Versions: Likewise. * sysdeps/unix/sysv/linux/i386/getrlimit.c: Likewise. * sysdeps/unix/sysv/linux/i386/getrlimit64.c: Likewise. * sysdeps/unix/sysv/linux/i386/setrlimit.c: Likewise. 2000-01-27 Scott Bambrough <scottb@netwinder.org> * sysdeps/unix/sysv/linux/arm/Makefile: Backout rlimit changes for resource directory. * sysdeps/unix/sysv/linux/arm/syscalls.list: Backout changes for versioning setrlimit and getrlimit. 2000-01-27 Andreas Jaeger <aj@suse.de> * sysdeps/powerpc/fpu/libm-ulps: Renamed to ... * sysdeps/powerpc/fpu/libm-test-ulps: ...this. 2000-01-27 Ruediger Oertel <ro@suse.de> * sysdeps/unix/sysv/linux/i386/sys/io.h: Change "::" to ": :" for g++. 2000-01-29 Ulrich Drepper <drepper@redhat.com>
-rw-r--r--ChangeLog49
-rw-r--r--catgets/catgets.c18
-rw-r--r--catgets/gencat.c91
-rw-r--r--catgets/open_catalog.c175
-rw-r--r--linuxthreads/ChangeLog8
-rw-r--r--linuxthreads/condvar.c22
-rw-r--r--locale/loadlocale.c53
-rw-r--r--localedata/ChangeLog4
-rw-r--r--localedata/locales/af_ZA16
-rw-r--r--rt/aio_misc.c4
-rw-r--r--sysdeps/powerpc/fpu/libm-test-ulps (renamed from sysdeps/powerpc/fpu/libm-ulps)0
-rw-r--r--sysdeps/unix/sysv/linux/arm/Makefile4
-rw-r--r--sysdeps/unix/sysv/linux/arm/Versions2
-rw-r--r--sysdeps/unix/sysv/linux/arm/syscalls.list2
-rw-r--r--sysdeps/unix/sysv/linux/i386/Versions2
-rw-r--r--sysdeps/unix/sysv/linux/i386/getrlimit.c2
-rw-r--r--sysdeps/unix/sysv/linux/i386/getrlimit64.c2
-rw-r--r--sysdeps/unix/sysv/linux/i386/setrlimit.c2
-rw-r--r--sysdeps/unix/sysv/linux/i386/sys/io.h94
19 files changed, 311 insertions, 239 deletions
diff --git a/ChangeLog b/ChangeLog
index 4d88955..b7a21ef 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,54 @@
2000-01-29 Ulrich Drepper <drepper@redhat.com>
+ * locale/loadlocale.c (_nl_load_locale): Optimize a bit. Pretty
+ print. Add checks for _POSIX_MMAPPED_FILES where necessary.
+ (_nl_unload_locale): If locale data was mmapped use munmap.
+
+2000-01-29 Andreas Jaeger <aj@suse.de>
+
+ * sysdeps/unix/sysv/linux/i386/sys/io.h: Add missing ints, use
+ _EXTERN_INLINE, compile inline assembler functions only with gcc.
+
+2000-01-29 Ulrich Drepper <drepper@redhat.com>
+
+ * catgets/catgets.c (catopen): Handle NL_CAT_LOCALE correctly.
+ * catgets/gencat.c (read_input_file): Remove messages correctly.
+ * catgets/open_catalog.c (__open_catalog): Handle trailing colons and
+ adjacent colons correctly. Correct loops to read territory and
+ and codeset part.
+ Patches by Geoff Clare <gwc@unisoft.com> (PR libc/1559).
+
+ * rt/aio_misc.c (get_elem): Assign pointer to new row to correct
+ pool entry.
+ Patch by Jens Moeller <jens.moeller@waii.com> (PR libc/1558).
+
+2000-01-28 Jakub Jelinek <jakub@redhat.com>
+
+ * sysdeps/unix/sysv/linux/arm/Versions: Export the new *rlimit
+ interface with symbol version GLIBC_2.2.
+ * sysdeps/unix/sysv/linux/i386/Versions: Likewise.
+ * sysdeps/unix/sysv/linux/i386/getrlimit.c: Likewise.
+ * sysdeps/unix/sysv/linux/i386/getrlimit64.c: Likewise.
+ * sysdeps/unix/sysv/linux/i386/setrlimit.c: Likewise.
+
+2000-01-27 Scott Bambrough <scottb@netwinder.org>
+
+ * sysdeps/unix/sysv/linux/arm/Makefile: Backout rlimit changes for
+ resource directory.
+ * sysdeps/unix/sysv/linux/arm/syscalls.list: Backout changes for
+ versioning setrlimit and getrlimit.
+
+2000-01-27 Andreas Jaeger <aj@suse.de>
+
+ * sysdeps/powerpc/fpu/libm-ulps: Renamed to ...
+ * sysdeps/powerpc/fpu/libm-test-ulps: ...this.
+
+2000-01-27 Ruediger Oertel <ro@suse.de>
+
+ * sysdeps/unix/sysv/linux/i386/sys/io.h: Change "::" to ": :" for g++.
+
+2000-01-29 Ulrich Drepper <drepper@redhat.com>
+
* locale/programs/ld-numeric.c (numeric_output): Increment cnt in
correct place to avoid uninitialized memory passed to writev.
diff --git a/catgets/catgets.c b/catgets/catgets.c
index c6fd13d..86ff0ff 100644
--- a/catgets/catgets.c
+++ b/catgets/catgets.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
+/* Copyright (C) 1996, 1997, 1998, 1999, 2000 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper, <drepper@gnu.org>.
@@ -19,6 +19,7 @@
#include <alloca.h>
#include <errno.h>
+#include <locale.h>
#include <nl_types.h>
#include <stdlib.h>
#include <string.h>
@@ -43,20 +44,15 @@ catopen (const char *cat_name, int flag)
if (strchr (cat_name, '/') == NULL)
{
if (flag == NL_CAT_LOCALE)
- {
- env_var = getenv ("LC_ALL");
- if (env_var == NULL)
- env_var = getenv ("LC_MESSAGES");
-
- if (env_var != NULL)
- goto have_env_var;
- }
+ /* Use the current locale setting for LC_MESSAGES. */
+ env_var = setlocale (LC_MESSAGES, NULL);
+ else
+ /* Use the LANG environment variable. */
+ env_var = getenv ("LANG");
- env_var = getenv ("LANG");
if (env_var == NULL)
env_var = "C";
- have_env_var:
env_var_len = strlen (env_var) + 1;
nlspath = __secure_getenv ("NLSPATH");
diff --git a/catgets/gencat.c b/catgets/gencat.c
index eaeb59c..4609c63 100644
--- a/catgets/gencat.c
+++ b/catgets/gencat.c
@@ -1,6 +1,6 @@
-/* Copyright (C) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
+/* Copyright (C) 1996, 1997, 1998, 1999, 2000 Free Software Foundation, Inc.
This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1996.
+ Contributed by Ulrich Drepper <drepper@redhat.com>, 1996.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public License as
@@ -32,6 +32,7 @@
#include <limits.h>
#include <nl_types.h>
#include <obstack.h>
+#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
@@ -237,7 +238,7 @@ print_version (FILE *stream, struct argp_state *state)
Copyright (C) %s Free Software Foundation, Inc.\n\
This is free software; see the source for copying conditions. There is NO\n\
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n\
-"), "1999");
+"), "2000");
fprintf (stream, gettext ("Written by %s.\n"), "Ulrich Drepper");
}
@@ -492,13 +493,12 @@ this is the first definition"));
{
const char *ident = this_line;
int message_number;
- int any_space;
do
++this_line;
while (this_line[0] != '\0' && !isspace (this_line[0]));
- any_space = isspace (*this_line);
- *this_line++ = '\0'; /* Terminate the identifier. */
+ if (this_line[0] != '\0')
+ *this_line++ = '\0'; /* Terminate the identifier. */
/* Now we found the beginning of the message itself. */
@@ -522,24 +522,12 @@ this is the first definition"));
}
if (runp != NULL)
{
- if (any_space)
- {
- /* Oh, oh. There is already a message with this
- number in the message set. */
- error_at_line (0, 0, fname, start_line,
- gettext ("duplicated message number"));
- error_at_line (0, 0, runp->fname, runp->line,
- gettext ("this is the first definition"));
- }
- else
- {
- /* We have to remove this message. */
- if (lastp != NULL)
- lastp->next = runp->next;
- else
- current->current_set->messages = runp->next;
- free (runp);
- }
+ /* Oh, oh. There is already a message with this
+ number in the message set. */
+ error_at_line (0, 0, fname, start_line,
+ gettext ("duplicated message number"));
+ error_at_line (0, 0, runp->fname, runp->line,
+ gettext ("this is the first definition"));
message_number = 0;
}
ident = NULL; /* We don't have a symbol. */
@@ -564,24 +552,11 @@ this is the first definition"));
runp = runp->next;
if (runp != NULL)
{
- if (any_space)
- {
- /* The name is already used. */
- error_at_line (0, 0, fname, start_line,
- gettext ("\
+ /* The name is already used. */
+ error_at_line (0, 0, fname, start_line, gettext ("\
duplicated message identifier"));
- error_at_line (0, 0, runp->fname, runp->line,
- gettext ("this is the first definition"));
- }
- else
- {
- /* We have to remove this message. */
- if (lastp != NULL)
- lastp->next = runp->next;
- else
- current->current_set->messages = runp->next;
- free (runp);
- }
+ error_at_line (0, 0, runp->fname, runp->line,
+ gettext ("this is the first definition"));
message_number = 0;
}
else
@@ -673,7 +648,7 @@ write_out (struct catalog *catalog, const char *output_name,
struct obstack string_pool;
const char *strings;
size_t strings_size;
- u_int32_t *array1, *array2;
+ uint32_t *array1, *array2;
size_t cnt;
int fd;
@@ -751,10 +726,10 @@ write_out (struct catalog *catalog, const char *output_name,
/* Allocate room for all needed arrays. */
array1 =
- (u_int32_t *) alloca (best_size * best_depth * sizeof (u_int32_t) * 3);
- memset (array1, '\0', best_size * best_depth * sizeof (u_int32_t) * 3);
+ (uint32_t *) alloca (best_size * best_depth * sizeof (uint32_t) * 3);
+ memset (array1, '\0', best_size * best_depth * sizeof (uint32_t) * 3);
array2
- = (u_int32_t *) alloca (best_size * best_depth * sizeof (u_int32_t) * 3);
+ = (uint32_t *) alloca (best_size * best_depth * sizeof (uint32_t) * 3);
obstack_init (&string_pool);
set_run = catalog->all_sets;
@@ -812,11 +787,11 @@ write_out (struct catalog *catalog, const char *output_name,
/* We always write out the little endian version of the index
arrays. */
#if __BYTE_ORDER == __LITTLE_ENDIAN
- write (fd, array1, best_size * best_depth * sizeof (u_int32_t) * 3);
- write (fd, array2, best_size * best_depth * sizeof (u_int32_t) * 3);
+ write (fd, array1, best_size * best_depth * sizeof (uint32_t) * 3);
+ write (fd, array2, best_size * best_depth * sizeof (uint32_t) * 3);
#elif __BYTE_ORDER == __BIG_ENDIAN
- write (fd, array2, best_size * best_depth * sizeof (u_int32_t) * 3);
- write (fd, array1, best_size * best_depth * sizeof (u_int32_t) * 3);
+ write (fd, array2, best_size * best_depth * sizeof (uint32_t) * 3);
+ write (fd, array1, best_size * best_depth * sizeof (uint32_t) * 3);
#else
# error Cannot handle __BYTE_ORDER byte order
#endif
@@ -1034,7 +1009,8 @@ read_old (struct catalog *catalog, const char *file_name)
/* OK, we have the catalog loaded. Now read all messages and merge
them. When set and message number clash for any message the new
- one is used. */
+ one is used. If the new one is empty it indicates that the
+ message should be deleted. */
for (cnt = 0; cnt < old_cat_obj.plane_size * old_cat_obj.plane_depth; ++cnt)
{
struct message_list *message, *last;
@@ -1043,7 +1019,7 @@ read_old (struct catalog *catalog, const char *file_name)
/* No message in this slot. */
continue;
- if (old_cat_obj.name_ptr[cnt * 3 + 0] - 1 != (u_int32_t) last_set)
+ if (old_cat_obj.name_ptr[cnt * 3 + 0] - 1 != (uint32_t) last_set)
{
last_set = old_cat_obj.name_ptr[cnt * 3 + 0] - 1;
set = find_set (catalog, old_cat_obj.name_ptr[cnt * 3 + 0] - 1);
@@ -1053,14 +1029,14 @@ read_old (struct catalog *catalog, const char *file_name)
message = set->messages;
while (message != NULL)
{
- if ((u_int32_t) message->number >= old_cat_obj.name_ptr[cnt * 3 + 1])
+ if ((uint32_t) message->number >= old_cat_obj.name_ptr[cnt * 3 + 1])
break;
last = message;
message = message->next;
}
if (message == NULL
- || (u_int32_t) message->number > old_cat_obj.name_ptr[cnt * 3 + 1])
+ || (uint32_t) message->number > old_cat_obj.name_ptr[cnt * 3 + 1])
{
/* We have found a message which is not yet in the catalog.
Insert it at the right position. */
@@ -1082,5 +1058,14 @@ read_old (struct catalog *catalog, const char *file_name)
++catalog->total_messages;
}
+ else if (*message->message == '\0')
+ {
+ /* The new empty message has overridden the old one thus
+ "deleting" it as required. Now remove the empty remains. */
+ if (last == NULL)
+ set->messages = message->next;
+ else
+ last->next = message->next;
+ }
}
}
diff --git a/catgets/open_catalog.c b/catgets/open_catalog.c
index aefa34f..c5193e1 100644
--- a/catgets/open_catalog.c
+++ b/catgets/open_catalog.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
+/* Copyright (C) 1996, 1997, 1998, 1999, 2000 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper, <drepper@gnu.org>.
@@ -84,89 +84,100 @@ __open_catalog (__nl_catd catalog)
while (*run_nlspath != '\0')
{
bufact = 0;
- while (*run_nlspath != ':' && *run_nlspath != '\0')
- if (*run_nlspath == '%')
- {
- const char *tmp;
-
- ++run_nlspath; /* We have seen the `%'. */
- switch (*run_nlspath++)
- {
- case 'N':
- /* Use the catalog name. */
- len = strlen (catalog->cat_name);
- ENOUGH (len);
- memcpy (&buf[bufact], catalog->cat_name, len);
- bufact += len;
- break;
- case 'L':
- /* Use the current locale category value. */
- len = strlen (catalog->env_var);
- ENOUGH (len);
- memcpy (&buf[bufact], catalog->env_var, len);
- bufact += len;
- break;
- case 'l':
- /* Use language element of locale category value. */
- tmp = catalog->env_var;
- do
- {
- ENOUGH (1);
- buf[bufact++] = *tmp++;
- }
- while (*tmp != '\0' && *tmp != '_' && *tmp != '.');
- break;
- case 't':
- /* Use territory element of locale category value. */
- tmp = catalog->env_var;
- do
- ++tmp;
- while (*tmp != '\0' && *tmp != '_' && *tmp != '.');
- if (*tmp == '_')
- {
+
+ if (*run_nlspath == ':')
+ {
+ /* Leading colon or adjacent colons - treat same as %N. */
+ len = strlen (catalog->cat_name);
+ ENOUGH (len);
+ memcpy (&buf[bufact], catalog->cat_name, len);
+ bufact += len;
+ }
+ else
+ while (*run_nlspath != ':' && *run_nlspath != '\0')
+ if (*run_nlspath == '%')
+ {
+ const char *tmp;
+
+ ++run_nlspath; /* We have seen the `%'. */
+ switch (*run_nlspath++)
+ {
+ case 'N':
+ /* Use the catalog name. */
+ len = strlen (catalog->cat_name);
+ ENOUGH (len);
+ memcpy (&buf[bufact], catalog->cat_name, len);
+ bufact += len;
+ break;
+ case 'L':
+ /* Use the current locale category value. */
+ len = strlen (catalog->env_var);
+ ENOUGH (len);
+ memcpy (&buf[bufact], catalog->env_var, len);
+ bufact += len;
+ break;
+ case 'l':
+ /* Use language element of locale category value. */
+ tmp = catalog->env_var;
+ do
+ {
+ ENOUGH (1);
+ buf[bufact++] = *tmp++;
+ }
+ while (*tmp != '\0' && *tmp != '_' && *tmp != '.');
+ break;
+ case 't':
+ /* Use territory element of locale category value. */
+ tmp = catalog->env_var;
+ do
++tmp;
- do
- {
- ENOUGH (1);
- buf[bufact++] = *tmp;
- }
- while (*tmp != '\0' && *tmp != '.');
- }
- break;
- case 'c':
- /* Use code set element of locale category value. */
- tmp = catalog->env_var;
- do
- ++tmp;
- while (*tmp != '\0' && *tmp != '.');
- if (*tmp == '.')
- {
+ while (*tmp != '\0' && *tmp != '_' && *tmp != '.');
+ if (*tmp == '_')
+ {
+ ++tmp;
+ do
+ {
+ ENOUGH (1);
+ buf[bufact++] = *tmp++;
+ }
+ while (*tmp != '\0' && *tmp != '.');
+ }
+ break;
+ case 'c':
+ /* Use code set element of locale category value. */
+ tmp = catalog->env_var;
+ do
++tmp;
- do
- {
- ENOUGH (1);
- buf[bufact++] = *tmp;
- }
- while (*tmp != '\0');
- }
- break;
- case '%':
- ENOUGH (1);
- buf[bufact++] = '%';
- break;
- default:
- /* Unknown variable: ignore this path element. */
- bufact = 0;
- while (*run_nlspath != '\0' && *run_nlspath != ':')
- ++run_nlspath;
- break;
- }
- }
- else
- {
- ENOUGH (1);
- buf[bufact++] = *run_nlspath++;
- }
+ while (*tmp != '\0' && *tmp != '.');
+ if (*tmp == '.')
+ {
+ ++tmp;
+ do
+ {
+ ENOUGH (1);
+ buf[bufact++] = *tmp++;
+ }
+ while (*tmp != '\0');
+ }
+ break;
+ case '%':
+ ENOUGH (1);
+ buf[bufact++] = '%';
+ break;
+ default:
+ /* Unknown variable: ignore this path element. */
+ bufact = 0;
+ while (*run_nlspath != '\0' && *run_nlspath != ':')
+ ++run_nlspath;
+ break;
+ }
+ }
+ else
+ {
+ ENOUGH (1);
+ buf[bufact++] = *run_nlspath++;
+ }
+
ENOUGH (1);
buf[bufact] = '\0';
diff --git a/linuxthreads/ChangeLog b/linuxthreads/ChangeLog
index e8b0ae1..0067861 100644
--- a/linuxthreads/ChangeLog
+++ b/linuxthreads/ChangeLog
@@ -1,3 +1,11 @@
+2000-01-29 Ulrich Drepper <drepper@redhat.com>
+
+ * condvar.c (pthread_cond_timedwait_relative_old): Get remaining time
+ from nanosleep call so that in case we restart we only wait for the
+ remaining time.
+ (pthread_cond_timedwait_relative_new): Likewise.
+ Patch by khendricks@ivey.uwo.ca (PR libc/1561).
+
2000-01-18 Ulrich Drepper <drepper@cygnus.com>
* manager.c (pthread_allocate_stack): Compute guard page address
diff --git a/linuxthreads/condvar.c b/linuxthreads/condvar.c
index 87a93a9..aab3ff2 100644
--- a/linuxthreads/condvar.c
+++ b/linuxthreads/condvar.c
@@ -26,13 +26,13 @@
#include "restart.h"
static int pthread_cond_timedwait_relative_old(pthread_cond_t *,
- pthread_mutex_t *, const struct timespec *);
+ pthread_mutex_t *, struct timespec *);
static int pthread_cond_timedwait_relative_new(pthread_cond_t *,
- pthread_mutex_t *, const struct timespec *);
+ pthread_mutex_t *, struct timespec *);
static int (*pthread_cond_tw_rel)(pthread_cond_t *, pthread_mutex_t *,
- const struct timespec *) = pthread_cond_timedwait_relative_old;
+ struct timespec *) = pthread_cond_timedwait_relative_old;
/* initialize this module */
void __pthread_init_condvar(int rt_sig_available)
@@ -130,7 +130,7 @@ int pthread_cond_wait(pthread_cond_t *cond, pthread_mutex_t *mutex)
static int
pthread_cond_timedwait_relative_old(pthread_cond_t *cond,
pthread_mutex_t *mutex,
- const struct timespec * reltime)
+ struct timespec * reltime)
{
volatile pthread_descr self = thread_self();
sigset_t unblock, initial_mask;
@@ -179,7 +179,7 @@ requeue_and_wait_again:
sigaddset(&unblock, __pthread_sig_restart);
sigprocmask(SIG_UNBLOCK, &unblock, &initial_mask);
/* Sleep for the required duration */
- retsleep = __libc_nanosleep(reltime, NULL);
+ retsleep = __libc_nanosleep(reltime, reltime);
/* Block the restart signal again */
sigprocmask(SIG_SETMASK, &initial_mask, NULL);
was_signalled = 0;
@@ -219,8 +219,8 @@ requeue_and_wait_again:
if (retsleep == 0)
return ETIMEDOUT;
- /* Woken by a signal: resume waiting as
- required by Single Unix Specification. */
+ /* Woken by a signal: resume waiting as required by Single Unix
+ Specification. */
goto requeue_and_wait_again;
}
@@ -250,7 +250,7 @@ requeue_and_wait_again:
static int
pthread_cond_timedwait_relative_new(pthread_cond_t *cond,
pthread_mutex_t *mutex,
- const struct timespec * reltime)
+ struct timespec * reltime)
{
volatile pthread_descr self = thread_self();
sigset_t unblock, initial_mask;
@@ -298,7 +298,7 @@ pthread_cond_timedwait_relative_new(pthread_cond_t *cond,
sigaddset(&unblock, __pthread_sig_restart);
sigprocmask(SIG_UNBLOCK, &unblock, &initial_mask);
/* Sleep for the required duration */
- retsleep = __libc_nanosleep(reltime, NULL);
+ retsleep = __libc_nanosleep(reltime, reltime);
/* Block the restart signal again */
sigprocmask(SIG_SETMASK, &initial_mask, NULL);
was_signalled = 0;
@@ -335,8 +335,8 @@ pthread_cond_timedwait_relative_new(pthread_cond_t *cond,
if (retsleep == 0)
return ETIMEDOUT;
- /* Woken by a signal: resume waiting as
- required by Single Unix Specification. */
+ /* Woken by a signal: resume waiting as required by Single Unix
+ Specification. */
goto requeue_and_wait_again;
}
diff --git a/locale/loadlocale.c b/locale/loadlocale.c
index 0bb517c..c2d5b89 100644
--- a/locale/loadlocale.c
+++ b/locale/loadlocale.c
@@ -1,5 +1,5 @@
/* Functions to read locale data files.
- Copyright (C) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
+ Copyright (C) 1996, 1997, 1998, 1999, 2000 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
@@ -23,7 +23,9 @@
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
-#include <sys/mman.h>
+#ifdef _POSIX_MAPPED_FILES
+# include <sys/mman.h>
+#endif
#include <sys/stat.h>
#include "localeinfo.h"
@@ -87,13 +89,17 @@ _nl_load_locale (struct loaded_l10nfile *file, int category)
/* LOCALE/LC_foo is a directory; open LOCALE/LC_foo/SYS_LC_foo
instead. */
char *newp;
+ size_t filenamelen;
__close (fd);
- newp = (char *) alloca (strlen (file->filename)
+ filenamelen = strlen (file->filename);
+ newp = (char *) alloca (filenamelen
+ 5 + _nl_category_name_sizes[category] + 1);
- __stpcpy (__stpcpy (__stpcpy (newp, file->filename), "/SYS_"),
- _nl_category_names[category]);
+ __mempcpy (__mempcpy (__mempcpy (newp, file->filename, filenamelen),
+ "/SYS_", 5),
+ _nl_category_names[category],
+ _nl_category_name_sizes[category] + 1);
fd = __open (newp, O_RDONLY);
if (fd < 0)
@@ -105,24 +111,32 @@ _nl_load_locale (struct loaded_l10nfile *file, int category)
/* Map in the file's data. */
save_err = errno;
-#ifndef MAP_COPY
+#ifdef _POSIX_MAPPED_FILES
+# ifndef MAP_COPY
/* Linux seems to lack read-only copy-on-write. */
-#define MAP_COPY MAP_PRIVATE
-#endif
-#ifndef MAP_FILE
+# define MAP_COPY MAP_PRIVATE
+# endif
+# ifndef MAP_FILE
/* Some systems do not have this flag; it is superfluous. */
-#define MAP_FILE 0
-#endif
-#ifndef MAP_INHERIT
+# define MAP_FILE 0
+# endif
+# ifndef MAP_INHERIT
/* Some systems might lack this; they lose. */
-#define MAP_INHERIT 0
-#endif
+# define MAP_INHERIT 0
+# endif
filedata = (void *) __mmap ((caddr_t) 0, st.st_size, PROT_READ,
MAP_FILE|MAP_COPY|MAP_INHERIT, fd, 0);
- if ((void *) filedata == MAP_FAILED)
+ if ((void *) filedata != MAP_FAILED)
+ {
+ if (st.st_size < sizeof (*filedata))
+ /* This cannot be a locale data file since it's too small. */
+ goto puntfd;
+ }
+ else
{
if (errno == ENOSYS)
{
+#endif /* _POSIX_MAPPED_FILES */
/* No mmap; allocate a buffer and read from the file. */
mmaped = 0;
filedata = malloc (st.st_size);
@@ -148,19 +162,20 @@ _nl_load_locale (struct loaded_l10nfile *file, int category)
else
goto puntfd;
__set_errno (save_err);
+#ifdef _POSIX_MAPPED_FILES
}
else
goto puntfd;
}
- else if (st.st_size < sizeof (*filedata))
- /* This cannot be a locale data file since it's too small. */
- goto puntfd;
+#endif /* _POSIX_MAPPED_FILES */
if (filedata->magic != LIMAGIC (category))
/* Bad data file in either byte order. */
{
puntmap:
+#ifdef _POSIX_MAPPED_FILES
__munmap ((caddr_t) filedata, st.st_size);
+#endif
puntfd:
__close (fd);
return;
@@ -208,9 +223,11 @@ _nl_load_locale (struct loaded_l10nfile *file, int category)
void
_nl_unload_locale (struct locale_data *locale)
{
+#ifdef _POSIX_MAPPED_FILES
if (locale->mmaped)
__munmap ((caddr_t) locale->filedata, locale->filesize);
else
+#endif
free ((void *) locale->filedata);
free (locale);
diff --git a/localedata/ChangeLog b/localedata/ChangeLog
index 4001a4d..4d398bc 100644
--- a/localedata/ChangeLog
+++ b/localedata/ChangeLog
@@ -1,3 +1,7 @@
+2000-01-27 Jakub Jelinek <jakub@redhat.com>
+
+ * locales/af_ZA: Fix syntax errors.
+
2000-01-24 Ulrich Drepper <drepper@cygnus.com>
* tst-locale.sh: Also enable test5.
diff --git a/localedata/locales/af_ZA b/localedata/locales/af_ZA
index ed20e1e..3b786ca 100644
--- a/localedata/locales/af_ZA
+++ b/localedata/locales/af_ZA
@@ -1938,14 +1938,14 @@ UNDEFINED IGNORE;IGNORE;IGNORE
<8a> <8>;<8a>;IGNORE;IGNORE
<9a> <9>;<9a>;IGNORE;IGNORE
-<lM-> <l+><aM>;<l+><aM>;<lM-><lM->;IGNORE
-<lM.> <l+><aM>;<l+><aM.>;<lM.><lM.>;IGNORE
-<lH-> <l+><aH>;<l+><aH>;<lH-><lH->;IGNORE
-<lH.> <l+><aH>;<l+><aH.>;<lH.><lH.>;IGNORE
-<lh-> <l+><ah>;<l+><ah>;<lh-><lh->;IGNORE
-<lh.> <l+><ah>;<l+><ah.>;<lh.><lh.>;IGNORE
-<la-> <l+><a+>;<l+><a+->;<la-><la->;IGNORE
-<la.> <l+><a+>;<l+><a+.>;<la.><la.>;IGNORE
+<lM-> "<l+><aM>";"<l+><aM>";"<lM-><lM->";IGNORE
+<lM.> "<l+><aM>";"<l+><aM.>";"<lM.><lM.>";IGNORE
+<lH-> "<l+><aH>";"<l+><aH>";"<lH-><lH->";IGNORE
+<lH.> "<l+><aH>";"<l+><aH.>";"<lH.><lH.>";IGNORE
+<lh-> "<l+><ah>";"<l+><ah>";"<lh-><lh->";IGNORE
+<lh.> "<l+><ah>";"<l+><ah.>";"<lh.><lh.>";IGNORE
+<la-> "<l+><a+>";"<l+><a+->";"<la-><la->";IGNORE
+<la.> "<l+><a+>";"<l+><a+.>";"<la.><la.>";IGNORE
% katakana/hiragana sorting
% base is katakana, as this is present in most charsets
diff --git a/rt/aio_misc.c b/rt/aio_misc.c
index 97ef69f..a9fe359 100644
--- a/rt/aio_misc.c
+++ b/rt/aio_misc.c
@@ -98,7 +98,7 @@ get_elem (void)
struct requestlist *new_row;
size_t new_size;
- assert(sizeof(struct aiocb) == sizeof(struct aiocb64));
+ assert (sizeof (struct aiocb) == sizeof (struct aiocb64));
/* Compute new size. */
new_size = pool_size ? pool_size + ENTRIES_PER_ROW : optim.aio_num;
@@ -139,7 +139,7 @@ get_elem (void)
if (new_row == NULL)
return NULL;
- pool[new_size / ENTRIES_PER_ROW] = new_row;
+ pool[new_size / ENTRIES_PER_ROW - 1] = new_row;
}
/* Put all the new entries in the freelist. */
diff --git a/sysdeps/powerpc/fpu/libm-ulps b/sysdeps/powerpc/fpu/libm-test-ulps
index c39808f..c39808f 100644
--- a/sysdeps/powerpc/fpu/libm-ulps
+++ b/sysdeps/powerpc/fpu/libm-test-ulps
diff --git a/sysdeps/unix/sysv/linux/arm/Makefile b/sysdeps/unix/sysv/linux/arm/Makefile
index 6040b20..939c74c 100644
--- a/sysdeps/unix/sysv/linux/arm/Makefile
+++ b/sysdeps/unix/sysv/linux/arm/Makefile
@@ -8,7 +8,3 @@ sysdep_routines += rt_sigsuspend rt_sigprocmask rt_sigtimedwait \
rt_sigqueueinfo rt_sigaction rt_sigpending \
sigrestorer
endif
-
-ifeq ($(subdir),resource)
-sysdep_routines += oldgetrlimit64
-endif
diff --git a/sysdeps/unix/sysv/linux/arm/Versions b/sysdeps/unix/sysv/linux/arm/Versions
index 531817f..7e71a86 100644
--- a/sysdeps/unix/sysv/linux/arm/Versions
+++ b/sysdeps/unix/sysv/linux/arm/Versions
@@ -4,7 +4,7 @@ libc {
inb; inw; inl;
outb; outw; outl;
}
- GLIBC_2.1.3 {
+ GLIBC_2.2 {
# New rlimit interface
getrlimit; setrlimit; getrlimit64;
}
diff --git a/sysdeps/unix/sysv/linux/arm/syscalls.list b/sysdeps/unix/sysv/linux/arm/syscalls.list
index 53da8bb..60303d3 100644
--- a/sysdeps/unix/sysv/linux/arm/syscalls.list
+++ b/sysdeps/unix/sysv/linux/arm/syscalls.list
@@ -12,5 +12,3 @@ s_setresuid setresuid setresuid 3 __syscall_setresuid
s_setreuid setreuid setreuid 2 __syscall_setreuid
s_setuid setuid setuid 1 __syscall_setuid
syscall - syscall 7 syscall
-oldgetrlimit EXTRA getrlimit 2 __old_getrlimit getrlimit@GLIBC_2.0
-oldsetrlimit EXTRA setrlimit 2 __old_setrlimit setrlimit@GLIBC_2.0
diff --git a/sysdeps/unix/sysv/linux/i386/Versions b/sysdeps/unix/sysv/linux/i386/Versions
index 68b0ee4..9860ff8 100644
--- a/sysdeps/unix/sysv/linux/i386/Versions
+++ b/sysdeps/unix/sysv/linux/i386/Versions
@@ -7,7 +7,7 @@ libc {
GLIBC_2.1 {
__modify_ldt; modify_ldt;
}
- GLIBC_2.1.3 {
+ GLIBC_2.2 {
# New rlimit interface
getrlimit; setrlimit; getrlimit64;
}
diff --git a/sysdeps/unix/sysv/linux/i386/getrlimit.c b/sysdeps/unix/sysv/linux/i386/getrlimit.c
index 14a879c..4fae122 100644
--- a/sysdeps/unix/sysv/linux/i386/getrlimit.c
+++ b/sysdeps/unix/sysv/linux/i386/getrlimit.c
@@ -78,7 +78,7 @@ __new_getrlimit (enum __rlimit_resource resource, struct rlimit *rlimits)
weak_alias (__new_getrlimit, __getrlimit);
#if defined PIC && DO_VERSIONING
-default_symbol_version (__new_getrlimit, getrlimit, GLIBC_2.1.3);
+default_symbol_version (__new_getrlimit, getrlimit, GLIBC_2.2);
#else
weak_alias (__new_getrlimit, getrlimit);
#endif
diff --git a/sysdeps/unix/sysv/linux/i386/getrlimit64.c b/sysdeps/unix/sysv/linux/i386/getrlimit64.c
index 602dd28..8e7c9c6 100644
--- a/sysdeps/unix/sysv/linux/i386/getrlimit64.c
+++ b/sysdeps/unix/sysv/linux/i386/getrlimit64.c
@@ -22,7 +22,7 @@
#undef getrlimit64
#if defined PIC && defined DO_VERSIONING
-default_symbol_version (__new_getrlimit64, getrlimit64, GLIBC_2.1.3);
+default_symbol_version (__new_getrlimit64, getrlimit64, GLIBC_2.2);
#else
weak_alias (__new_getrlimit64, getrlimit64);
#endif
diff --git a/sysdeps/unix/sysv/linux/i386/setrlimit.c b/sysdeps/unix/sysv/linux/i386/setrlimit.c
index e8adeed..f9fd23e 100644
--- a/sysdeps/unix/sysv/linux/i386/setrlimit.c
+++ b/sysdeps/unix/sysv/linux/i386/setrlimit.c
@@ -76,7 +76,7 @@ __new_setrlimit (enum __rlimit_resource resource, const struct rlimit *rlimits)
weak_alias (__new_setrlimit, __setrlimit);
#if defined PIC && DO_VERSIONING
-default_symbol_version (__new_setrlimit, setrlimit, GLIBC_2.1.3);
+default_symbol_version (__new_setrlimit, setrlimit, GLIBC_2.2);
#else
weak_alias (__new_setrlimit, setrlimit);
#endif
diff --git a/sysdeps/unix/sysv/linux/i386/sys/io.h b/sysdeps/unix/sysv/linux/i386/sys/io.h
index 8310525..27cd5ff 100644
--- a/sysdeps/unix/sysv/linux/i386/sys/io.h
+++ b/sysdeps/unix/sysv/linux/i386/sys/io.h
@@ -38,9 +38,15 @@ extern int ioperm (unsigned long int __from, unsigned long int __num,
privileges. */
extern int iopl (int __level) __THROW;
+#if defined __GNUC__ && __GNUC__ >= 2
-extern inline unsigned char
-inb (unsigned short port)
+# ifndef _EXTERN_INLINE
+# define _EXTERN_INLINE extern __inline
+# endif
+
+
+_EXTERN_INLINE unsigned char
+inb (unsigned short int port)
{
unsigned char _v;
@@ -48,8 +54,8 @@ inb (unsigned short port)
return _v;
}
-extern inline unsigned char
-inb_p (unsigned short port)
+_EXTERN_INLINE unsigned char
+inb_p (unsigned short int port)
{
unsigned char _v;
@@ -57,8 +63,8 @@ inb_p (unsigned short port)
return _v;
}
-extern inline unsigned short
-inw (unsigned short port)
+_EXTERN_INLINE unsigned short int
+inw (unsigned short int port)
{
unsigned short _v;
@@ -66,17 +72,17 @@ inw (unsigned short port)
return _v;
}
-extern inline unsigned short
-inw_p (unsigned short port)
+_EXTERN_INLINE unsigned short int
+inw_p (unsigned short int port)
{
- unsigned short _v;
+ unsigned short int _v;
__asm__ __volatile__ ("inw %w1,%0\noutb %%al,$0x80":"=a" (_v):"Nd" (port));
return _v;
}
-extern inline unsigned int
-inl (unsigned short port)
+_EXTERN_INLINE unsigned int
+inl (unsigned short int port)
{
unsigned int _v;
@@ -84,95 +90,97 @@ inl (unsigned short port)
return _v;
}
-extern inline unsigned int
-inl_p (unsigned short port)
+_EXTERN_INLINE unsigned int
+inl_p (unsigned short int port)
{
unsigned int _v;
__asm__ __volatile__ ("inl %w1,%0\noutb %%al,$0x80":"=a" (_v):"Nd" (port));
return _v;
}
-extern inline void
-outb (unsigned char value, unsigned short port)
+_EXTERN_INLINE void
+outb (unsigned char value, unsigned short int port)
{
- __asm__ __volatile__ ("outb %b0,%w1"::"a" (value), "Nd" (port));
+ __asm__ __volatile__ ("outb %b0,%w1": :"a" (value), "Nd" (port));
}
-extern inline void
-outb_p (unsigned char value, unsigned short port)
+_EXTERN_INLINE void
+outb_p (unsigned char value, unsigned short int port)
{
- __asm__ __volatile__ ("outb %b0,%w1\noutb %%al,$0x80"::"a" (value),
+ __asm__ __volatile__ ("outb %b0,%w1\noutb %%al,$0x80": :"a" (value),
"Nd" (port));
}
-extern inline void
-outw (unsigned short value, unsigned short port)
+_EXTERN_INLINE void
+outw (unsigned short value, unsigned short int port)
{
- __asm__ __volatile__ ("outw %w0,%w1"::"a" (value), "Nd" (port));
+ __asm__ __volatile__ ("outw %w0,%w1": :"a" (value), "Nd" (port));
}
-extern inline void
-outw_p (unsigned short value, unsigned short port)
+_EXTERN_INLINE void
+outw_p (unsigned short int value, unsigned short int port)
{
- __asm__ __volatile__ ("outw %w0,%w1\noutb %%al,$0x80"::"a" (value),
+ __asm__ __volatile__ ("outw %w0,%w1\noutb %%al,$0x80": :"a" (value),
"Nd" (port));
}
-extern inline void
-outl (unsigned int value, unsigned short port)
+_EXTERN_INLINE void
+outl (unsigned int value, unsigned short int port)
{
- __asm__ __volatile__ ("outl %0,%w1"::"a" (value), "Nd" (port));
+ __asm__ __volatile__ ("outl %0,%w1": :"a" (value), "Nd" (port));
}
-extern inline void
-outl_p (unsigned int value, unsigned short port)
+_EXTERN_INLINE void
+outl_p (unsigned int value, unsigned short int port)
{
- __asm__ __volatile__ ("outl %0,%w1\noutb %%al,$0x80"::"a" (value),
+ __asm__ __volatile__ ("outl %0,%w1\noutb %%al,$0x80": :"a" (value),
"Nd" (port));
}
-extern inline void
-insb (unsigned short port, void *addr, unsigned long count)
+_EXTERN_INLINE void
+insb (unsigned short int port, void *addr, unsigned long int count)
{
__asm__ __volatile__ ("cld ; rep ; insb":"=D" (addr),
"=c" (count):"d" (port), "0" (addr), "1" (count));
}
-extern inline void
-insw (unsigned short port, void *addr, unsigned long count)
+_EXTERN_INLINE void
+insw (unsigned short int port, void *addr, unsigned long int count)
{
__asm__ __volatile__ ("cld ; rep ; insw":"=D" (addr),
"=c" (count):"d" (port), "0" (addr), "1" (count));
}
-extern inline void
-insl (unsigned short port, void *addr, unsigned long count)
+_EXTERN_INLINE void
+insl (unsigned short int port, void *addr, unsigned long int count)
{
__asm__ __volatile__ ("cld ; rep ; insl":"=D" (addr),
"=c" (count):"d" (port), "0" (addr), "1" (count));
}
-extern inline void
-outsb (unsigned short port, const void *addr, unsigned long count)
+_EXTERN_INLINE void
+outsb (unsigned short int port, const void *addr, unsigned long int count)
{
__asm__ __volatile__ ("cld ; rep ; outsb":"=S" (addr),
"=c" (count):"d" (port), "0" (addr), "1" (count));
}
-extern inline void
-outsw (unsigned short port, const void *addr, unsigned long count)
+_EXTERN_INLINE void
+outsw (unsigned short int port, const void *addr, unsigned long int count)
{
__asm__ __volatile__ ("cld ; rep ; outsw":"=S" (addr),
"=c" (count):"d" (port), "0" (addr), "1" (count));
}
-extern inline void
-outsl (unsigned short port, const void *addr, unsigned long count)
+_EXTERN_INLINE void
+outsl (unsigned short int port, const void *addr, unsigned long int count)
{
__asm__ __volatile__ ("cld ; rep ; outsl":"=S" (addr),
"=c" (count):"d" (port), "0" (addr), "1" (count));
}
+#endif /* GNU C */
+
__END_DECLS
#endif /* _SYS_IO_H */