diff options
36 files changed, 906 insertions, 563 deletions
@@ -1,3 +1,58 @@ +1997-08-29 02:36 Ulrich Drepper <drepper@cygnus.com> + + * Makefile (version-info.h): Use ISO form for the date. + + * catgets/catgetsinfo.h: Include <bits/libc-lock.h>. + (struct catalog_obj): Add lock field. + (__open_catalog): Remove second parameter from prototype. + * catgets/catgets.c (catopen): Initialize lock field. + (catgets): Don't pass second parameter to __open_catalog. + * catgets/gencat.c: Initialize lock field and don't pass second + parameter to __open_catalog. + * catgets/open_catalog.c (__open_catalog): Decide about use of + path by examining path in struct, not based on extra argument. + Acquire a the lock before trying to load the catalog and release + it before returning. + + * csu/Makefile (abi-tag.h): Make sure target directory exists. + + * io/Makefile (headers): Add bits/poll.h. + * io/sys/poll.h: Remove definitions of POLL* constants. + Include <bits/poll.h>. + * sysdeps/generic/bits/poll.h: New file. + * sysdeps/unix/sysv/linux/bits/poll.h: New file. + * sysdeps/unix/sysv/linux/m68k/bits/poll.h: New file. + * sysdeps/unix/sysv/linux/mips/bits/poll.h: New file. + * sysdeps/unix/sysv/linux/sparc/bits/poll.h: New file. + + * libio/fileops.c (_IO_file_read, _IO_file_write): Remove dead code. + + * malloc/obstack.c: Add casts to keep very verbose compilers on + 64bit machine quiet. + + * nss/Makefile (libnss_db.so): Find libdb.so in db2 directory. + +1997-08-28 17:30 Ulrich Drepper <drepper@cygnus.com> + + * catgets/catgets.c (catopen): Correctly determine length of string + in NLSPATH evironment variable. Patch by HJ Lu <hjl@gnu.ai.mit.edu>. + +1997-08-27 23:19 Richard Henderson <rth@cygnus.com> + + * sysdeps/generic/dl-sysdep.c (DL_FIND_ARG_COMPONENTS): Provide + default macro to track down arguments from stack start. + (_dl_sysdep_start): Use it. + * sysdeps/unix/sysv/linux/powerpc/dl-sysdep.c: Truncate to simply + providing a special DL_FIND_ARG_COMPONENTS and including the next + file up the line. + + * sysdeps/powerpc/e_sqrt.c: Move contents to w_sqrt.c and provide stub. + * sysdeps/powerpc/e_sqrtf.c: Likewise. + * sysdeps/powerpc/s_copysignf.S: Provide empty file; symbol is with + the double precision version. + * sysdeps/powerpc/s_fabsf.S: Likewise. + * sysdeps/powerpc/s_isnanf.S: Likewise. + 1997-08-10 19:17 Philip Blundell <Philip.Blundell@pobox.com> * nss/nss_db/db-XXX.c: Include <db_185.h> not <db.h>. Somebody @@ -146,7 +146,7 @@ all-Banner-files = $(wildcard $(addsuffix /Banner, $(subdirs))) $(objpfx)version-info.h: $(+sysdir_pfx)config.make $(all-Banner-files) (case $(config-os) in \ linux*) version=`(echo -e "#include <linux/version.h>\nUTS_RELEASE"\ - | $(CC) -E -P - | \ + | $(CC) -E -P - | \ sed -e 's/"\([^"]*\)".*/\1/p' -e d) 2>/dev/null`;\ if [ -z "$$version" ]; then \ if [ -r /proc/version ]; then \ @@ -157,7 +157,7 @@ $(objpfx)version-info.h: $(+sysdir_pfx)config.make $(all-Banner-files) fi; \ fi; \ echo -n "\"Compiled on a Linux $$version system "; \ - echo "on `date +%Y/%m/%d`.\\n\"" ;; \ + echo "on `date +%Y-%m-%d`.\\n\"" ;; \ *) ;; \ esac; \ files="$(all-Banner-files)"; \ diff --git a/bits/poll.h b/bits/poll.h new file mode 100644 index 0000000000..55ec70e363 --- /dev/null +++ b/bits/poll.h @@ -0,0 +1,38 @@ +/* Copyright (C) 1997 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + 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 + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with the GNU C Library; see the file COPYING.LIB. If not, + write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + + +/* Event types that can be polled for. These bits may be set in `events' + to indicate the interesting event types; they will appear in `revents' + to indicate the status of the file descriptor. */ +#define POLLIN 01 /* There is data to read. */ +#define POLLPRI 02 /* There is urgent data to read. */ +#define POLLOUT 04 /* Writing now will not block. */ + +/* Some aliases. */ +#define POLLWRNORM POLLOUT + +/* Event types always implicitly polled for. These bits need not be set in + `events', but they will appear in `revents' to indicate the status of + the file descriptor. */ +#define POLLERR 010 /* Error condition. */ +#define POLLHUP 020 /* Hung up. */ +#define POLLNVAL 040 /* Invalid polling request. */ + +/* Canonical number of polling requests to read in at a time in poll. */ +#define NPOLLFILE 30 diff --git a/catgets/catgets.c b/catgets/catgets.c index 4c6997e567..d5eefc9e08 100644 --- a/catgets/catgets.c +++ b/catgets/catgets.c @@ -87,7 +87,7 @@ catopen (const char *cat_name, int flag) if (nlspath != NULL && *nlspath != '\0') { /* Append the system dependent directory. */ - size_t len = strlen (nlspath + 1 + sizeof NLSPATH); + size_t len = strlen (nlspath) + 1 + sizeof NLSPATH; char *tmp = alloca (len); __stpcpy (__stpcpy (__stpcpy (tmp, nlspath), ":"), NLSPATH); @@ -111,6 +111,8 @@ catopen (const char *cat_name, int flag) result->nlspath = NULL; } + __libc_lock_init (result->lock); + return (nl_catd) result; } @@ -130,7 +132,7 @@ catgets (nl_catd catalog_desc, int set, int message, const char *string) catalog = (__nl_catd) catalog_desc; if (catalog->status == closed) - __open_catalog (catalog, 1); + __open_catalog (catalog); if (catalog->status == nonexisting) { diff --git a/catgets/catgetsinfo.h b/catgets/catgetsinfo.h index 292572decf..edb1099d8c 100644 --- a/catgets/catgetsinfo.h +++ b/catgets/catgetsinfo.h @@ -1,4 +1,4 @@ -/* Copyright (C) 1996 Free Software Foundation, Inc. +/* Copyright (C) 1996, 1997 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper, <drepper@gnu.ai.mit.edu>. @@ -18,6 +18,7 @@ Boston, MA 02111-1307, USA. */ #include <sys/types.h> +#include <bits/libc-lock.h> struct catalog_obj @@ -47,6 +48,8 @@ typedef struct catalog_info struct catalog_obj *file_ptr; size_t file_size; + + __libc_lock_define (,lock); } *__nl_catd; @@ -56,4 +59,4 @@ typedef struct catalog_info /* Prototypes for helper functions. */ -void __open_catalog (__nl_catd __catalog, int __with_path); +void __open_catalog (__nl_catd __catalog); diff --git a/catgets/gencat.c b/catgets/gencat.c index 9ce962c3c9..8d310d81f4 100644 --- a/catgets/gencat.c +++ b/catgets/gencat.c @@ -988,9 +988,11 @@ read_old (struct catalog *catalog, const char *file_name) old_cat_obj.status = closed; old_cat_obj.cat_name = file_name; + old_cat_obj.nlspath = NULL; + __libc_lock_init (old_cat_obj.lock); /* Try to open catalog, but don't look through the NLSPATH. */ - __open_catalog (&old_cat_obj, 0); + __open_catalog (&old_cat_obj); if (old_cat_obj.status != mmapped && old_cat_obj.status != malloced) if (errno == ENOENT) diff --git a/catgets/open_catalog.c b/catgets/open_catalog.c index 2c1cbb4a4c..62fb111e43 100644 --- a/catgets/open_catalog.c +++ b/catgets/open_catalog.c @@ -33,14 +33,22 @@ void -__open_catalog (__nl_catd catalog, int with_path) +__open_catalog (__nl_catd catalog) { int fd; struct stat st; int swapping; - if (strchr (catalog->cat_name, '/') != NULL || !with_path) - fd = open (catalog->cat_name, O_RDONLY); + /* Make sure we are alone. */ + __libc_lock_lock (catalog->lock); + + /* Check whether there was no other thread faster. */ + if (catalog->status != closed) + /* While we waited some other thread tried to open the catalog. */ + goto unlock_return; + + if (strchr (catalog->cat_name, '/') != NULL || catalog->nlspath == NULL) + fd = __open (catalog->cat_name, O_RDONLY); else { const char *run_nlspath = catalog->nlspath; @@ -164,7 +172,7 @@ __open_catalog (__nl_catd catalog, int with_path) if (fd < 0 || __fstat (fd, &st) < 0) { catalog->status = nonexisting; - return; + goto unlock_return; } #ifndef MAP_COPY @@ -195,7 +203,7 @@ __open_catalog (__nl_catd catalog, int with_path) if (catalog->file_ptr == NULL) { catalog->status = nonexisting; - return; + goto unlock_return; } todo = st.st_size; /* Save read, handle partial reads. */ @@ -207,7 +215,7 @@ __open_catalog (__nl_catd catalog, int with_path) { free ((void *) catalog->file_ptr); catalog->status = nonexisting; - return; + goto unlock_return; } todo -= now; } @@ -227,14 +235,14 @@ __open_catalog (__nl_catd catalog, int with_path) swapping = 1; else { - /* Illegal file. Free he resources and mark catalog as not + /* Illegal file. Free the resources and mark catalog as not usable. */ if (catalog->status == mmapped) __munmap ((void *) catalog->file_ptr, catalog->file_size); else free (catalog->file_ptr); catalog->status = nonexisting; - return; + goto unlock_return; } #define SWAP(x) (swapping ? SWAPU32 (x) : (x)) @@ -260,4 +268,8 @@ __open_catalog (__nl_catd catalog, int with_path) catalog->strings = (const char *) &catalog->file_ptr->name_ptr[catalog->plane_size * catalog->plane_depth * 3 * 2]; + + /* Release the lock again. */ + unlock_return: + __libc_lock_unlock (catalog->lock); } diff --git a/csu/Makefile b/csu/Makefile index baafac5718..cfc5340d36 100644 --- a/csu/Makefile +++ b/csu/Makefile @@ -126,6 +126,7 @@ $(addprefix $(objpfx),$(filter-out $(start-installed-name),$(csu-dummies))): / := $$/# bite me. $(objpfx)abi-tag.h: $(..)abi-tags + $(make-target-directory) rm -f $@.new sed 's/#.*$//;/^[ ]*$$/d' $< | while read conf tag; do \ test `expr '$(config-machine)-$(config-vendor)-$(config-os)' \ diff --git a/io/Makefile b/io/Makefile index 055dabeba6..3f37e37c8a 100644 --- a/io/Makefile +++ b/io/Makefile @@ -23,7 +23,7 @@ subdir := io headers := sys/stat.h bits/stat.h sys/statfs.h bits/statfs.h sys/vfs.h \ fcntl.h sys/fcntl.h bits/fcntl.h \ - poll.h sys/poll.h \ + poll.h sys/poll.h bits/poll.h \ utime.h ftw.h fts.h routines := \ diff --git a/io/sys/poll.h b/io/sys/poll.h index e694fe37d5..b9af2cfc0e 100644 --- a/io/sys/poll.h +++ b/io/sys/poll.h @@ -1,5 +1,5 @@ /* Compatibility definitions for System V `poll' interface. - Copyright (C) 1994, 1996 Free Software Foundation, Inc. + Copyright (C) 1994, 1996, 1997 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -22,6 +22,9 @@ #include <features.h> +/* Get the platform dependent bits of `poll'. */ +#include <bits/poll.h> + __BEGIN_DECLS /* Data structure describing a polling request. */ @@ -32,26 +35,6 @@ struct pollfd short int revents; /* Types of events that actually occurred. */ }; -/* Event types that can be polled for. These bits may be set in `events' - to indicate the interesting event types; they will appear in `revents' - to indicate the status of the file descriptor. */ -#define POLLIN 01 /* There is data to read. */ -#define POLLPRI 02 /* There is urgent data to read. */ -#define POLLOUT 04 /* Writing now will not block. */ - -/* Some aliases. */ -#define POLLWRNORM POLLOUT - -/* Event types always implicitly polled for. These bits need not be set in - `events', but they will appear in `revents' to indicate the status of - the file descriptor. */ -#define POLLERR 010 /* Error condition. */ -#define POLLHUP 020 /* Hung up. */ -#define POLLNVAL 040 /* Invalid polling request. */ - -/* Canonical number of polling requests to read in at a time in poll. */ -#define NPOLLFILE 30 - /* Poll the file descriptors described by the NFDS structures starting at FDS. If TIMEOUT is nonzero and not -1, allow TIMEOUT milliseconds for diff --git a/libio/fileops.c b/libio/fileops.c index b3a3a24651..10f7567b0a 100644 --- a/libio/fileops.c +++ b/libio/fileops.c @@ -575,19 +575,7 @@ _IO_file_read (fp, buf, size) void *buf; _IO_ssize_t size; { - for (;;) - { - _IO_ssize_t count = _IO_read (fp->_fileno, buf, size); -#if 0 && defined EINTR - /* We must not do this optimization since POSIX.1 explicitly - requests that the stream operations must return with the - error EINTR if this happens. There must be the possibility - that stream operations time out. --drepper */ - if (count == -1 && errno == EINTR) - continue; -#endif - return count; - } + return _IO_read (fp->_fileno, buf, size); } _IO_pos_t @@ -626,19 +614,8 @@ _IO_file_write (f, data, n) _IO_ssize_t count = _IO_write (f->_fileno, data, to_do); if (count == EOF) { -#if 0 && defined EINTR - /* We must not do this optimization since POSIX.1 explicitly - requests that the stream operations must return with the - error EINTR if this happens. There must be the - possibility that stream operations time out. --drepper */ - if (errno == EINTR) - continue; - else -#endif - { - f->_flags |= _IO_ERR_SEEN; - break; - } + f->_flags |= _IO_ERR_SEEN; + break; } to_do -= count; data = (void *) ((char *) data + count); diff --git a/localedata/CHECKSUMS b/localedata/CHECKSUMS index 7c71e4ea7f..0c01ab21b3 100644 --- a/localedata/CHECKSUMS +++ b/localedata/CHECKSUMS @@ -156,6 +156,7 @@ db3c60025eb80244d70bf7889f058055 charmaps/T.101-G2 572baa84bd05d4b236b7e2fb211d0dfd charmaps/T.61-7BIT 1e39e36aa7544014059b0aa8381ab051 charmaps/T.61-8BIT 81c8e12a75dff4371ce82773d670cd6d charmaps/VIDEOTEX-SUPPL +910e8174540ecba1ac61b5f27f6dc359 locales/cs_CZ 45ade09ead9fd385d58504bfc005ecab locales/da_DK 249894e0554d46d1fbdae4a5fb8cc20e locales/de_AT b3628f73e00bb655a5e96bcc2331893c locales/de_BE @@ -175,14 +176,13 @@ bda978c8b0e379d57a8599edfdb2e858 locales/fi_FI a25300033ea6c619a4e15051f14aa65e locales/fo_FO 02ca55b19338f94530f0b60999638ed4 locales/fr_BE 655c7b8713b9aad20014df2c27928cb7 locales/fr_CA -8e60885c3fda81bc7773f139657974f3 locales/fr_CA,2.13 -8a76a0e3ea2923367fdbab78a6bc67cb locales/fr_CA,2.13.orig +d5bec15a74c4107a77a46fe185883574 locales/fr_CA,2.13 19403a5cd69a9ad658b173859eb022ef locales/fr_CH 48d8981b117e72c5eb2e9c181cbd7d2b locales/fr_FR cc1b77cf4cdc4488a99637e730e0f57f locales/fr_LU 1987b72e766038b0f475165c994d1469 locales/ga_IE be2ef06fd9a4b4def515216972fe9250 locales/gr_GR |
