Merge from gnulib.
authorPaul Eggert <eggert@cs.ucla.edu>
Wed, 18 May 2011 00:35:01 +0000 (17:35 -0700)
committerPaul Eggert <eggert@cs.ucla.edu>
Wed, 18 May 2011 00:35:01 +0000 (17:35 -0700)
1  2 
doc/misc/texinfo.tex
lib/gnulib.mk
lib/intprops.h
lib/unistd.in.h
m4/inttypes.m4
m4/stdint.m4
m4/unistd_h.m4

@@@ -3,7 -3,7 +3,7 @@@
  % Load plain if necessary, i.e., if running under initex.
  \expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi
  %
--\def\texinfoversion{2011-03-25.11}
++\def\texinfoversion{2011-05-11.16}
  %
  % Copyright 1985, 1986, 1988, 1990, 1991, 1992, 1993, 1994, 1995,
  % 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
@@@ -8424,7 -8424,7 +8424,7 @@@ directory should work if nowhere else d
  %
  % Latin1 (ISO-8859-1) character definitions.
  \def\latonechardefs{%
--  \gdef^^a0{~}
++  \gdef^^a0{\tie}
    \gdef^^a1{\exclamdown}
    \gdef^^a2{\missingcharmsg{CENT SIGN}}
    \gdef^^a3{{\pounds}}
  
  % Latin2 (ISO-8859-2) character definitions.
  \def\lattwochardefs{%
--  \gdef^^a0{~}
++  \gdef^^a0{\tie}
    \gdef^^a1{\ogonek{A}}
    \gdef^^a2{\u{}}
    \gdef^^a3{\L}
  
  \message{and turning on texinfo input format.}
  
++\def^^L{\par} % remove \outer, so ^L can appear in an @comment
++
  % DEL is a comment character, in case @c does not suffice.
  \catcode`\^^? = 14
  
diff --cc lib/gnulib.mk
@@@ -167,7 -167,7 +167,8 @@@ endi
  
  ## begin gnulib module ignore-value
  
--libgnu_a_SOURCES += ignore-value.h
++
++EXTRA_DIST += ignore-value.h
  
  ## end   gnulib module ignore-value
  
@@@ -779,6 -779,6 +780,7 @@@ unistd.h: unistd.in.h $(top_builddir)/c
              -e 's|@''GNULIB_GETLOGIN_R''@|$(GNULIB_GETLOGIN_R)|g' \
              -e 's|@''GNULIB_GETPAGESIZE''@|$(GNULIB_GETPAGESIZE)|g' \
              -e 's|@''GNULIB_GETUSERSHELL''@|$(GNULIB_GETUSERSHELL)|g' \
++            -e 's|@''GNULIB_GROUP_MEMBER''@|$(GNULIB_GROUP_MEMBER)|g' \
              -e 's|@''GNULIB_LCHOWN''@|$(GNULIB_LCHOWN)|g' \
              -e 's|@''GNULIB_LINK''@|$(GNULIB_LINK)|g' \
              -e 's|@''GNULIB_LINKAT''@|$(GNULIB_LINKAT)|g' \
              -e 's|@''HAVE_GETHOSTNAME''@|$(HAVE_GETHOSTNAME)|g' \
              -e 's|@''HAVE_GETLOGIN''@|$(HAVE_GETLOGIN)|g' \
              -e 's|@''HAVE_GETPAGESIZE''@|$(HAVE_GETPAGESIZE)|g' \
++            -e 's|@''HAVE_GROUP_MEMBER''@|$(HAVE_GROUP_MEMBER)|g' \
              -e 's|@''HAVE_LCHOWN''@|$(HAVE_LCHOWN)|g' \
              -e 's|@''HAVE_LINK''@|$(HAVE_LINK)|g' \
              -e 's|@''HAVE_LINKAT''@|$(HAVE_LINKAT)|g' \
@@@ -883,9 -883,9 +886,10 @@@ EXTRA_DIST += unistd.in.
  ## begin gnulib module verify
  
  if gl_GNULIB_ENABLED_verify
--libgnu_a_SOURCES += verify.h
  
  endif
++EXTRA_DIST += verify.h
++
  ## end   gnulib module verify
  
  ## begin gnulib module warn-on-use
diff --cc lib/intprops.h
  
  /* Written by Paul Eggert.  */
  
--#ifndef GL_INTPROPS_H
--# define GL_INTPROPS_H
++#ifndef _GL_INTPROPS_H
++#define _GL_INTPROPS_H
  
--# include <limits.h>
++#include <limits.h>
++
++/* Return a integer value, converted to the same type as the integer
++   expression E after integer type promotion.  V is the unconverted value.
++   E should not have side effects.  */
++#define _GL_INT_CONVERT(e, v) ((e) - (e) + (v))
  
  /* The extra casts in the following macros work around compiler bugs,
     e.g., in Cray C 5.0.3.0.  */
  
  /* True if the arithmetic type T is an integer type.  bool counts as
     an integer.  */
--# define TYPE_IS_INTEGER(t) ((t) 1.5 == 1)
++#define TYPE_IS_INTEGER(t) ((t) 1.5 == 1)
  
  /* True if negative values of the signed integer type T use two's
     complement, ones' complement, or signed magnitude representation,
     respectively.  Much GNU code assumes two's complement, but some
     people like to be portable to all possible C hosts.  */
--# define TYPE_TWOS_COMPLEMENT(t) ((t) ~ (t) 0 == (t) -1)
--# define TYPE_ONES_COMPLEMENT(t) ((t) ~ (t) 0 == 0)
--# define TYPE_SIGNED_MAGNITUDE(t) ((t) ~ (t) 0 < (t) -1)
++#define TYPE_TWOS_COMPLEMENT(t) ((t) ~ (t) 0 == (t) -1)
++#define TYPE_ONES_COMPLEMENT(t) ((t) ~ (t) 0 == 0)
++#define TYPE_SIGNED_MAGNITUDE(t) ((t) ~ (t) 0 < (t) -1)
++
++/* True if the signed integer expression E uses two's complement.  */
++#define _GL_INT_TWOS_COMPLEMENT(e) (~ _GL_INT_CONVERT (e, 0) == -1)
  
  /* True if the arithmetic type T is signed.  */
--# define TYPE_SIGNED(t) (! ((t) 0 < (t) -1))
++#define TYPE_SIGNED(t) (! ((t) 0 < (t) -1))
++
++/* Return 1 if the integer expression E, after integer promotion, has
++   a signed type.  E should not have side effects.  */
++#define _GL_INT_SIGNED(e) (_GL_INT_CONVERT (e, -1) < 0)
  
--/* The maximum and minimum values for the integer type T.  These
++
++/* Minimum and maximum values for integer types and expressions.  These
     macros have undefined behavior if T is signed and has padding bits.
     If this is a problem for you, please let us know how to fix it for
     your host.  */
--# define TYPE_MINIMUM(t) \
--  ((t) (! TYPE_SIGNED (t) \
--        ? (t) 0 \
--        : TYPE_SIGNED_MAGNITUDE (t) \
--        ? ~ (t) 0 \
++
++/* The maximum and minimum values for the integer type T.  */
++#define TYPE_MINIMUM(t)                                                 \
++  ((t) (! TYPE_SIGNED (t)                                               \
++        ? (t) 0                                                         \
++        : TYPE_SIGNED_MAGNITUDE (t)                                     \
++        ? ~ (t) 0                                                       \
          : ~ TYPE_MAXIMUM (t)))
--# define TYPE_MAXIMUM(t) \
--  ((t) (! TYPE_SIGNED (t) \
--        ? (t) -1 \
++#define TYPE_MAXIMUM(t)                                                 \
++  ((t) (! TYPE_SIGNED (t)                                               \
++        ? (t) -1                                                        \
          : ((((t) 1 << (sizeof (t) * CHAR_BIT - 2)) - 1) * 2 + 1)))
  
--/* Return zero if T can be determined to be an unsigned type.
--   Otherwise, return 1.
--   When compiling with GCC, INT_STRLEN_BOUND uses this macro to obtain a
--   tighter bound.  Otherwise, it overestimates the true bound by one byte
--   when applied to unsigned types of size 2, 4, 16, ... bytes.
--   The symbol signed_type_or_expr__ is private to this header file.  */
--# if __GNUC__ >= 2
--#  define signed_type_or_expr__(t) TYPE_SIGNED (__typeof__ (t))
--# else
--#  define signed_type_or_expr__(t) 1
--# endif
++/* The maximum and minimum values for the type of the expression E,
++   after integer promotion.  E should not have side effects.  */
++#define _GL_INT_MINIMUM(e)                                              \
++  (_GL_INT_SIGNED (e)                                                   \
++   ? - _GL_INT_TWOS_COMPLEMENT (e) - _GL_SIGNED_INT_MAXIMUM (e)         \
++   : _GL_INT_CONVERT (e, 0))
++#define _GL_INT_MAXIMUM(e)                                              \
++  (_GL_INT_SIGNED (e)                                                   \
++   ? _GL_SIGNED_INT_MAXIMUM (e)                                         \
++   : _GL_INT_CONVERT (e, -1))
++#define _GL_SIGNED_INT_MAXIMUM(e)                                       \
++  (((_GL_INT_CONVERT (e, 1) << (sizeof ((e) + 0) * CHAR_BIT - 2)) - 1) * 2 + 1)
++
++
++/* Return 1 if the __typeof__ keyword works.  This could be done by
++   'configure', but for now it's easier to do it by hand.  */
++#if 2 <= __GNUC__ || 0x5110 <= __SUNPRO_C
++# define _GL_HAVE___TYPEOF__ 1
++#else
++# define _GL_HAVE___TYPEOF__ 0
++#endif
++
++/* Return 1 if the integer type or expression T might be signed.  Return 0
++   if it is definitely unsigned.  This macro does not evaluate its argument,
++   and expands to an integer constant expression.  */
++#if _GL_HAVE___TYPEOF__
++# define _GL_SIGNED_TYPE_OR_EXPR(t) TYPE_SIGNED (__typeof__ (t))
++#else
++# define _GL_SIGNED_TYPE_OR_EXPR(t) 1
++#endif
  
  /* Bound on length of the string representing an unsigned integer
     value representable in B bits.  log10 (2.0) < 146/485.  The
     smallest value of B where this bound is not tight is 2621.  */
--# define INT_BITS_STRLEN_BOUND(b) (((b) * 146 + 484) / 485)
++#define INT_BITS_STRLEN_BOUND(b) (((b) * 146 + 484) / 485)
  
  /* Bound on length of the string representing an integer type or expression T.
     Subtract 1 for the sign bit if T is signed, and then add 1 more for
--   a minus sign if needed.  */
--# define INT_STRLEN_BOUND(t) \
--  (INT_BITS_STRLEN_BOUND (sizeof (t) * CHAR_BIT - signed_type_or_expr__ (t)) \
--   + signed_type_or_expr__ (t))
++   a minus sign if needed.
++
++   Because _GL_SIGNED_TYPE_OR_EXPR sometimes returns 0 when its argument is
++   signed, this macro may overestimate the true bound by one byte when
++   applied to unsigned types of size 2, 4, 16, ... bytes.  */
++#define INT_STRLEN_BOUND(t)                                     \
++  (INT_BITS_STRLEN_BOUND (sizeof (t) * CHAR_BIT                 \
++                          - _GL_SIGNED_TYPE_OR_EXPR (t))        \
++   + _GL_SIGNED_TYPE_OR_EXPR (t))
  
  /* Bound on buffer size needed to represent an integer type or expression T,
     including the terminating null.  */
--# define INT_BUFSIZE_BOUND(t) (INT_STRLEN_BOUND (t) + 1)
++#define INT_BUFSIZE_BOUND(t) (INT_STRLEN_BOUND (t) + 1)
++
++
++/* Range overflow checks.
++
++   The INT_<op>_RANGE_OVERFLOW macros return 1 if the corresponding C
++   operators might not yield numerically correct answers due to
++   arithmetic overflow.  They do not rely on undefined or
++   implementation-defined behavior.  Their implementations are simple
++   and straightforward, but they are a bit harder to use than the
++   INT_<op>_OVERFLOW macros described below.
++
++   Example usage:
++
++     long int i = ...;
++     long int j = ...;
++     if (INT_MULTIPLY_RANGE_OVERFLOW (i, j, LONG_MIN, LONG_MAX))
++       printf ("multiply would overflow");
++     else
++       printf ("product is %ld", i * j);
++
++   Restrictions on *_RANGE_OVERFLOW macros:
++
++   These macros do not check for all possible numerical problems or
++   undefined or unspecified behavior: they do not check for division
++   by zero, for bad shift counts, or for shifting negative numbers.
++
++   These macros may evaluate their arguments zero or multiple times,
++   so the arguments should not have side effects.  The arithmetic
++   arguments (including the MIN and MAX arguments) must be of the same
++   integer type after the usual arithmetic conversions, and the type
++   must have minimum value MIN and maximum MAX.  Unsigned types should
++   use a zero MIN of the proper type.
++
++   These macros are tuned for constant MIN and MAX.  For commutative
++   operations such as A + B, they are also tuned for constant B.  */
++
++/* Return 1 if A + B would overflow in [MIN,MAX] arithmetic.
++   See above for restrictions.  */
++#define INT_ADD_RANGE_OVERFLOW(a, b, min, max)          \
++  ((b) < 0                                              \
++   ? (a) < (min) - (b)                                  \
++   : (max) - (b) < (a))
++
++/* Return 1 if A - B would overflow in [MIN,MAX] arithmetic.
++   See above for restrictions.  */
++#define INT_SUBTRACT_RANGE_OVERFLOW(a, b, min, max)     \
++  ((b) < 0                                              \
++   ? (max) + (b) < (a)                                  \
++   : (a) < (min) + (b))
++
++/* Return 1 if - A would overflow in [MIN,MAX] arithmetic.
++   See above for restrictions.  */
++#define INT_NEGATE_RANGE_OVERFLOW(a, min, max)          \
++  ((min) < 0                                            \
++   ? (a) < - (max)                                      \
++   : 0 < (a))
++
++/* Return 1 if A * B would overflow in [MIN,MAX] arithmetic.
++   See above for restrictions.  */
++#define INT_MULTIPLY_RANGE_OVERFLOW(a, b, min, max)     \
++  ((b) < 0                                              \
++   ? ((a) < 0                                           \
++      ? (a) < (max) / (b)                               \
++      : (b) < -1 && (min) / (b) < (a))                  \
++   : (0 < (b)                                           \
++      && ((a) < 0                                       \
++          ? (a) < (min) / (b)                           \
++          : (max) / (b) < (a))))
++
++/* Return 1 if A / B would overflow in [MIN,MAX] arithmetic.
++   See above for restrictions.  Do not check for division by zero.  */
++#define INT_DIVIDE_RANGE_OVERFLOW(a, b, min, max)       \
++  ((min) < 0 && (b) == -1 && (a) < - (max))
++
++/* Return 1 if A % B would overflow in [MIN,MAX] arithmetic.
++   See above for restrictions.  Do not check for division by zero.
++   Mathematically, % should never overflow, but on x86-like hosts
++   INT_MIN % -1 traps, and the C standard permits this, so treat this
++   as an overflow too.  */
++#define INT_REMAINDER_RANGE_OVERFLOW(a, b, min, max)    \
++  INT_DIVIDE_RANGE_OVERFLOW (a, b, min, max)
++
++/* Return 1 if A << B would overflow in [MIN,MAX] arithmetic.
++   See above for restrictions.  Here, MIN and MAX are for A only, and B need
++   not be of the same type as the other arguments.  The C standard says that
++   behavior is undefined for shifts unless 0 <= B < wordwidth, and that when
++   A is negative then A << B has undefined behavior and A >> B has
++   implementation-defined behavior, but do not check these other
++   restrictions.  */
++#define INT_LEFT_SHIFT_RANGE_OVERFLOW(a, b, min, max)   \
++  ((a) < 0                                              \
++   ? (a) < (min) >> (b)                                 \
++   : (max) >> (b) < (a))
++
++
++/* The _GL*_OVERFLOW macros have the same restrictions as the
++   *_RANGE_OVERFLOW macros, except that they do not assume that operands
++   (e.g., A and B) have the same type as MIN and MAX.  Instead, they assume
++   that the result (e.g., A + B) has that type.  */
++#define _GL_ADD_OVERFLOW(a, b, min, max)                                \
++  ((min) < 0 ? INT_ADD_RANGE_OVERFLOW (a, b, min, max)                  \
++   : (a) < 0 ? (b) <= (a) + (b)                                         \
++   : (b) < 0 ? (a) <= (a) + (b)                                         \
++   : (a) + (b) < (b))
++#define _GL_SUBTRACT_OVERFLOW(a, b, min, max)                           \
++  ((min) < 0 ? INT_SUBTRACT_RANGE_OVERFLOW (a, b, min, max)             \
++   : (a) < 0 ? 1                                                        \
++   : (b) < 0 ? (a) - (b) <= (a)                                         \
++   : (a) < (b))
++#define _GL_MULTIPLY_OVERFLOW(a, b, min, max)                           \
++  (((min) == 0 && (((a) < 0 && 0 < (b)) || ((b) < 0 && 0 < (a))))       \
++   || INT_MULTIPLY_RANGE_OVERFLOW (a, b, min, max))
++#define _GL_DIVIDE_OVERFLOW(a, b, min, max)                             \
++  ((min) < 0 ? (b) == _GL_INT_CONVERT (min, -1) && (a) < - (max)        \
++   : (a) < 0 ? (b) <= (a) + (b) - 1                                     \
++   : (b) < 0 && (a) + (b) <= (a))
++#define _GL_REMAINDER_OVERFLOW(a, b, min, max)                          \
++  ((min) < 0 ? (b) == _GL_INT_CONVERT (min, -1) && (a) < - (max)        \
++   : (a) < 0 ? (a) % (b) != ((max) - (b) + 1) % (b)                     \
++   : (b) < 0 && ! _GL_UNSIGNED_NEG_MULTIPLE (a, b, max))
++
++/* Return a nonzero value if A is a mathematical multiple of B, where
++   A is unsigned, B is negative, and MAX is the maximum value of A's
++   type.  A's type must be the same as (A % B)'s type.  Normally (A %
++   -B == 0) suffices, but things get tricky if -B would overflow.  */
++#define _GL_UNSIGNED_NEG_MULTIPLE(a, b, max)                            \
++  (((b) < -_GL_SIGNED_INT_MAXIMUM (b)                                   \
++    ? (_GL_SIGNED_INT_MAXIMUM (b) == (max)                              \
++       ? (a)                                                            \
++       : (a) % (_GL_INT_CONVERT (a, _GL_SIGNED_INT_MAXIMUM (b)) + 1))   \
++    : (a) % - (b))                                                      \
++   == 0)
++
++
++/* Integer overflow checks.
++
++   The INT_<op>_OVERFLOW macros return 1 if the corresponding C operators
++   might not yield numerically correct answers due to arithmetic overflow.
++   They work correctly on all known practical hosts, and do not rely
++   on undefined behavior due to signed arithmetic overflow.
++
++   Example usage:
++
++     long int i = ...;
++     long int j = ...;
++     if (INT_MULTIPLY_OVERFLOW (i, j))
++       printf ("multiply would overflow");
++     else
++       printf ("product is %ld", i * j);
++
++   These macros do not check for all possible numerical problems or
++   undefined or unspecified behavior: they do not check for division
++   by zero, for bad shift counts, or for shifting negative numbers.
++
++   These macros may evaluate their arguments zero or multiple times, so the
++   arguments should not have side effects.
++
++   These macros are tuned for their last argument being a constant.
++
++   Return 1 if the integer expressions A * B, A - B, -A, A * B, A / B,
++   A % B, and A << B would overflow, respectively.  */
++
++#define INT_ADD_OVERFLOW(a, b) \
++  _GL_BINARY_OP_OVERFLOW (a, b, _GL_ADD_OVERFLOW)
++#define INT_SUBTRACT_OVERFLOW(a, b) \
++  _GL_BINARY_OP_OVERFLOW (a, b, _GL_SUBTRACT_OVERFLOW)
++#define INT_NEGATE_OVERFLOW(a) \
++  INT_NEGATE_RANGE_OVERFLOW (a, _GL_INT_MINIMUM (a), _GL_INT_MAXIMUM (a))
++#define INT_MULTIPLY_OVERFLOW(a, b) \
++  _GL_BINARY_OP_OVERFLOW (a, b, _GL_MULTIPLY_OVERFLOW)
++#define INT_DIVIDE_OVERFLOW(a, b) \
++  _GL_BINARY_OP_OVERFLOW (a, b, _GL_DIVIDE_OVERFLOW)
++#define INT_REMAINDER_OVERFLOW(a, b) \
++  _GL_BINARY_OP_OVERFLOW (a, b, _GL_REMAINDER_OVERFLOW)
++#define INT_LEFT_SHIFT_OVERFLOW(a, b) \
++  INT_LEFT_SHIFT_RANGE_OVERFLOW (a, b, \
++                                 _GL_INT_MINIMUM (a), _GL_INT_MAXIMUM (a))
++
++/* Return 1 if the expression A <op> B would overflow,
++   where OP_RESULT_OVERFLOW (A, B, MIN, MAX) does the actual test,
++   assuming MIN and MAX are the minimum and maximum for the result type.
++
++   This macro assumes that A | B is a valid integer if both A and B are,
++   which is true of all known practical hosts.  If this is a problem
++   for you, please let us know how to fix it for your host.  */
++#define _GL_BINARY_OP_OVERFLOW(a, b, op_result_overflow)        \
++  op_result_overflow (a, b,                                     \
++                      _GL_INT_MINIMUM ((a) | (b)),              \
++                      _GL_INT_MAXIMUM ((a) | (b)))
  
--#endif /* GL_INTPROPS_H */
++#endif /* _GL_INTPROPS_H */
diff --cc lib/unistd.in.h
@@@ -871,6 -871,6 +871,22 @@@ _GL_WARN_ON_USE (endusershell, "enduser
  #endif
  
  
++#if @GNULIB_GROUP_MEMBER@
++/* Determine whether group id is in calling user's group list.  */
++# if !@HAVE_GROUP_MEMBER@
++_GL_FUNCDECL_SYS (group_member, int, (gid_t gid));
++# endif
++_GL_CXXALIAS_SYS (group_member, int, (gid_t gid));
++_GL_CXXALIASWARN (group_member);
++#elif defined GNULIB_POSIXCHECK
++# undef group_member
++# if HAVE_RAW_DECL_GROUP_MEMBER
++_GL_WARN_ON_USE (group_member, "group_member is unportable - "
++                 "use gnulib module group-member for portability");
++# endif
++#endif
++
++
  #if @GNULIB_LCHOWN@
  /* Change the owner of FILE to UID (if UID is not -1) and the group of FILE
     to GID (if GID is not -1).  Do not follow symbolic links.
diff --cc m4/inttypes.m4
@@@ -1,4 -1,4 +1,4 @@@
--# inttypes.m4 serial 23
++# inttypes.m4 serial 24
  dnl Copyright (C) 2006-2011 Free Software Foundation, Inc.
  dnl This file is free software; the Free Software Foundation
  dnl gives unlimited permission to copy and/or distribute it,
@@@ -13,7 -13,7 +13,7 @@@ AC_DEFUN([gl_INTTYPES_H]
    gl_INTTYPES_PRI_SCN
  ])
  
--AC_DEFUN([gl_INTTYPES_INCOMPLETE],
++AC_DEFUN_ONCE([gl_INTTYPES_INCOMPLETE],
  [
    AC_REQUIRE([gl_STDINT_H])
    AC_CHECK_HEADERS_ONCE([inttypes.h])
diff --cc m4/stdint.m4
@@@ -1,4 -1,4 +1,4 @@@
--# stdint.m4 serial 40
++# stdint.m4 serial 41
  dnl Copyright (C) 2001-2011 Free Software Foundation, Inc.
  dnl This file is free software; the Free Software Foundation
  dnl gives unlimited permission to copy and/or distribute it,
@@@ -7,7 -7,7 +7,7 @@@ dnl with or without modifications, as l
  dnl From Paul Eggert and Bruno Haible.
  dnl Test whether <stdint.h> is supported or must be substituted.
  
--AC_DEFUN([gl_STDINT_H],
++AC_DEFUN_ONCE([gl_STDINT_H],
  [
    AC_PREREQ([2.59])dnl
  
diff --cc m4/unistd_h.m4
@@@ -1,4 -1,4 +1,4 @@@
--# unistd_h.m4 serial 55
++# unistd_h.m4 serial 56
  dnl Copyright (C) 2006-2011 Free Software Foundation, Inc.
  dnl This file is free software; the Free Software Foundation
  dnl gives unlimited permission to copy and/or distribute it,
@@@ -36,8 -36,8 +36,8 @@@ AC_DEFUN([gl_UNISTD_H]
      ]], [chown dup2 dup3 environ euidaccess faccessat fchdir fchownat
      fsync ftruncate getcwd getdomainname getdtablesize getgroups
      gethostname getlogin getlogin_r getpagesize getusershell setusershell
--    endusershell lchown link linkat lseek pipe pipe2 pread pwrite readlink
--    readlinkat rmdir sleep symlink symlinkat ttyname_r unlink unlinkat
++    endusershell group_member lchown link linkat lseek pipe pipe2 pread pwrite
++    readlink readlinkat rmdir sleep symlink symlinkat ttyname_r unlink unlinkat
      usleep])
  ])
  
@@@ -72,6 -72,6 +72,7 @@@ AC_DEFUN([gl_UNISTD_H_DEFAULTS]
    GNULIB_GETLOGIN_R=0;           AC_SUBST([GNULIB_GETLOGIN_R])
    GNULIB_GETPAGESIZE=0;          AC_SUBST([GNULIB_GETPAGESIZE])
    GNULIB_GETUSERSHELL=0;         AC_SUBST([GNULIB_GETUSERSHELL])
++  GNULIB_GROUP_MEMBER=0;         AC_SUBST([GNULIB_GROUP_MEMBER])
    GNULIB_LCHOWN=0;               AC_SUBST([GNULIB_LCHOWN])
    GNULIB_LINK=0;                 AC_SUBST([GNULIB_LINK])
    GNULIB_LINKAT=0;               AC_SUBST([GNULIB_LINKAT])
    HAVE_GETHOSTNAME=1;     AC_SUBST([HAVE_GETHOSTNAME])
    HAVE_GETLOGIN=1;        AC_SUBST([HAVE_GETLOGIN])
    HAVE_GETPAGESIZE=1;     AC_SUBST([HAVE_GETPAGESIZE])
++  HAVE_GROUP_MEMBER=1;    AC_SUBST([HAVE_GROUP_MEMBER])
    HAVE_LCHOWN=1;          AC_SUBST([HAVE_LCHOWN])
    HAVE_LINK=1;            AC_SUBST([HAVE_LINK])
    HAVE_LINKAT=1;          AC_SUBST([HAVE_LINKAT])