gnulib: update to 405cd675384221b541b460c43de26d159914fe0a

This also include my patch to lib/argp.hh for C++ compilation.

* lib/Makefile.am, lib/alloca.in.h, lib/argmatch.c, lib/argmatch.h,
lib/argp-ba.c, lib/argp-eexst.c, lib/argp-fmtstream.c,
lib/argp-fmtstream.h, lib/argp-fs-xinl.c, lib/argp-help.c,
lib/argp-namefrob.h, lib/argp-parse.c, lib/argp-pin.c, lib/argp-pv.c,
lib/argp-pvh.c, lib/argp-xinl.c, lib/argp.h, lib/asnprintf.c,
lib/basename-lgpl.c, lib/c-ctype.h, lib/c-strcase.h,
lib/c-strcasecmp.c, lib/c-strcaseeq.h, lib/c-strncasecmp.c,
lib/config.charset, lib/dirname-lgpl.c, lib/dirname.h, lib/dosname.h,
lib/errno.in.h, lib/error.c, lib/error.h, lib/exitfail.c,
lib/exitfail.h, lib/fcntl.in.h, lib/float+.h, lib/float.c,
lib/float.in.h, lib/getopt.c, lib/getopt.in.h, lib/getopt1.c,
lib/getopt_int.h, lib/gettext.h, lib/gettimeofday.c,
lib/hard-locale.c, lib/hard-locale.h, lib/intprops.h, lib/isatty.c,
lib/itold.c, lib/localcharset.c, lib/localcharset.h, lib/lstat.c,
lib/malloc.c, lib/mbrtowc.c, lib/mbsinit.c, lib/memchr.c,
lib/mempcpy.c, lib/mkstemp.c, lib/mkstemps.c, lib/msvc-inval.c,
lib/msvc-inval.h, lib/msvc-nothrow.c, lib/msvc-nothrow.h,
lib/pathmax.h, lib/printf-args.c, lib/printf-args.h,
lib/printf-parse.c, lib/printf-parse.h, lib/progname.c,
lib/progname.h, lib/quote.h, lib/quotearg.c, lib/quotearg.h,
lib/rawmemchr.c, lib/ref-add.sin, lib/ref-del.sin,
lib/secure_getenv.c, lib/size_max.h, lib/sleep.c, lib/stat.c,
lib/stdalign.in.h, lib/stdbool.in.h, lib/stddef.in.h, lib/stdint.in.h,
lib/stdio.in.h, lib/stdlib.in.h, lib/stpcpy.c, lib/strcasecmp.c,
lib/strchrnul.c, lib/streq.h, lib/strerror-override.c,
lib/strerror-override.h, lib/strerror.c, lib/string.in.h,
lib/strings.in.h, lib/stripslash.c, lib/strncasecmp.c, lib/strndup.c,
lib/strnlen.c, lib/strverscmp.c, lib/sys_stat.in.h, lib/sys_time.in.h,
lib/sys_types.in.h, lib/sys_wait.in.h, lib/sysexits.in.h,
lib/tempname.c, lib/tempname.h, lib/time.in.h, lib/unistd.in.h,
lib/vasnprintf.c, lib/vasnprintf.h, lib/verify.h, lib/vsnprintf.c,
lib/wchar.in.h, lib/wctype.in.h, lib/xalloc-die.c,
lib/xalloc-oversized.h, lib/xalloc.h, lib/xmalloc.c, lib/xsize.h,
m4/00gnulib.m4, m4/absolute-header.m4, m4/alloca.m4, m4/argp.m4,
m4/configmake.m4, m4/dirname.m4, m4/double-slash-root.m4,
m4/errno_h.m4, m4/error.m4, m4/exponentd.m4, m4/extensions.m4,
m4/extern-inline.m4, m4/fcntl-o.m4, m4/fcntl_h.m4, m4/float_h.m4,
m4/getopt.m4, m4/gettimeofday.m4, m4/glibc21.m4, m4/gnulib-cache.m4,
m4/gnulib-common.m4, m4/gnulib-comp.m4, m4/gnulib-tool.m4,
m4/hard-locale.m4, m4/include_next.m4, m4/intmax_t.m4,
m4/inttypes_h.m4, m4/isatty.m4, m4/largefile.m4, m4/localcharset.m4,
m4/locale-fr.m4, m4/locale-ja.m4, m4/locale-zh.m4, m4/longlong.m4,
m4/lstat.m4, m4/malloc.m4, m4/math_h.m4, m4/mbrtowc.m4, m4/mbsinit.m4,
m4/mbstate_t.m4, m4/memchr.m4, m4/mempcpy.m4, m4/mkstemp.m4,
m4/mkstemps.m4, m4/mmap-anon.m4, m4/msvc-inval.m4, m4/msvc-nothrow.m4,
m4/multiarch.m4, m4/nocrash.m4, m4/off_t.m4, m4/pathmax.m4,
m4/printf.m4, m4/quote.m4, m4/quotearg.m4, m4/rawmemchr.m4,
m4/secure_getenv.m4, m4/size_max.m4, m4/sleep.m4, m4/ssize_t.m4,
m4/stat.m4, m4/stdalign.m4, m4/stdbool.m4, m4/stddef_h.m4,
m4/stdint.m4, m4/stdint_h.m4, m4/stdio_h.m4, m4/stdlib_h.m4,
m4/stpcpy.m4, m4/strcase.m4, m4/strchrnul.m4, m4/strerror.m4,
m4/string_h.m4, m4/strings_h.m4, m4/strndup.m4, m4/strnlen.m4,
m4/strverscmp.m4, m4/sys_socket_h.m4, m4/sys_stat_h.m4,
m4/sys_time_h.m4, m4/sys_types_h.m4, m4/sys_wait_h.m4, m4/sysexits.m4,
m4/tempname.m4, m4/time_h.m4, m4/unistd_h.m4, m4/vasnprintf.m4,
m4/vsnprintf.m4, m4/warn-on-use.m4, m4/wchar_h.m4, m4/wchar_t.m4,
m4/wctype_h.m4, m4/wint_t.m4, m4/xalloc.m4, m4/xsize.m4,
tools/snippet/arg-nonnull.h, tools/snippet/c++defs.h,
tools/snippet/warn-on-use.h: Update.
* lib/getprogname.c, lib/getprogname.h, lib/limits.in.h, lib/minmax.h,
m4/getprogname.m4, m4/limits-h.m4, m4/minmax.m4: New files.
This commit is contained in:
Alexandre Duret-Lutz 2017-03-09 16:27:15 +01:00
parent 07e714e14e
commit 4fd297786a
222 changed files with 1717 additions and 806 deletions

