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:
parent
07e714e14e
commit
4fd297786a
222 changed files with 1717 additions and 806 deletions
|
|
@ -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;
|
||||
}
|
||||
|
||||
{
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue