Paul Eggert [Mon, 20 Feb 2012 00:12:06 +0000 (01:12 +0100)]
acl: Don't use GETACLCNT and similar ops, since they are unreliable.
- There were several instances of this pattern:
for (;;) {
n = acl (f, GETACLCNT, 0, NULL);
[ allocate an array A of size N ]
if (acl (f, GETACL, n, a) == n)
break;
}
This loop might never terminate if some other process is constantly
manipulating the file's ACL. The loop should be rewritten to
terminate.
- The acl (... GETACLNT ...) call is merely an optimization; its value
is merely a hint as to how big to make the array. A better
optimization is to avoid the acl (... GETACLNT ...) call entirely,
and just guess a reasonably-big size, growing the size and trying
again if it's not large enough. This guarantees termination, and
saves a system call.
* lib/acl-internal.h: Include <limits.h>.
(MIN, SIZE_MAX): New macros.
* lib/file-has-acl.c (file_has_acl) [Solaris]: Read the entries into
a stack-allocated buffer, and use malloc if it does not fit. Don't
use GETACLCNT.
* lib/set-mode-acl.c (qset_acl) [Solaris]: Likewise.
Bruno Haible [Sun, 19 Feb 2012 21:17:05 +0000 (22:17 +0100)]
acl: Fix endless loop on Solaris with vxfs.
* lib/file-has-acl.c (file_has_acl) [Solaris]: Treat a failing
acl()/facl() call for ACE_GETACL like a failing call for ACE_GETACLCNT.
* lib/set-mode-acl.c (qset_acl) [Solaris]: Likewise.
* lib/copy-acl.c (qcopy_acl)[Solaris]: Likewise.
* tests/test-sameacls.c (main)[Solaris]: Likewise.
Reported by Bill Jones in
<http://debbugs.gnu.org/cgi/bugreport.cgi?bug=10639>, via Paul Eggert.
Bruno Haible [Sun, 19 Feb 2012 20:59:07 +0000 (21:59 +0100)]
acl: Fix copy-acl test failure on Solaris 11 2011-11.
* lib/file-has-acl.c (NEW_ACE_WRITEA_DATA): New macro.
(acl_ace_nontrivial): Relax the restrictions on access_masks[] so
that this function returns 0 in some more cases.
Bruno Haible [Sun, 19 Feb 2012 14:06:52 +0000 (15:06 +0100)]
Fix test failure in many locales on Solaris 11.
* tests/test-pipe-filter-gi1.c (main): Don't use range expression in
'tr' arguments.
* tests/test-pipe-filter-ii1.c (main): Likewise.
* build-aux/bootstrap (check_versions): Run 'tr' command with range
expressions in the C locale.
* m4/fnmatch.m4 (gl_FUNC_FNMATCH_POSIX): Likewise.
* m4/host-os.m4 (gl_HOST_OS): Likewise.
GNUmakefile: simplify detection of unconfigured trees
* top/GNUmakefile: Use $(wildcard) instead of $(shell) to determine
whether the tree make is being run from is already configured or
not. Related simplifications.
Paul Eggert [Wed, 8 Feb 2012 06:47:01 +0000 (22:47 -0800)]
regex: merge glibc changes
* lib/regcomp.c (init_dfa): Tighten overflow checks to test
for IDX_MAX too, since IDX_MAX can be much less than SIZE_MAX.
(init_word_char): Work even if bitset words are not exactly 32 or
64 bits wide. Don't assume there are no padding bits.
* lib/regex.c [_LIBC]: Do not include <config.h>.
[!_LIBC]: Add pragmas to ignore -Wsuggest-attributes=pure
and -Wtype-limits.
* lib/regex.h (__USE_GNU): Renamed from __USE_GNU_REGEX, to avoid
needless disagreement with glibc. All uses changed. Define it to
1 only if _GNU_SOURCE, to match glibc.
(_REG_RM_NAME): Remove; no longer needed, since the names in
question are now all protected by __USE_GNU.
(_REG_RE_NAME): Remove; replaced by glibc's __REPB_PREFIX.
(REG_TRANSLATE_TYPE): Remove; replaced by glibc's __RE_TRANSLATE_TYPE.
* lib/regex_internal.h (MIN): New macro.
2011-12-30 Jakub Jelinek <jakub@redhat.com>
* lib/regex_internal.c (re_string_fetch_byte_case):
Fix up regcomp/regexec. The problem is that parse_bracket_symbol
is miscompiled, and it turns out it is because of an incorrect
attribute on re_string_fetch_byte_case. Unlike
re_string_peek_byte_case, this one is really not pure, it modifies
memory (increments pstr->cur_idx), and with the pure attribute GCC
assumed it doesn't and it cached the presumed value of
regexp->cur_idx in a variable across the
for (;; ++i)
{
if (i >= BRACKET_NAME_BUF_SIZE)
return REG_EBRACK;
if (token->type == OP_OPEN_CHAR_CLASS)
ch = re_string_fetch_byte_case (regexp);
else
ch = re_string_fetch_byte (regexp);
if (re_string_eoi(regexp))
return REG_EBRACK;
if (ch == delim && re_string_peek_byte (regexp, 0) == ']')
break;
elem->opr.name[i] = ch;
}
2011-11-29 Andreas Schwab <schwab@redhat.com>
* lib/regcomp.c (build_equiv_class):
Fix access after end of search string in regex matcher.
2011-10-12 Ulrich Drepper <drepper@redhat.com>
* lib/regcomp.c (parse_branch): One more regex memory leak fixed.
2011-10-11 Ulrich Drepper <drepper@redhat.com>
* lib/regcomp.c (parse_branch, parse_sub_exp):
More regex memory leak fixes and tests.
(parse_sub_exp, parse_bracket_exp):
Fix memory leak for some invalid regular expressions.
2011-05-28 Ulrich Drepper <drepper@gmail.com>
* lib/regex_internal.c, lib/regexec.c:
Fix unnecessary overallocation due to incomplete character. When
incomplete characters are found at the end of a string the code
ran amok and allocated lots of memory. Stricter limits are now in
place.
2011-05-20 Reuben Thomas <rrt@sc3d.org>
* lib/regex.h: Update documentation.
2010-05-05 Andreas Schwab <schwab@redhat.com>
* lib/regexec.c (find_collation_sequence_value):
Fix lookup of collation sequence value during regexp matching.
2007-11-26 Ulrich Drepper <drepper@redhat.com>
* lib/regex.h (REG_ENOSYS): Define REG_ENOSYS also for __USE_XOPEN2K.
2007-08-26 Ulrich Drepper <drepper@redhat.com>
* lib/regex_internal.h: Prevent some declarations and definitions
to be seen when used in tests.
2005-05-06 Ulrich Drepper <drepper@redhat.com>
* lib/regex_internal.h: Include bits/libc-lock.h or define dummy
__libc_lock_* macros if not _LIBC.
(struct re_dfa_t): Add lock.
Eric Blake [Sat, 4 Feb 2012 18:11:40 +0000 (11:11 -0700)]
canonicalize: avoid uninitialized memory use
When DOUBLE_SLASH_IS_DISTINCT_ROOT is non-zero, then we were
reading the contents of rpath[1] even when we had never written
anything there, which meant that "///" would usually canonicalize
to "/" but sometimes to "//" if a '/' was leftover in the heap.
This condition could also occur via 'ln -s / //some/path' and
canonicalizing //some/path, where we rewind rpath but do not
clear out the previous round. Platforms where "//" and "/" are
equivalent do not suffer from this read-beyond-written bounds.
* lib/canonicalize-lgpl.c (__realpath): Avoid possibility of
random '/' left in dest.
* lib/canonicalize.c (canonicalize_filename_mode): Likewise.
Bruno Haible [Sat, 4 Feb 2012 18:13:34 +0000 (19:13 +0100)]
isatty: Fix test failure of ptsname_r on native Windows.
* lib/isatty.c (_isatty_nothrow): Upon exception, return 0, not -1,
and don't set errno.
(isatty): Test first whether fd is valid. Set errno when returning 0.
Eric Blake [Sat, 4 Feb 2012 16:46:32 +0000 (09:46 -0700)]
canonicalize: fix // handling
On Cygwin, and other platforms where // is detected as distinct
from / at configure time, the canonicalize routines were incorrectly
treating all instances of multiple leading slashes as //.
See also coreutils bug http://debbugs.gnu.org/10472
* lib/canonicalize.c (canonicalize_filename_mode): Don't convert
/// to //, since only // is special.
Bruno Haible [Sat, 4 Feb 2012 11:59:00 +0000 (12:59 +0100)]
get-rusage-as, get-rusage-data tests: Avoid test failure with gcc-4.7.
* tests/test-get-rusage-as.c (main): Assign the malloc() results to
global variables.
* tests/test-get-rusage-data.c (main): Likewise.
Reported by Jim Meyering.
Jim Meyering [Thu, 2 Feb 2012 08:12:13 +0000 (09:12 +0100)]
file-has-acl: suppress a warning from gcc -Wsuggest-attribute=const
* lib/file-has-acl.c (file_has_acl): This function (for some #ifdefs)
would evoke a new gcc warning. Given all of the #ifdefs, it is better
not even to try to add the attribute. Instead, add a pragma to suppress
the suggestion/warning.
Bruno Haible [Tue, 31 Jan 2012 11:15:46 +0000 (12:15 +0100)]
popen: Make more robust on Windows.
* lib/popen.c: On native Windows, use the _popen based code even if
HAVE_POPEN is set.
* doc/posix-functions/popen.texi: Mention necessity of COMSPEC
environment variable on native Windows.
Bruno Haible [Mon, 30 Jan 2012 21:47:22 +0000 (22:47 +0100)]
doc about getlogin_r, setstate.
* doc/posix-functions/getlogin_r.texi: List the incompatible
declaration problem under "not fixed by gnulib".
* doc/posix-functions/setstate.texi: Mention incompatible declaration
problem on Solaris 11 and other platforms.
Chuanchang Jia [Mon, 30 Jan 2012 21:39:01 +0000 (22:39 +0100)]
poll tests: Make test more robust.
* tests/test-poll.c: Include macros.h.
(test_accept_first, test_pair, test_socket_pair, test_pipe): Verify
return value of various I/O operations.
* modules/poll-tests (Files): Add tests/macros.h.
Bruno Haible [Mon, 30 Jan 2012 20:43:40 +0000 (21:43 +0100)]
sys_stat: Fix support for mingw64 and MSVC.
* lib/sys_stat.in.h (stat) [AIX]: Don't redefine 'stat' if the system
header files already do it.
(stat) [mingw, msvc]: Redefine the symbol to which stat is defined, not
stat itself.
Reported by Marc-André Lureau <marcandre.lureau@redhat.com>.
Bruno Haible [Mon, 30 Jan 2012 19:32:33 +0000 (20:32 +0100)]
quotearg: Fix test failure on MacOS X 10.5.
* tests/test-quotearg-simple.c: Include localcharset.h.
(main): If the locale encoding is not ASCII, bypass the tests of
locale_quoting_style and clocale_quoting_style.
* modules/quotearg-tests (Depends-on): Add 'localcharset'.
Bruno Haible [Sat, 28 Jan 2012 22:29:16 +0000 (23:29 +0100)]
test-framework-sh: Fix test failure with AIX 7.1 diff.
* tests/init.sh (compare_): Don't use 'diff -u' if it inserts a space
in column 1, like 'diff -c' does.
* tests/test-init.sh (test_compare): Don't repeat the test from init.sh
whether 'diff -u' is used. Instead, test whether the output contains
some '@' character.
Paul Eggert [Sat, 28 Jan 2012 21:31:06 +0000 (13:31 -0800)]
strtoimax: eliminate need for stdint.h, inttypes.h checks
* m4/strtoimax.m4 (gl_FUNC_STRTOIMAX): Don't use
gl_AC_HEADER_STDINT_H or gl_AC_HEADER_INTTYPES_H. This reduces
the prerequisites for a recently-introduced strtoimax test.
I guess this might cause strtoimax to be replaced when not
strictly necessary on older hosts, but this shouldn't introduce
any bugs and it should make Emacs 'configure' faster on typical
modern hosts. Problem discovered when importing the latest gnulib
to an Emacs test version.
* modules/strtoimax (Files): Remove m4/stdint_h.m4, m4/inttypes_h.m4.
Bruno Haible [Sat, 28 Jan 2012 17:12:10 +0000 (18:12 +0100)]
sys_time: Override 'struct timeval' on some native Windows platforms.
* m4/sys_time_h.m4 (gl_HEADER_SYS_TIME_H_BODY): Test whether tv_sec
has the right type. Set REPLACE_STRUCT_TIMEVAL if not.
(gl_HEADER_SYS_TIME_H_DEFAULTS): Initialize REPLACE_STRUCT_TIMEVAL.
* lib/sys_time.in.h: Include <winsock2.h> also when 'struct timeval'
needs to be overridden.
(timeval): Override if REPLACE_STRUCT_TIMEVAL is set.
* modules/sys_time (Makefile.am): Substitute REPLACE_STRUCT_TIMEVAL.
* tests/test-sys_select.c: Check that the tv_sec member has the same
size as a 'time_t'.
* tests/test-sys_time.c: Likewise.
* m4/gettimeofday.m4 (gl_FUNC_GETTIMEOFDAY): If REPLACE_STRUCT_TIMEVAL
is set, set also REPLACE_GETTIMEOFDAY.
* lib/gettimeofday.c (gettimeofday): If 'struct timeval' is overridden,
convert the resulting 'struct timeval' before returning.
* lib/select.c: Include <sys/time.h>.
(select, timeval): Undefine at the right place.
* modules/select (Depends-on): Add sys_time.
* doc/posix-headers/sys_time.texi: Mention the problem with tv_sec on
some Windows platforms.
Reported by Marc-André Lureau <marcandre.lureau@redhat.com>.
accept4, fcntl, socket modules: Avoid warnings on x86_64 mingw64.
* lib/accept4.c (accept4): Use intptr_t to convert handle pointer to
an integer.
* lib/fcntl.c (dupfd): Likewise.
* lib/w32sock.h (SOCKET_TO_FD): Likewise.
select, poll, isatty: Avoid warnings on x86_64 mingw64.
* lib/select.c (IsConsoleHandle): Use intptr_t to convert handle
pointer to an integer.
* lib/poll.c (IsConsoleHandle): Likewise.
* lib/isatty.c (IsConsoleHandle): Likewise.
Jim Meyering [Sat, 28 Jan 2012 09:49:35 +0000 (10:49 +0100)]
doc: clarify README-release
* top/README-release: Clarify: you should make a point to have
the latest stable versions of build tools in your PATH, and the
reference to buildreq is solely for its list of tool names, not
for its minimal-functional version numbers.
Prompted by discussion with Reuben Thomas and Gary V. Vaughan.
Jim Meyering [Sat, 28 Jan 2012 09:16:25 +0000 (10:16 +0100)]
maint.mk: use more readable (yet functionally equivalent) quoting
It is common to quote a single quote in a single quoted string like
this: '...'\''...'. Unless you know the idiom, that looks like
gibberish, so prefer to double-quote the string when possible.
Then you can use a more readable, lone single quote: "...'..."
* top/maint.mk (sc_cast_of_argument_to_free): Quoting like this
"don't" is more readable than the equivalent 'don'\''t'.
(sc_cast_of_x_alloc_return_value): Likewise.
(sc_cast_of_alloca_return_value): Likewise.
(sc_makefile_path_separator_check): Similar: use ":" in '...',
rather than '\'':'\''.
Paul Eggert [Sat, 28 Jan 2012 06:17:42 +0000 (22:17 -0800)]
stdalign: relax _Alignof and tighten _Alignas test
* m4/stdalign.m4 (gl_STDALIGN_H): Relax the _Alignof test,
as it was too strict: alignof must divide offsetof, but it need
not equal offsetof. Inspired by Joseph S. Myers's comment
<http://gcc.gnu.org/bugzilla/show_bug.cgi?id=52023#c10>.
Conversely, tighten the _Alignas test a bit, as the resulting
alignment must be exactly 8.
Paul Eggert [Fri, 27 Jan 2012 18:17:18 +0000 (10:17 -0800)]
stdalign: check that alignof and offsetof are consistent
* m4/stdalign.m4 (gl_STDALIGN_H): Check for GCC bug 52023.
Problem reported for gnulib by Richard W.M. Jones in
<http://lists.gnu.org/archive/html/bug-gnulib/2012-01/msg00340.html>.
Jim Meyering [Fri, 27 Jan 2012 09:19:26 +0000 (10:19 +0100)]
update-copyright: accept new option: UPDATE_COPYRIGHT_USE_INTERVALS=2
* build-aux/update-copyright: When UPDATE_COPYRIGHT_USE_INTERVALS=2,
convert a sequence with gaps to the minimal containing range.
For example, convert 2000, 2004-2007, 2009 to 2000-2009.
* tests/test-update-copyright.sh: Test for this.
The FSF confirmed it is ok to do this, assuming there is at
least one significant change per year in the affected range:
http://thread.gmane.org/gmane.comp.lib.gnulib.bugs/29554/focus=29860
Eric Blake [Thu, 26 Jan 2012 15:31:48 +0000 (08:31 -0700)]
pipe2, assign4: document lack of thread-safety in replacement
* doc/glibc-functions/pipe2.texi (pipe2): Mention thread safety
issue in replacement.
* doc/glibc-functions/accept4.texi (accept4): Likewise.
Based on a report by Eric Wong.
Paul Eggert [Wed, 25 Jan 2012 19:08:01 +0000 (11:08 -0800)]
obstack: remove __STDC__ conditionals
* lib/obstack.h: Remove __STDC__ conditionals, as suggested by Joseph
S. Myers in <http://cygwin.com/ml/libc-alpha/2012-01/msg00104.html>.
This leaves lib/localcharset.c, m4/iconv.m4, and a confusing comment in
m4/include_next.m4 as the only gnulib-maintained places that still
refer to __STDC__.
Paul Eggert [Tue, 17 Jan 2012 23:48:12 +0000 (15:48 -0800)]
doc: omit trailing empty lines from INSTALL etc.
* doc/Makefile (INSTALL): Omit trailing empty lines.
(INSTALL.ISO, INSTALL.UTF-8): Build from INSTALL, so that these also
omit trailing empty lines. This simplifies the build procedure.
Jim Meyering [Sat, 21 Jan 2012 17:12:30 +0000 (18:12 +0100)]
bootstrap: fail when bootstrap_post_import_hook fails
Otherwise, it's far too easy to miss diagnostics emitted
between gnulib-tool's output and that of running configure.
* build-aux/bootstrap: Fail when bootstrap_post_import_hook fails.
Jim Meyering [Tue, 17 Jan 2012 17:10:01 +0000 (18:10 +0100)]
maint: enable sc_prohibit_hash_pjw_without_use
* cfg.mk: Enable sc_prohibit_hash_pjw_without_use.
* top/maint.mk (sc_prohibit_hash_pjw_without_use): Adjust regexp
to match any use of \<hash_pjw\>, i.e., not necessarily with a
following " (".
Jim Meyering [Thu, 19 Jan 2012 05:14:31 +0000 (06:14 +0100)]
bootstrap: add bootstrap_post_import_hook
Bison does still need something like the gnulib_mk_hook whose
invocation I had to remove along with slurp in commit 767ccd40.
Technically, we could get along without it, but doing so would
have required living with a warning and a mandatory post-bootstrap
automake rerun.
* build-aux/bootstrap (gnulib_mk_hook): Remove definition, too.
(bootstrap_post_import_hook): New function.
Invoke it after gnulib-tool --import and before autoreconf.
Jim Meyering [Wed, 18 Jan 2012 07:53:23 +0000 (08:53 +0100)]
gitlog-to-changelog: don't use "no_"-prefixed variable name
* build-aux/gitlog-to-changelog (main): Use getopt's "!" attribute
to enable both --cluster and --no-cluster. Change variable name,
s/\$no_cluster/$cluster/, and reverse usage to match.