View file

@ -1,6 +1,6 @@
/* quotearg.c - quote arguments for output
Copyright (C) 1998-2002, 2004-2016 Free Software Foundation, Inc.
Copyright (C) 1998-2002, 2004-2017 Free Software Foundation, Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@ -29,6 +29,7 @@
#include "quotearg.h"
#include "quote.h"
#include "minmax.h"
#include "xalloc.h"
#include "c-strcaseeq.h"
#include "localcharset.h"
@ -37,6 +38,7 @@
#include <errno.h>
#include <limits.h>
#include <stdbool.h>
#include <stdint.h>
#include <stdlib.h>
#include <string.h>
#include <wchar.h>
@ -252,12 +254,15 @@ quotearg_buffer_restyled (char *buffer, size_t buffersize,
{
size_t i;
size_t len = 0;
size_t orig_buffersize = 0;
char const *quote_string = 0;
size_t quote_string_len = 0;
bool backslash_escapes = false;
bool unibyte_locale = MB_CUR_MAX == 1;
bool elide_outer_quotes = (flags & QA_ELIDE_OUTER_QUOTES) != 0;
bool pending_shell_escape_end = false;
bool encountered_single_quote = false;
bool all_c_and_shell_quote_compat = true;
#define STORE(c) \
do \
@ -298,6 +303,8 @@ quotearg_buffer_restyled (char *buffer, size_t buffersize,
} \
while (0)
process_input:
switch (quoting_style)
{
case c_maybe_quoting_style:
@ -388,6 +395,7 @@ quotearg_buffer_restyled (char *buffer, size_t buffersize,
unsigned char esc;
bool is_right_quote = false;
bool escaping = false;
bool c_and_shell_quote_compat = false;
if (backslash_escapes
&& quoting_style != shell_always_quoting_style
@ -515,6 +523,8 @@ quotearg_buffer_restyled (char *buffer, size_t buffersize,
break;
/* Fall through. */
case ' ':
c_and_shell_quote_compat = true;
/* Fall through. */
case '!': /* special in bash */
case '"': case '$': case '&':
case '(': case ')': case '*': case ';':
@ -533,10 +543,22 @@ quotearg_buffer_restyled (char *buffer, size_t buffersize,
break;
case '\'':
encountered_single_quote = true;
c_and_shell_quote_compat = true;
if (quoting_style == shell_always_quoting_style)
{
if (elide_outer_quotes)
goto force_outer_quoting_style;
if (buffersize && ! orig_buffersize)
{
/* Just scan string to see if supports a more concise
representation, rather than writing a longer string
but returning the length of the more concise form. */
orig_buffersize = buffersize;
buffersize = 0;
}
STORE ('\'');
STORE ('\\');
STORE ('\'');
@ -566,6 +588,7 @@ quotearg_buffer_restyled (char *buffer, size_t buffersize,
them. Also, a digit or a special letter would cause
trouble if it appeared in quote_these_too, but that's also
documented as not accepting them. */
c_and_shell_quote_compat = true;
break;
default:
@ -644,6 +667,8 @@ quotearg_buffer_restyled (char *buffer, size_t buffersize,
while (! mbsinit (&mbstate));
}
c_and_shell_quote_compat = printable;
if (1 < m || (backslash_escapes && ! printable))
{
/* Output a multibyte sequence, or an escaped
@ -689,12 +714,36 @@ quotearg_buffer_restyled (char *buffer, size_t buffersize,
store_c:
END_ESC ();
STORE (c);
if (! c_and_shell_quote_compat)
all_c_and_shell_quote_compat = false;
}
if (len == 0 && quoting_style == shell_always_quoting_style
&& elide_outer_quotes)
goto force_outer_quoting_style;
/* Single shell quotes (') are commonly enough used as an apostrophe,
that we attempt to minimize the quoting in this case. Note itʼs
better to use the apostrophe modifier "\u02BC" if possible, as that
renders better and works with the word match regex \W+ etc. */
if (quoting_style == shell_always_quoting_style && ! elide_outer_quotes
&& encountered_single_quote)
{
if (all_c_and_shell_quote_compat)
return quotearg_buffer_restyled (buffer, orig_buffersize, arg, argsize,
c_quoting_style,
flags, quote_these_too,
left_quote, right_quote);
else if (! buffersize && orig_buffersize)
{
/* Disable read-only scan, and reprocess to write quoted string. */
buffersize = orig_buffersize;
len = 0;
goto process_input;
}
}
if (quote_string && !elide_outer_quotes)
for (; *quote_string; quote_string++)
STORE (*quote_string);
@ -783,7 +832,7 @@ struct slotvec
/* Preallocate a slot 0 buffer, so that the caller can always quote
one small component of a "memory exhausted" message in slot 0. */
static char slot0[256];
static unsigned int nslots = 1;
static int nslots = 1;
static struct slotvec slotvec0 = {sizeof slot0, slot0};
static struct slotvec *slotvec = &slotvec0;
@ -791,7 +840,7 @@ void
quotearg_free (void)
{
struct slotvec *sv = slotvec;
unsigned int i;
int i;
for (i = 1; i < nslots; i++)
free (sv[i].val);
if (sv[0].val != slot0)
@ -822,30 +871,23 @@ quotearg_n_options (int n, char const *arg, size_t argsize,
{
int e = errno;
unsigned int n0 = n;
struct slotvec *sv = slotvec;
if (n < 0)
abort ();
if (nslots <= n0)
if (nslots <= n)
{
/* FIXME: technically, the type of n1 should be 'unsigned int',
but that evokes an unsuppressible warning from gcc-4.0.1 and
older. If gcc ever provides an option to suppress that warning,
revert to the original type, so that the test in xalloc_oversized
is once again performed only at compile time. */
size_t n1 = n0 + 1;
bool preallocated = (sv == &slotvec0);
if (xalloc_oversized (n1, sizeof *sv))
if (MIN (INT_MAX, MIN (PTRDIFF_MAX, SIZE_MAX) / sizeof *sv) <= n)
xalloc_die ();
slotvec = sv = xrealloc (preallocated ? NULL : sv, n1 * sizeof *sv);
slotvec = sv = xrealloc (preallocated ? NULL : sv, (n + 1) * sizeof *sv);
if (preallocated)
*sv = slotvec0;
memset (sv + nslots, 0, (n1 - nslots) * sizeof *sv);
nslots = n1;
memset (sv + nslots, 0, (n + 1 - nslots) * sizeof *sv);
nslots = n + 1;
}
{