New module 'pipe'.
[gnulib.git] / lib / ChangeLog
index 795d1ab..3c38881 100644 (file)
+2004-02-03  Bruno Haible  <bruno@clisp.org>
+
+       * pipe.h: New file, from GNU gettext.
+       * pipe.c: New file, from GNU gettext.
+
+2004-01-27  Bruno Haible  <bruno@clisp.org>
+
+       * execute.h: New file, from GNU gettext.
+       * execute.c: New file, from GNU gettext.
+       * w32spawn.h: New file, from GNU gettext.
+
+2004-01-23  Paul Eggert  <eggert@twinsun.com>
+
+       Exit-status fix from coreutils.
+
+       Use exit_failure consistently in place of EXIT_FAILURE,
+       so that program exit statuses are consistent on failure.
+
+       * argmatch.c (ARGMATCH_DIE) [! defined ARGMATCH_DIE]:
+       Include "exitfail.h", and use exit_failure rather than EXIT_FAILURE.
+       * argmatch.h: Comment fix to match the above.
+       * obstack.c (obstack_exit_failure) [!defined _LIBC]:
+       Now a macro referring to exit_failure, instead of a separate
+       variable.  Include "exitfail.h" to get it.
+       * xstrtol.h: Include "exitfail.h".
+       (STRTOL_FATAL_ERROR): Exit with status exit_failure, not 2.
+
+       * long-options.c (parse_long_options): Use prototype
+       for usage function arg.  Pass it EXIT_SUCCESS rather than 0,
+       for clarity.
+
+2004-01-21  Jim Meyering  <jim@meyering.net>
+
+       * mktime.c (__mktime_internal) [!_LIBC]: Define to mktime_internal
+       so as not to conflict with a different-sized __mktime_internal
+       function in GNU libc.
+       * timegm.c (__mktime_internal) [!_LIBC]: Likewise.
+       Problem building statically-linked `ls' reported by Michael Brunnbauer.
+
+2004-01-18  Paul Eggert  <eggert@twinsun.com>
+
+       Merge from diffutils.
+
+       * file-type.c (file_type): Add typed memory objects.
+       * file-type.h (S_TYPEISTMO): New macro.
+
+       * c-stack.h (c_stack_action): Remove argv argument.
+       * c-stack.c (c_stack_action): Likewise.  All uses changed.
+       (die): Don't calculate message unless segv_action returns.
+       (get_stack_location, min_address_from_argv, max_address_from_argv,
+       volatile stack_base, volatile_stack_size): Remove.
+       (segv_handler): If ! HAVE_XSI_STACK_OVERFLOW_HEURISTIC, assume
+       that every segmentation violation is a stack overflow.  (Ouch!)
+       See Debian bug 136249 (still outstanding) for more info about why
+       HAVE_XSI_STACK_OVERFLOW_HEURISTIC fails on Linux kernels.
+
+2003-11-30  Bruno Haible  <bruno@clisp.org>
+
+       Safer stack allocation.
+       * setenv.c: Include allocsa.h.
+       (alloca): Remove fallback definition.
+       (freea): Remove macro.
+       (__add_to_environ) [!_LIBC]: Use allocsa instead of alloca. Use freesa
+       instead of freea.
+
+2003-10-17  Bruno Haible  <bruno@clisp.org>
+
+       * binary-io.h: Avoid warnings on Cygwin.
+
+2003-12-28  Bruno Haible  <bruno@clisp.org>
+
+       * wait-process.c (wait_subprocess): Add ignore_sigpipe argument.
+       * wait-process.c (wait_subprocess): Likewise. Handle SIGPIPE specially.
+
+2003-11-28  Bruno Haible  <bruno@clisp.org>
+
+       * wait-process.c (cleanup_slaves): Use ANSI C declaration.
+
+2003-11-27  Bruno Haible  <bruno@clisp.org>
+
+       * wait-process.c: On Windows, include windows.h. Needed on mingw.
+
+2003-11-17  Bruno Haible  <bruno@clisp.org>
+
+       * wait-process.c (wait_process): Disable the 2003-10-31 waitid() patch.
+
+2003-11-24  Bruno Haible  <bruno@clisp.org>
+
+       * xallocsa.h: New file, from GNU gettext.
+       * xallocsa.c: New file, from GNU gettext.
+
+2003-11-24  Bruno Haible  <bruno@clisp.org>
+
+       * allocsa.h: New file, from GNU gettext.
+       * allocsa.c: New file, from GNU gettext.
+
+2003-11-24  Bruno Haible  <bruno@clisp.org>
+
+       * eealloc.h: New file.
+
+2004-01-15  Jim Meyering  <jim@meyering.net>
+
+       Merge from coreutils.
+
+       * md5.h (rol) [__GNUC__ && __i386__]: Don't use `asm' code.  These
+       days, gcc-3.x does better all by itself.  Patch from Dean Gaudet:
+       http://mail.gnu.org/archive/html/bug-coreutils/2003-11/msg00144.html
+
+       * posixver.c (DEFAULT_POSIX2_VERSION): Use definition of new,
+       optional configure-time default.
+
+       * version-etc.c (version_etc_copyright): Update copyright date.
+
+       * xreadlink.c (xreadlink): Correct outdated comment.
+
+2004-01-15  Paul Eggert  <eggert@twinsun.com>
+
+       Merge from coreutils.
+
+       * posixver.c: Include posixver.h.
+
+       * same.c: Include <stdbool.h>, <limits.h>.
+       (_POSIX_NAME_MAX): Define if not defined.
+       (MIN): New macro.
+       (same_name): If file names are silently truncated, report
+       that the file names are the same if they are the same after
+       the silent truncation.
+
+       * xstrtod.h (xstrtod): Accept an extra arg, specifying the
+       conversion function.
+       * xstrtod.c (xstrtod): Likewise.  All callers changed to
+       include c-strtod.h and use c_strtod.  Don't include stdlib.h; no
+       longer needed.
+
+2004-01-14  Paul Eggert  <eggert@twinsun.com>
+
+       * fnmatch_loop.c (ALLOCA_LIMIT): Remove macro, which collided
+       with like-named macro in fnmatch.c.
+       (EXT): Use an internal constant instead.
+
+       Merge fnmatch patches from glibc.
+       * fnmatch.c (mbsinit): Remove define.
+       Add libc_hidden_ver (__fnmatch, fnmatch).
+       * fnmatch_loop.c (FCT): Cast to int32_t and UCHAR when appropriate.
+       Adjust to renaming of collseq_table_lookup to __collseq_table_lookup.
+
+2003-12-14  Karl Berry  <karl@gnu.org>
+
+       * config.charset: update from gettext-runtime.
+
+2003-12-03  Paul Eggert  <eggert@twinsun.com>
+
+       * getgroups.c (getgroups): xmalloc takes one argument, not two.
+       Bug reported by Alfred M. Szmidt.
+
+2003-11-29  Karl Berry  <karl@gnu.org>
+
+       * argp-{help.c,parse.c,namefrob.h}, argp.h: update from libc.
+
+2003-11-23  Paul Eggert  <eggert@twinsun.com>
+            Bruno Haible  <bruno@clisp.org>
+
+       * printf-parse.h: Don't include sys/types.h.
+       (ARG_NONE): New macro.
+       (char_directive): Change type of *arg_index fields to size_t.
+       * printf-parse.c: Don't include sys/types.h.
+       (SSIZE_MAX): Remove macro.
+       (PRINTF_PARSE): Change the type of the arg_index variables to size_t.
+       Remove unnecessary overflow check.
+       * vasnprintf.c (VASNPRINTF): Update for type change of *arg_index
+       fields.
+
+2003-11-24  Paul Eggert  <eggert@twinsun.com>
+
+       * alloca.c: Remove dependency on xalloc module.
+       (xalloc_die): Remove.
+       (memory_full) [!defined emacs]: New macro.
+       [!defined emacs]: Don't include xalloc.h.
+       (alloca): Invoke memory_full, not xalloc_die, if malloc fails or
+       address arithmetic overflows.  Change datatypes a bit to avoid
+       unnecessary casts.
+
+2003-11-22  Jim Meyering  <jim@meyering.net>
+
+       * xmalloc.c (x2nrealloc_inline): Fix typos in comments: s/size/size_t/.
+
+2003-11-17  Bruno Haible  <bruno@clisp.org>
+
+       * vasnprintf.c (alloca): Remove fallback definition.
+       (freea): Remove definition.
+       (VASNPRINTF): Use alloca only for small sizes, say <= 4000 bytes.
+       Reported by Paul Eggert.
+
+2003-11-17  Jim Meyering  <jim@meyering.net>
+
+       On systems without utime and without a utimes function capable of
+       dealing with a NULL struct utimbuf* argument, this utime replacement
+       could -- in unusual circumstances -- leak a file descriptor.
+       * utime.c: Include <unistd.h> and <errno.h>.
+       (utime_null): Be sure to close `fd' and to preserve errno.
+       Reported by Geoff Collyer via Arnold Robbins.
+
+2003-11-16  Paul Eggert  <eggert@twinsun.com>
+            Bruno Haible  <bruno@clisp.org>
+
+       Protect against address arithmetic overflow.
+       * printf-args.h: Include stddef.h.
+       (arguments): Change type of field 'count' to size_t.
+       * printf-args.c (printf_fetchargs): Use size_t instead of
+       'unsigned int' where appropriate.
+       * printf-parse.h: Include sys/types.h.
+       (char_directive): Change type of *arg_index fields to ssize_t.
+       (char_directives): Change type of fields 'count', max_*_length to
+       size_t.
+       * printf-parse.c: Include sys/types.h and xsize.h.
+       (SSIZE_MAX): Define fallback value.
+       (PRINTF_PARSE): Use size_t instead of 'unsigned int' and ssize_t
+       instead of 'int' where appropriate. Check a_allocated, d_allocated
+       against overflow. Reject %m$ argument numbers > SSIZE_MAX + 1.
+       * vasnprintf.c: Include xsize.h.
+       (VASNPRINTF): Use size_t instead of 'unsigned int' where appropriate.
+       Check alloca, malloc, realloc, ENSURE_ALLOCATION arguments against
+       overflow. Avoid wraparound when converting a width or precision from
+       decimal to binary.
+
+2003-11-16  Bruno Haible  <bruno@clisp.org>
+
+       Update from GNU gettext.
+       * printf-parse.c: Generalize to it can be compiled for wide strings.
+       (PRINTF_PARSE, CHAR_T, DIRECTIVE, DIRECTIVES): New macros.
+       * vasnprintf.c: Generalize to it can be compiled for wide strings.
+       (VASNPRINTF, CHAR_T, DIRECTIVE, DIRECTIVES, PRINTF_PARSE, USE_SNPRINTF,
+       SNPRINTF): New macros.
+       Don't include <alloca.h> if the file is used inside libintl.
+       (local_wcslen): New function, for Solaris 2.5.1.
+       (VASNPRINTF): Use it instead of wcslen.
+
+2003-11-16  Bruno Haible  <bruno@clisp.org>
+
+       * xsize.h (xmax): New function.
+       (xsum, xsum3, xsum4): Declare as "pure" functions.
+
+2003-11-12  Paul Eggert  <eggert@twinsun.com>
+
+       * xalloc.h: Do not include <limits.h> or <stdint.h>.
+       (xalloc_oversized): Use sizeof (ptrdiff_t) and sizeof (size_t) for
+       the heuristic, rather than PTRDIFF_MAX and SIZE_MAX.  This
+       heuristic is just as accurate as far as we know, and it removes a
+       dependency on size_max.m4 and ptrdiff_max.m4.
+
+2003-11-12  Paul Eggert  <eggert@twinsun.com>
+
+       * xstrtol.c (__xstrtol): Remove "break" immediately after
+       "return", to pacify some unknown compiler.  Problem reported
+       by Joerg Schilling.
+
+2003-11-11  Bruno Haible  <bruno@clisp.org>
+
+       * xsize.h (SIZE_MAX): Remove fallback definition.
+       * xalloc.h: Include limits.h. Assume SIZE_MAX and PTRDIFF_MAX are
+       defined.
+
+2003-11-10  Paul Eggert  <eggert@twinsun.com>
+
+       * xalloc.h (xalloc_oversized): [! (defined PTRDIFF_MAX &&
+       PTRDIFF_MAX < SIZE_MAX)]: Fix off-by-one error that would have
+       rejected some allocations of exactly SIZE_MAX - 2 bytes.
+       From Bruno Haible.
+       [defined PTRDIFF_MAX && PTRDIFF_MAX < SIZE_MAX]: Use SIZE_MAX,
+       not (size_t) -1, since it's defined here.
+
+2003-11-06  Paul Eggert  <eggert@twinsun.com>
+
+       * xalloc.h [HAVE_STDINT_H]: Include <stdint.h>.
+       (xalloc_oversized) [! (PTRDIFF_MAX < SIZE_MAX)]:
+       Reject sizes of exactly SIZE_MAX bytes.
+       * xreadlink.c: Include "xalloc.h" before checking whether SIZE_MAX
+       is defined, since "xalloc.h" now defines SIZE_MAX on modern hosts.
+
+2003-11-05  Bruno Haible  <bruno@clisp.org>
+
+       * xsize.h: Include limits.h, to avoid a possible collision with
+       SIZE_MAX defined in <limits.h> on Solaris.
+
+2003-11-04  Bruno Haible  <bruno@clisp.org>
+
+       * xsize.h: New file.
+       * linebreak.c: Include xsize.h.
+       (mbs_possible_linebreaks, mbs_width_linebreaks): Check malloc()
+       argument for overflow.
+       Suggested by Paul Eggert.
+
+2003-10-31  Bruno Haible  <bruno@clisp.org>
+
+       * wait-process.c (wait_process): Use waitid with WNOWAIT if available,
+       to avoid (extremely rare) race condition.
+       Suggested by Paul Eggert.
+
+2003-11-03  Jim Meyering  <jim@meyering.net>
+
+       * userspec.c: Include "userspec.h".
+       * userspec.h: New file.
+
+2003-10-31  Paul Eggert  <eggert@twinsun.com>
+
+       * mountlist.h (struct mount_entry.me_type_malloced): New member.
+       * mountlist.c (SIZE_MAX): Define if not defined already.
+       (read_filesystem_list): Set and use me_type_malloced.
+       Use "sizeof *me" rather than "sizeof (struct mount_entry)" (or
+       whatever the type happens to be), for brevity and consistency.
+       Check for size calculation overflow on Alphas running OSF/1.
+
+2003-10-31  Jim Meyering  <jim@meyering.net>
+
+       * hash.c: Include "xalloc.h" for use of xalloc_oversized.
+
+       * linebuffer.c: Include <string.h> for declaration of memset.
+
+2003-10-30  Paul Eggert  <eggert@twinsun.com>
+            Bruno Haible  <bruno@clisp.org>
+
+       * vasprintf.c: Include <limits.h>, <stdlib.h>.
+       (vasprintf): Fail if the resulting length doesn't fit in an 'int'.
+
+2003-10-29  Paul Eggert  <eggert@twinsun.com>
+
+       * xalloc.h (xalloc_oversized): Now a macro, not a function,
+       so that it works even if SIZE_MAX < N.  Do not include <stdbool.h>;
+       no longer needed.
+       * quotearg.c (quotearg_n_options): Use it.
+       * group-member.c: Include <stdbool.h>.
+       (free_group_info): Arg is now const *; don't free arg.
+       (get_group_info): Now returns bool and accepts struct group_info *,
+       rather than returning a malloc'ed struct group_info *.
+       All uses changed.  Check for overflow in internal size calculation.
+
+       * getusershell.c (readname): Simplify the code by using x2nrealloc
+       rather than xmalloc/xrealloc.
+       * linebuffer.c (initbuffer, readlinebuffer): Simplify the code by
+       using x2realloc rather than xmalloc/xrealloc.  Also, fix a C
+       conformance bug: the old code used a pointer after freeing the
+       storage that it addressed.
+       * hash.c (hash_initialize): Simplify the code by using xalloc_oversized
+       rather than doing it by hand.
+       * getgroups.c (getgroups): Don't use xrealloc, since we don't need
+       the buffer preserved.  Use free and xmalloc instead.
+       * quotearg.c (quotearg_n_options): Likewise.
+       Use a simpler test for size overflow.  Don't use xalloc_oversized
+       because unsigned int might be wider than size_t (!); this suggests
+       that we should switch from unsigned int to size_t for slot numbers.
+
+2003-10-27  Bruno Haible  <bruno@clisp.org>
+
+       * stdbool_.h: Better support for BeOS.
+
+2003-10-27  Paul Eggert  <eggert@twinsun.com>
+
+       * exclude.c (new_exclude): Use xzalloc rather than xmalloc
+       to allocate the returned structure.  Do not allocate a subarray,
+       as x2nrealloc will do that.
+       (add_exclude): Use x2nrealloc to reallocate ex->exclude,
+       instead of xnrealloc.
+       (add_exclude_file): Use x2realloc instead of malloc + xnrealloc.
+
+2003-10-26  Paul Eggert  <eggert@twinsun.com>
+
+       * xalloc.h (xalloc_oversized): New static inline function, for
+       callers that want to do their own size-overflow checking.  Include
+       <stdbool.h>, since xalloc_oversized returns bool.
+       * xalloc.c (array_size_overflow): Remove.  All callers changed
+       to use xalloc_oversized.
+
+       Add two functions x2realloc, x2nrealloc, for programs that grow
+       arrays dynamically by doubling their sizes.
+       * xalloc.h (x2realloc, x2nrealloc): New decls.
+       * xmalloc.c (x2nrealloc_inline, x2nrealloc, x2realloc):
+       New functions.
+
+       Port to C99 semantics for 'inline' of external functions.
+       Bug reported by Bruno Haible.
+       * xmalloc.c (xnmalloc_inline): New static inline function,
+       with the old contents of xnmalloc.
+       (xnmalloc, xmalloc): Use it.
+       (xnrealloc_inline): New static inline function,
+       with the old contents of xnrealloc.
+       (xnrealloc, xrealloc): Use it.
+
+       * alloc.c (alloca): xmalloc cannot return NULL, so don't test for that.
+
+2003-10-25  Paul Eggert  <eggert@twinsun.com>
+
+       Fix several address-calculation bugs in the hash modules,
+       plus some minor code cleanup.
+
+       * hash.h: Include <stdbool.h>, for bool.
+       * hash.c: Don't include <stdbool.h>, since hash.h does it now.
+       * hash.h (Hash_hasher, hash_get_n_buckets, hash_get_n_buckets_used,
+       hash_get_n_entries, hash_get_max_bucket_length,
+       hash_get_entries, hash_do_for_each, hash_string, hash_initialize,
+       hash_rehash): Use size_t rather than unsigned.
+       * hash.c (struct hash_table, hash_get_n_buckets,
+       hash_get_n_buckets_used, hash_get_n_entries,
+       hash_get_max_bucket_length, hash_table_ok, hash_print_statistics,
+       hash_get_entries, hash_do_for_each, hash_string, is_prime,
+       next_prime, hash_initialize, hash_rehash, hash_delete, hash_print):
+       Likewise.
+       (SIZE_MAX): Define if not defined.
+       (hash_get_max_bucket_length, hash_table_ok, hash_lookup,
+       hash_get_first, hash_get_next, hash_get_entries, hash_do_for_each,
+       hash_print):
+       Use const * when possible.
+       (hash_string): Use (unsigned char) *P rather than *(unsigned char *) P.
+       (check_tuning): Fix bug: if tuning parameters were very close to
+       0 or 1, rounding errors could have caused subscript violations.
+       (hash_initialize, allocate_entry, hash_print): Remove unnecessary cast.
+       (hash_initialize): Add 'fail:' label
+       to free table and return NULL, and use it to simplify code.
+       Use calloc rather than clearing the storage ourself.
+       (hash_initialize, hash_rehash): Check for arithmetic overflow in
+       buffer size calculations.
+       * hash-pjw.h (hash_pjw): Use size_t, not unsigned.
+       Include <stddef.h>, for size_t.
+       * hash-pjw.c (hash_pjw): Likewise.
+       Switch to method described by Bruno Haible.
+       Include <limits.h>, for CHAR_BIT.
+       (SIZE_BITS): New macro.
+
+2003-10-21  Paul Eggert  <eggert@twinsun.com>
+
+       * getndelim2.c (getndelim2): When size calculation overflows,
+       ceiling the allocation at NMAX bytes rather than silently
+       discarding input bytes before NMAX is reached.  This makes
+       a difference only if NMAX exceeds SIZE_MAX / 2.
+
+       * obstack.c: Merge from glibc.
+       [defined _LIBC]: Include <obstack.h>, not "obstack.h".
+       Add libc_hidden_def (_obstack_newchunk).
+       (_obstack_free) [! defined _LIBC]: Remove.
+       [defined _LIBC]: Make a strong alias from obstack_free, rather than
+       a clone of the function body.
+       (fputs) [defined _LIBC && defined USE_IN_LIBIO]: Remove.
+       [defined _LIBC && !defined USE_IN_LIBIO]: Include <libio/iolibio.h>.
+
+       * obstack.h: Indenting cleanup, to make it easier to merge with glibc.
+       (obstack_grow, obstack_grow0): Remove unnecessary parentheses around
+       arg to memcpy.
+
+       * obstack.h (obstack_1grow_fast): Properly parenthesize arg.
+       (obstack_ptr_grow_fast, obstack_int_grow_fast):
+       Don't use lvalue casts, as GCC plans to remove support for them
+       in GCC 3.5.  Reported by Joseph S. Myers.  This bug
+       was also present in the non-GCC version, indicating that this
+       code had always been buggy and had never been widely used.
+       (obstack_1grow, obstack_ptr_grow, obstack_int_grow, obstack_blank):
+       Use the fast variant of each macro, rather than copying the
+       definiens of the fast variant; that way, we'll be more likely to
+       catch future bugs in the fast variants.
+
+2003-10-20  Bruno Haible  <bruno@clisp.org>
+
+       * wait-process.h: New file, from GNU gettext.
+       * wait-process.c: New file, from GNU gettext.
+
+2003-10-19  Jim Meyering  <jim@meyering.net>
+
+       * vasnprintf.c (vasnprintf): Work around losing snprintf on HPUX 10.20.
+
+2003-10-16  Paul Eggert  <eggert@twinsun.com>
+
+       * getgroups.c: Include <errno.h>, <stdlib.h>.
+       (getgroups): First arg is int, not size_t.
+       Don't let 'free' mangle errno.
+
+2003-10-16  Jim Meyering  <jim@meyering.net>
+
+       * xmalloc.c: Include <string.h>, for declarations of memset and memcpy.
+
+2003-10-15  Paul Eggert  <eggert@twinsun.com>
+
+       * exclude.c: Do not include <inttypes.h> or <stdint.h>.
+       (SIZE_MAX): Remove.
+       (new_exclude, add_exclude_file): Initial size no longer needs to
+       be a power of 2.
+       (add_exclude, add_exclude_file): Use xnrealloc instead of rolling
+       our own address arithmetic overflow checking.
+
+       * fnmatch.c (SIZE_MAX): Define if standard headers don't.
+       (fnmatch): Do not alloca more than 2000 wide characters;
+       instead, use malloc for large buffers.
+       Check for address arithmetic overflow, and return -1
+       with errno set to ENOMEM in that case.
+       * fnmatch_loop.c (ALLOCA_LIMIT): New macro.
+       (NEW_PATTERN): Do not alloca more than 8000 bytes;
+       instead, return -1.  Check for address arithmetic overflow.
+
+2003-10-14  Paul Eggert  <eggert@twinsun.com>
+
+       Handle invalid suffixes and overflow independently, so that
+       callers can treat them independently as needed.  Fix some bugs in
+       suffix handling, e.g., "100k@" was not diagnosed as an invalid
+       suffix for a human-readable blocksize.  The major caller-visible
+       change is the addition of a new
+       LONGINT_INVALID_SUFFIX_CHAR_WITH_OVERFLOW enum value, indicating
+       that both overflow and suffix chars were found.
+
+       * human.c (humblock): Don't check separately for invalid suffix
+       char; that is xstrtoumax's job (now that its bug is fixed).
+       * xstrtoimax.c (STRTOL_T_MINIMUM, STRTOL_T_MAXIMUM) [defined
+       INTMAX_MAX]: New macros.
+       * xstrtol.c (STRTOL_T_MINIMUM, STRTOL_T_MAXIMUM, TYPE_MINIMUM,
+       TYPE_MAXIMUM): New macros.
+       (bkm_scale, bkm_scale_by_power): Return strtol_error, not int.
+       (bkm_scale, bkm_scale_by_power, __xstrtol): Return maximal values
+       if overflow occurs, as it's what __strtol does and it's more useful
+       in practice.
+       (__xstrtol): If __strtol reports some error other than ERANGE,
+       reflect it to the caller as LONGINT_INVALID.  If it reports
+       ERANGE, continue the rest of parsing, and report LONGINT_OVERFLOW
+       | LONGINT_INVALID_SUFFIX_CHAR if both errors occur.
+       * xstrtol.h (LONGINT_INVALID_SUFFIX_CHAR_WITH_OVERFLOW): New enum
+       value.
+       (_STRTOL_ERROR): Handle it.  Abort when given unknown error codes.
+       * xstrtoul.c (STRTOL_T_MINIMUM, STRTOL_T_MAXIMUM): New macros.
+       * xstrtoumax.c (STRTOL_T_MINIMUM, STRTOL_T_MAXIMUM)
+       [defined UINTMAX_MAX]: New macros.
+
+2003-10-14  Bruno Haible  <bruno@clisp.org>
+
+       * fatal-signal.h: Improved comments. Suggested by Paul Eggert.
+       * fatal-signal.c: Use sig_atomic_t. Suggested by Paul Eggert.
+       Also use volatile where needed.
+
+2003-10-12  Paul Eggert  <eggert@twinsun.com>
+
+       * lib/xalloc.h (xnmalloc, xzalloc, xnrealloc, xclone): New decls.
+       (XMALLOC, XCALLOC, XREALLOC, XFREE, CCLONE, CLONE): Deprecate,
+       and define in terms of the other primitives.
+       * lib/xmalloc.c: Include stdbool.h; do not include exit.h.
+       (SIZE_MAX): Define if not already defined.
+       (array_size_overflow): New function.
+       (xalloc_die): Abort instead of exiting if 'error' returns.
+       (xnmalloc, xnrealloc, xzalloc, xclone): New functions.
+       (xmalloc, xrealloc): Use them.
+       (xcalloc): Check for address arithmetic overflow.
+       * lib/xstrdup.c (xstrdup): Use xclone, since memcpy should be
+       a bit faster than strcpy.
+
+2003-10-08  Paul Eggert  <eggert@twinsun.com>
+
+       Merge getpass from libc, plus a few fixes.
+
+       * getpass.c (HAVE_STDIO_EXT) [_LIBC]: Define to 1.
+       Include <stdbool.h>.
+       Include <stdio_ext.h> if HAVE_STDIO_H, otherwise define
+       __fsetlocking to empty.
+       [_LIBC]: Do not include "getline.h" or "unlocked-io.h", but
+       do include <bits/libc-lock.h>.
+       Do not include <fcntl.h>; not needed.
+       [_LIBC]: Include <wchar.h>.
+       (NOTCANCEL_MODE): New macro.
+       (flockfile, funlockfile) [_LIBC]: New macros.
+       (__libc_cleanup_push, __libc_cleanup_pop, __getline, __tcgetattr)
+       [!_LIBC]: New macros.
+       (call_fclose): New function.
+       (getpass): Use it.  Save tty stream separately; this simplifies the
+       code and makes it more reliable if stdin happens to equal stdout.
+       Invoke __fsetlocking on tty.
+       Handle thread cancellation if needed.
+       Namespace cleanup (use __tcgetattr, __getline).
+       Use bool for Booleans.
+       [USE_IN_LIBIO]: Handle wide streams.
+       [!_LIBC]: Unconditionally do the fseek, since we don't know what
+       stream might go where.
+
+       * unlocked-io.h: Include <stdio.h>, so that the caller
+       doesn't have to include <stdio.h> before us.
+       (clearerr_unlocked, feof_unlocked, ferror_unlocked,
+       fflush_unlocked, fgets_unlocked, fputc_unlocked, fputs_unlocked,
+       fread_unlocked, fwrite_unlocked, getc_unlocked, getchar_unlocked,
+       putc_unlocked, putchar_unlocked): Define to the unlocked counterpart
+       if not declared, so that we can use getpass.c code from libc without
+       rewriting it.
+       (flockfile, ftrylockfile, funlockfile): New macros.
+
+2003-10-06  Bruno Haible  <bruno@clisp.org>
+
+       * version-etc-2.h: Remove file.
+       * version-etc-2.c: Remove file.
+
+2003-09-25  Jim Meyering  <jim@meyering.net>
+            Bruno Haible  <bruno@clisp.org>
+
+       This lets translators provide better translations for the
+       "Written by ..." part of --version output.
+       * version-etc.h: Include stdarg.h.
+       (version_etc_copyright): Declare as readonly.
+       (version_etc): Make this function variadic with a NULL-terminated list
+       of author name strings.
+       (version_etc_va): New declaration.
+       * version-etc.c: Include stdarg.h, stdlib.h.
+       (version_etc_copyright): Declare as readonly.
+       (version_etc_va): New function. Provide a different translatable string
+       for each possible number of authors < 10. Abbreviate when there are 10
+       authors or more.
+       (version_etc): Make this function variadic. Call version_etc_va.
+       Suggestion from Gary V. Vaughan.
+
+       * long-options.h (parse_long_options): Change prototype: the authors
+       string is moved to the end and becomes variadic.
+       * long-options.c: Include stdarg.h.
+       (parse_long_options): Make this function variadic, too.
+       Call version_etc_va, not version_etc.
+
+2003-10-06  Bruno Haible  <bruno@clisp.org>
+
+       * fatal-signal.h: New file, from GNU gettext.
+       * fatal-signal.c: New file, from GNU gettext.
+
+2003-10-04  Karl Berry  <karl@gnu.org>
+
+       * argp*: update from libc.
+
+2003-10-01  Larry Jones  <lawrence.jones@eds.com>
+
+       * getpass.c (getpass): Use a no-op fseek when switching from input to
+       output mode on the same stream.
+
+2003-09-29  Paul Eggert  <eggert@twinsun.com>
+
+       * strftime.c (tm_diff) [! HAVE_TM_GMTOFF]:
+       Fix arg typo in previous patch.
+
+2003-09-28  Jim Meyering  <jim@meyering.net>
+
+       * error.c: Correct cpp indentation.
+
+2003-09-27  Paul Eggert  <eggert@twinsun.com>
+
+       * minmax.h (MIN, MAX) [__STDC__ && defined __GNUC__ && __GNUC__ >= 2]:
+       Omit the special code that used __typeof__, since we worry that
+       it could be more trouble than it's worth.  See:
+       http://mail.gnu.org/archive/html/bug-gnulib/2003-01/msg00090.html
+       http://mail.gnu.org/archive/html/bug-gnulib/2003-01/msg00095.html
+
+       * free.c: New file.
+
+2003-09-26  Jim Meyering  <jim@meyering.net>
+
+       * error.c (error_tail): Move some declarations
+       into inner scope where the local variables are used.
+
+2003-09-26  Bruno Haible  <bruno@clisp.org>
+
+       * stpncpy.h (gnu_stpncpy): New declaration.
+       (stpncpy): Define as alias for gnu_stpncpy.
+       * stpncpy.c [!_LIBC]: Define gnu_stpncpy, not stpncpy.
+
+2003-09-26  Paul Eggert  <eggert@twinsun.com>
+
+       * error.c (SIZE_MAX) [!defined SIZE_MAX]: Define.
+       (error_tail): Do not loop, reallocating temporary buffer, since
+       the output cannot contain more wide characters than the input
+       contains bytes, the size must be big enough already.  This avoids
+       one potential size overflow calculation.  Check for size overflow
+       when calculating temporary buffer size.  Free temporary buffer
+       when done, if it was allocated with malloc; this plugs a memory
+       leak.  Remove casts from void * to pointers, that are no longer
+       needed now that we're assuming C89 or better.
+
+       Merge error changes from glibc.
+
+       * error.c, error.h: Update copyright notice header to match glibc.
+       * error.c [defined _LIBC]: Include <errno.h>, <bits/libc-lock.h>.
+       (error, error_at_line) [defined _LIBC && defined __libc_ptf_call]:
+       Disable cancellation while printing error.
+       * error.h: Prepend __ to parameter names.
+
+2003-09-25  Karl Berry  <karl@gnu.org>
+
+       * argp-fmtstream.c, argp-help.c: update from libc.
+
+2003-09-25  Bruno Haible  <bruno@clisp.org>
+
+       * version-etc-2.h: New file, from version-etc.h with modifications.
+       * version-etc-2.c: New file, from version-etc.c with modifications.
+
+2003-09-25  Simon Josefsson  <jas@extundo.com>
+
+       * xgetdomainname.h: New file.
+       * xgetdomainname.c: New file.
+
+2003-09-25  Simon Josefsson  <jas@extundo.com>
+            Bruno Haible  <bruno@clisp.org>
+
+       * getdomainname.h: New file.
+       * getdomainname.c: New file.
+
+2003-09-24  Paul Eggert  <eggert@twinsun.com>
+
+       * linebuffer.c (freebuffer): Don't free the argument, just
+       the buffer associated with the argument.  Bug reported by
+       Simon Josefsson.
+
+2003-09-19  Karl Berry  <karl@gnu.org>
+
+       * argp.h: update from libc.
+
+2003-09-16  Paul Eggert  <eggert@twinsun.com>
+
+       * linebuffer.c (readlinebuffer): Return NULL immediately upon
+       input error, instead of returning NULL the next time we are called
+       (and therefore losing track of errno).
+
+2003-09-15  Paul Eggert  <eggert@twinsun.com>
+
+       * getndelim2.c (getndelim2): Don't trash errno when a read
+       fails, so that the caller gets the proper errno.
+
+       * readutmp.c (read_utmp): Likewise.
+       Check for fstat error.  Close stream and free storage
+       when failing.
+
+2003-09-14  Bruno Haible  <bruno@clisp.org>
+
+       * fwriteerror.h: New file.
+       * fwriteerror.c: New file.
+
+2003-09-14  Jim Meyering  <jim@meyering.net>
+
+       * getloadavg.c: Correct cpp indentation.
+       * strdup.c: Likewise.
+       * vasnprintf.c: Likewise.
+
+2003-09-12  Paul Eggert  <eggert@twinsun.com>
+
+       * argmatch.c, fatal.c, xgethostname.c, xmalloc.c: Include exit.h.
+       * obstack.c [!defined _LIBC]: Likewise.
+       * argmatch.c (EXIT_FAILURE): Remove; now done by exit.h
+       * exitfail.c, fatal.c, xgethostname.c, xmalloc.c: Likewise.
+       * exitfail.c: Don't include stdlib.h; no longer needed.
+
+       More changes to assume C89 or better.
+
+       * error.c (error_tail): Assume vprintf.
+
+       * argmatch.c (getenv): Remove decl.
+       * progreloc.c (get_full_program_name): Define via prototype.
+       * setenv.c (clearenv): Likewise.
+       * stpncpy.c: Do not include <string.h> or <sys/types.h>; not
+       needed.
+       * strdup.c: Include <stdlib.h>, <string.h> unconditionally.
+       (malloc, memcpy): Remove decls.
+       * strftime.c (HAVE_LIMITS_H, STDC_HEADERS) [defined _LIBC]: Remove.
+       (HAVE_MEMCPY) [defined emacs && !defined HAVE_BCOPY]: Remove.
+       Include <limits.h>, <stddef.h>, <stdlib.h>, <string.h> unconditionally.
+       (memcpy): Remove macro.
+       (MEMCPY) [!defined COMPILE_WIDE]: Define to memcpy unconditionally.
+       (__P): Remove.  All uses removed.
+       (PTR): Remove.  All uses changed to void *.
+       (CHAR_BIT, NULL): Remove.
+       (spaces, zeros, memset_space, memset_zero)
+       [!defined memset && !defined HAVE_MEMSET && !defined _LIBC]:
+       Remove.
+       (LOCALE_PARAM, LOCALE_PARAM_DECL): Remove.
+       (memcpy_lowcase, memcpy_uppcase, tm_diff, iso_week_days):
+       Define with prototype.
+       Remove now-unnecessary prototype decl.
+       (extra_args_spec): Assume ANSI C.  All uses changed.
+       (extra_args_spec_iso): Remove.
+       (my_strftime, emacs_strftimeu): Define via prototype.
+       * strtod.c: Include <float.h>, <stdlib.h>, <string.h>
+       unconditionally.
+       (DBL_MAX, DBL_MIN, HUGE_VAL, NULL): Remove decls.
+       * strtoimax.c: Include <stdlib.h> unconditionally.
+       (strtoul, strtol): Remove decls.
+       * strtol.c (STDC_HEADERS, HAVE_LIMITS_H, NULL, ULONG_MAX,
+       LONG_MAX): Remove.
+       Include <limits.h>, <stddef.h>, <stdlib.h>, <string.h> unconditionally.
+       (LOCALE_PARAM_DECL): Remove.  All uses changed to LOCALE_PARAM_PROTO.
+       (LOCALE_PARAM_PROTO): New macro.
+       (INTERNAL, INTERNAL1, WEAKNAME): Assume ANSI C, not K&R.
+       (INTERNAL (strtol), strtol): Define with a prototype.
+       (PARAMS): Remove.  All uses removed.
+       * tempname.c: Include <string.h> unconditionally.
+       * userspec.c: Include <stdlib.h>, <string.h> unconditionally.
+       * xgethostname.c (main): Define with a prototype.
+       * xmalloc.c: Include "xalloc.h" first, to check interface.
+       Include <stdlib.h> unconditionally.
+       (calloc, malloc, realloc, free): Remove decls.
+       * xstrtod.c: Include "xstrtod.h" first, to check interface.
+       Include <stdlib.h> unconditionally.  Sort include file names.
+       (strtod): Remove.
+       (xstrtod): Define with a prototype.
+       * xstrtol.c: Include <stdlib.h>, <string.h> unconditionally.
+       (strtol, strtoul): Remove decls.
+
+2003-09-11  Paul Eggert  <eggert@twinsun.com>
+
+       * strndup.c: Don't include <stdio.h>, <sys/types.h>.
+       Include <stdlib.h>, <string.h> unconditionally.
+       Remove now-unnecessary cast to char *.
+       * strnlen.c: Include <string.h> unconditionally.
+       * yesno.c (yesno): Define with a prototype.
+
+2003-09-10  Bruno Haible  <bruno@clisp.org>
+
+       * strcspn.c: Include <string.h> unconditionally.
+       * strpbrk.c: Include <string.h> unconditionally.
+       * strstr.c: Include <string.h> unconditionally.
+       * unicodeio.c: Include <string.h> unconditionally.
+       * setenv.c: Include <stdlib.h> and <string.h> unconditionally.
+       * unsetenv.c: Likewise.
+       * xreadlink.c: Include <stdlib.h> unconditionally.
+       * yesno.c: Include <stdlib.h> unconditionally.
+       (rpmatch): Add prototype.
+
+2003-09-10  Jim Meyering  <jim@meyering.net>
+
+       * error.c: Correct indentation of cpp directives.
+
+2003-09-09  Paul Eggert  <eggert@twinsun.com>
+
+       More K&R removal.
+
+       * acosl.c (main): Use a prototype.
+       * asinl.c, cosl.c, expl.c, frexpl.c, ldexpl.c, sinl.c,
+       tanl.c: Likewise.
+
+       * getloadavg.c (getloadavg, main): Define via prototypes.
+
+       * getopt.h (struct option.name): Assume C89, and use 'const'.
+       (getopt, etopt_long, getopt_long_only, _getopt_internal)
+       [defined __GNU_LIBRARY__]: Assume C89, so we can always declare
+       with a prototype.
+       * getopt.c (const): Remove macro.
+       Include <string.h> unconditionally.
+       (my_index): Remove; all uses changed to strchr.
+       (strlen): Remove decl.
+       (exchange): Remove forward decl; no longer needed.
+       (exchange, _getopt_initialize, _getopt_internal, getopt, main):
+       Define with prototype.
+       * getopt1.c (const): Remove macro.
+       (getopt_long, getopt_long_only, main): Define with prototype.
+
+       * getugroups.c: Include <string.h> unconditionally.
+
+       * getusershell.c: Include <stdlib.h> unconditionally.
+       (getusershell, setusershell, endusershell, readname, main):
+       Define with prototypes.
+
+       * group-member.c: Include group-member.h first.
+       Include <stdlib.h> unconditionally.
+
+       * hard-locale.c: Include hard-locale.h first.
+       Include <stdlib.h>, <string.h> unconditionally.
+
+       * hash.c (free, malloc): Remove decls.
+       Include <stdlib.h> unconditionally.
+
+       * human.c: Include <stdlib.h>, <string.h> unconditionally.
+       (getenv): Do not declare.
+
+       * idcache.c: Include <string.h> unconditionally.
+
+       * long-options.c: Include long-options.h first, to test interface.
+       Include <stdlib.h> unconditionally.
+
+       * makepath.c: Include makepath.h first, to test interface.
+       Include <stdlib.h> and <string.h> unconditionally.
+
+       * linebuffer.c: Include <stdlib.h>.
+       (free): Remove decl.
+
+       * malloc.c: Include <stdlib.h>, for malloc; don't bother with stddef.h.
+       rpl_malloc returns void *, not char *.
+       * realloc.c (rpl_realloc): Likewise.  Also, define with a prototype.
+
+       * md5.h: Include <limits.h> unconditionally.
+       (UINT_MAX_32_BITS): Don't worry about non-__STDC__ case.
+       (__P): Remove; all uses removed.
+       * md5.c: Include "md5.h" first.
+       (md5_init_ctx, md5_read_ctx, md5_finish_ctx, md5_stream,
+       md5_buffer, md5_process_bytes, md5_process_block):
+       Define with prototypes.
+       * sha.h (__P): Remove all uses.  (It wasn't defined??)
+       * sha.c: Include "sha.h" first.
+       Include <stdlib.h>, <string.h> unconditionally.
+
+       * memchr.c (__ptr_t): Remove; all uses changed to void *.
+       * memcmp.c (__ptr_t): Likewise.
+       * memrchr.c (__ptr_t): Likewise.
+       * memchr.c, memcmp.c, memcoll.c, memrchr.c:
+       Include <string.h> unconditionally.
+       * memchr.c, memrchr.c: Include <limits.h> unconditionally.
+       * memchr.c: Include <stdlib.h> unconditionally.
+       * memchr.c (LONG_MAX): Remove.
+       * memrchr.c (LONG_MAX): Likewise.
+       * memchr.c (__memchr): Define via a prototype.
+       * memrchr.c (__memrchr): Likewise.
+       * memcmp.c (__P): Remove, and remove all uses.
+       (memcmp_bytes, memcmp_common_alignment, memcmp_not_common_alignment):
+       Remove forward decls; no longer needed.
+       * memcpy.c, memmove.c, memset.c: Include <stddef.h>.
+       Use types required by C89 in prototype.
+
+       * mkdir.c: Include <stdlib.h>, <string.h> unconditionally.
+       * savedir.c: Likewise.
+       * mkdir.c (free): Remove decl.
+       * rmdir.c (rmdir): Define with a prototype.
+       * savedir.c: Include savedir.h first, to test interface.
+
+       * mktime.c (STDC_HEADERS): Remove.
+       Include <stdlib.h>, <string.h> unconditionally.
+
+       * modechange.c: Include <stdlib.h> unconditionally.
+       (malloc): Remove decl.
+
+       * mountlist.c: Include <stdlib.h>, <string.h> unconditionally.
+       (free): Remove decl.
+
+       * obstack.h (PTR_INT_TYPE) [!defined __PTRDIFF_TYPE__]:
+       Define to ptrdiff_t, without bothering to check HAVE_STDDEF_H.
+       (This type really should be intptr_t, but that's a C99ism.)
+       (_obstack_memcpy): Remove: all uses changed to memcpy.
+       Include <string.h> unconditionally.
+       (struct obstack): Assume __STDC__ for types of members
+       chunkfun, freefun, extra_arg.
+       (_obstack_newchunk, _obstack_free, _obstack_begin, _obstack_begin_1,
+       _obstack_memory_used, obstack_alloc_failed_handler, obstack_init,
+       obstack_begin, obstack_specify_allocation,
+       obstack_specify_allocation_with_arg, obstack_chunkfun,
+       obstack_freefun, obstack_free) [! (defined __STDC__ && __STDC__)]:
+       Remove unprototyped decls and the macros that use them.
+       * obstack.c (POINTER): Remove.  All uses changed to void *.
+       (obstack_alloc_failed_handler, CALL_CHUNKFUN, CALL_FREEFUN,
+       _obstack_begin, _obstack_begin_1, _obstack_allocated_p)
+       (defined __STDC__ && __STDC__)]:
+       Remove nonprototyped code.
+       Include <stdlib.h> unconditionally.
+       (_obstack_begin, _obstack_begin_1, _obstack_newchunk,
+       _obstack_allocated_p, _obstack_free, obstack_free,
+       _obstack_memory_used, print_and_abort):
+       Define using prototypes.
+       (obstack_1grow, obstack_1grow_fast, obstack_alloc, obstack_base,
+       obstack_blank, obstack_blank_fast, obstack_copy, obstack_copy0,
+       obstack_finish, obstack_grow, obstack_grow0, obstack_make_room,
+       obstack_next_free, obstack_object_size, obstack_room) [0]:
+       Remove unused, unprototyped code.
+
+       * path-concat.c: Include <stdlib.h>, <string.h> unconditionally.
+
+       * physmem.c (physmem_total, physmem_available, main): Define
+       with prototypes.
+
+       * posixtm.c: Include <stdlib.h>, <string.h> unconditionally.
+       (main): Define with a prototype.
+
+       * posixver.c (getenv): Remove decl.
+
+       * putenv.c (malloc): Returns void *, not char *.
+       Include <string.h> unconditionally.
+       (strchr, memcpy, NULL): Do not define.
+
+       * readtokens.c: Include readtokens.h first, to test interface.
+       Include <stdlib.h>, <string.h> unconditionally.
+       (init_tokenbuffer): Define with a prototype.
+
+       * regex.c (PARAMS): Remove.  All uses removed.
+       All uses of _RE_ARGS removed, too.
+       Include <stddef.h>, <stdlib.h>, <string.h>, <limits.h>
+       unconditionally.
+       (bzero): Assume memset exists.
+       (memcmp, memcpy, NULL): Remove.
+       (SIGN_EXTEND_CHAR): Remove; all uses replaced by casts to signed
+       char, or assignments to local vars of type signed char.
+       (init_syntax_once, PREFIX(extract_number_and_incr),
+       PREFIX(print_partial_compiled_pattern),
+       PREFIX(print_compiled_pattern), PREFIX(print_double_string),
+       convert_mbs_to_wcs, print_fastmap, re_set_syntax,
+       PREFIX(regex_grow_registers), PREFIX(regex_compile),
+       PREFIX(store_op1), PREFIX(store_op2), PREFIX(insert_op1),
+       PREFIX(insert_op2), PREFIX(at_begline_loc_p),
+       PREFIX(at_endline_loc_p), group_in_compile_stack, insert_space,
+       wcs_compile_range, byte_compile_range, truncate_wchar,
+       PREFIX(re_compile_fastmap), re_compile_fastmap, re_set_registers,
+       re_search, re_search_2, PREFIX(re_search_2), re_match, re_match_2,
+       count_mbs_length, wcs_re_match_2_internal,
+       byte_re_match_2_internal, PREFIX(group_match_null_string_p),
+       PREFIX(alt_match_null_string_p),
+       PREFIX(common_op_match_null_string_p), PREFIX(bcmp_translate),
+       re_compile_pattern, re_comp, re_exec, regcomp, regexec, regerror,
+       regfree, PREFIX(extract_number)): Define with prototype.  Remove
+       now-unnecessary declaration, if any.
+       (byte_compile_range, PREFIX(regex_compile), re_comp, re_exec,
+       regcomp, regexec):
+       Remove now-unnecessary casts among pointer types.
+       * regex.h (_RE_ARGS): Remove.  All uses removed.
+
+       * rename.c: Include <stdlib.h>, <string.h> unconditionally.
+       (free): Remove decl.
+
+       * rpmatch.c: Include <stdlib.h> unconditionally.
+
+       * same.c: Include <stdlib.h>, <string.h> unconditionally.
+       (free): Remove decl.
+
+       * save-cwd.c: Include <stdlib.h> unconditionally.
+       * xgetcwd.c: Likewise.
+
+       * stat.c: Include <stdlib.h>, <string.h> unconditionally.
+       (free): Remove decl.
+
+       * strchrnul.c (strchrnul): Define with a prototype.
+       Fix bug: c_in was not converted to char before searching.
+
+       The following changes are not K&R related:
+
+       * group-member.h: Include <sys/types.h>, so that this file is
+       self-contained.
+       * makepath.h: Likewise.
+
+       * getusershell.c (readname, default_index, line_size, readname):
+       Use size_t, not int, for sizes.
+       (readname): If the size overflows, report an error instead of
+       looping forever.
+
+2003-09-09  Derek Robert Price  <derek@ximbiot.com>
+
+       * getndelim2.c: Assume stdlib.h per the C89 spec.
+
+2003-09-08  Paul Eggert  <eggert@twinsun.com>
+
+       Assume C89 or better; remove K&R cruft.
+       A few of these changes were first proposed by Derek Robert Price
+       in <http://mail.gnu.org/archive/html/bug-gnulib/2003-07/msg00105.html>.
+
+       * addext.c: Include <string.h> unconditionally.
+       * backupfile.c: Include <string.h>, <stdlib.h> unconditionally.
+       Don't declare getenv or malloc.
+
+       * alloca.c: Include <string.h>, <stdlib.h> unconditionally.
+       (POINTER_TYPE, pointer): Remove; all uses changed to void *.
+       (NULL): Remove.
+       (find_stack_direction, alloca): Use prototypes.
+
+       * atexit.c (atexit): Define using a prototype.
+
+       * basename.c, dirname.c, stripslash.c:
+       Include <string.h> unconditionally.
+
+       * bcopy.c: Include <stddef.h>.
+       (bcopy): Define with prototype, using 'const' and 'void' and 'size_t'.
+
+       * canon-host.c: Include <stdlib.h>, <string.h> unconditionally.
+
+       * error.h (error, error_at_line, error_print_progname)
+       [! (defined (__STDC__) && __STDC__)]: Remove decls.
+       * error.c: Include error.h first, to check interface.
+       Include <stdarg.h>, <stdlib.h>, <string.h> unconditionally.
+       (VA_START): Remove; all uses changeed to va_start.
+       (exit, strerror): Remove decls.
+       (error_print_progname): Prototype uncondionally.
+       Don't include <errno.h>; no longer needed.
+       (private_strerror): Remove.
+       (error_tail): Always define.
+       (error, error_at_line): Assume C89 or better; always use prototypes.
+       * fatal.c: Include "fatal.h" first, to test interface.
+       Include <stdarg.h>, <stdlib.h>, <string.h> unconditionally.
+       (VA_START): Remove; all uses changed to va_start.
+       [! (HAVE_VPRINTF || HAVE_DOPRNT || _LIBC)]: Remove support for
+       this case.
+       (exit): Remove decl.
+       (fatal): Prototype unconditionally.  Assume va_start works.
+       Abort at end, to pacify gcc.
+
+       * euidaccess.c (main): Define with a prototype.
+
+       * exclude.c: Include <stdlib.h>, <string.h> unconditionally.
+
+       * exitfail.c: Include <stdlib.h> unconditionally.
+
+       * fnmatch_.h (__P): Remove.  All uses changed to assume
+       prototypes.
+       * fnmatch.c: Include fnmatch.h first, to test interface.
+       Include <string.h>, <stddef.h>, <stdlib.h> unconditionally.
+       (getenv): Remove decl.
+       (fnmatch): Define using a prototype.
+       * fnmatch_loop.c (FCT): Remove forward decl; no longer needed.
+       (FCT): Define using a prototype.
+
+       * getdate.y: Include <stdlib.h>, <string.h> unconditionally.
+
+       * gethostname.c: Include <stddef.h>.
+       (gethostname): Define with prototype.  Length is size_t, not int.
+
+2003-09-08  Paul Eggert  <eggert@twinsun.com>
+
+       * getversion.c: Remove; was migrated to backupfile.c in 1997.
+       getversion.c should have been removed then, but was accidentally
+       preserved.
+
+       * utime.c [!HAVE_UTIMES_NULL]: Include <sys/stat.h>, <fcntl.h>.
+       (utime_null): Fix typo: 'st' was sometimes called 'sb'.
+
+2003-09-07  Paul Eggert  <eggert@twinsun.com>
+
+       * time_r.c (gmtime_r, localtime_r): Fix silly typo: missing arg to
+       copy_tm_result.  Bug reported by Simon Josefsson in
+       <http://mail.gnu.org/archive/html/bug-gnulib/2003-09/msg00028.html>.
+
+2003-09-06  Paul Eggert  <eggert@twinsun.com>
+
+       * time_r.c, time_r.h: New files.
+
+       * mktime.c (my_mktime_localtime_r): Remove; all uses changed to
+       __localtime_r.
+       (__localtime_r) [!defined _LIBC]: New macro.  Include <time_r.h>.
+       (__mktime_internal) [!defined _LIBC]: Now extern, not static.
+
+       * strftime.c (my_strftime_gmtime_r): Remove; all uses changed to
+       __gmtime_r.
+       (my_strftime_localtime_r): Remove; all uses changed to __localtime_r.
+       (__gtime_r, __localtime_r) [!HAVE_TM_GMTOFF]: New macros.
+       Include <time_r.h>.
+
+       * timegm.c: Switch to glibc implementation, with the following changes:
+       [defined HAVE_CONFIG_H]: Include <config.h>.
+       [!defined _LIBC]: Include "timegm.h" rather than <time.h>.
+       (__mktime_internal) [!defined _LIBC]: New decl.
+       (__gmtime_r) [!defined _LIBC]: New macro and function.
+       (timegm): Use a prototype, since gnulib assumes C89.
+       Do not bother declaring tmp to be const, as it's not really usefu.
+       * timegm.h: Hoist "#include <time.h>" out of #ifdef.
+       (timegm): Declare only if HAVE_DECL_TIMEGM.
+
 2003-09-03  Paul Eggert  <eggert@twinsun.com>
 
        * human.c (human_readable): Fix bug that rounded 10501 to 10k.