mirror of
https://git.savannah.gnu.org/git/bison.git
synced 2026-03-21 18:23:03 +00:00
Sync with GNU tar.
This commit is contained in:
@@ -1,5 +1,5 @@
|
|||||||
/* argmatch.c -- find a match for a string in an array
|
/* argmatch.c -- find a match for a string in an array
|
||||||
Copyright (C) 1990, 1998, 1999 Free Software Foundation, Inc.
|
Copyright (C) 1990, 1998, 1999, 2001 Free Software Foundation, Inc.
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
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
|
it under the terms of the GNU General Public License as published by
|
||||||
@@ -22,6 +22,7 @@
|
|||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#ifdef STDC_HEADERS
|
#ifdef STDC_HEADERS
|
||||||
|
# include <stdlib.h>
|
||||||
# include <string.h>
|
# include <string.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -38,6 +39,7 @@
|
|||||||
|
|
||||||
#include "error.h"
|
#include "error.h"
|
||||||
#include "quotearg.h"
|
#include "quotearg.h"
|
||||||
|
#include "quote.h"
|
||||||
|
|
||||||
/* When reporting an invalid argument, show nonprinting characters
|
/* When reporting an invalid argument, show nonprinting characters
|
||||||
by using the quoting style ARGMATCH_QUOTING_STYLE. Do not use
|
by using the quoting style ARGMATCH_QUOTING_STYLE. Do not use
|
||||||
@@ -156,10 +158,11 @@ void
|
|||||||
argmatch_invalid (const char *context, const char *value, int problem)
|
argmatch_invalid (const char *context, const char *value, int problem)
|
||||||
{
|
{
|
||||||
char const *format = (problem == -1
|
char const *format = (problem == -1
|
||||||
? _("invalid argument %s for `%s'")
|
? _("invalid argument %s for %s")
|
||||||
: _("ambiguous argument %s for `%s'"));
|
: _("ambiguous argument %s for %s"));
|
||||||
|
|
||||||
error (0, 0, format, quotearg_style (ARGMATCH_QUOTING_STYLE, value), context);
|
error (0, 0, format, quotearg_n_style (0, ARGMATCH_QUOTING_STYLE, value),
|
||||||
|
quote_n (1, context));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* List the valid arguments for argmatch.
|
/* List the valid arguments for argmatch.
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/* quotearg.c - quote arguments for output
|
/* quotearg.c - quote arguments for output
|
||||||
Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
|
Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
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
|
it under the terms of the GNU General Public License as published by
|
||||||
@@ -305,6 +305,16 @@ quotearg_buffer_restyled (char *buffer, size_t buffersize,
|
|||||||
c = arg[i];
|
c = arg[i];
|
||||||
switch (c)
|
switch (c)
|
||||||
{
|
{
|
||||||
|
case '\0':
|
||||||
|
if (backslash_escapes)
|
||||||
|
{
|
||||||
|
STORE ('\\');
|
||||||
|
STORE ('0');
|
||||||
|
STORE ('0');
|
||||||
|
c = '0';
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
case '?':
|
case '?':
|
||||||
switch (quoting_style)
|
switch (quoting_style)
|
||||||
{
|
{
|
||||||
@@ -531,14 +541,15 @@ quotearg_buffer (char *buffer, size_t buffersize,
|
|||||||
p->style, p);
|
p->style, p);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Use storage slot N to return a quoted version of the string ARG.
|
/* Use storage slot N to return a quoted version of argument ARG.
|
||||||
|
ARG is of size ARGSIZE, but if that is -1, ARG is a null-terminated string.
|
||||||
OPTIONS specifies the quoting options.
|
OPTIONS specifies the quoting options.
|
||||||
The returned value points to static storage that can be
|
The returned value points to static storage that can be
|
||||||
reused by the next call to this function with the same value of N.
|
reused by the next call to this function with the same value of N.
|
||||||
N must be nonnegative. N is deliberately declared with type "int"
|
N must be nonnegative. N is deliberately declared with type "int"
|
||||||
to allow for future extensions (using negative values). */
|
to allow for future extensions (using negative values). */
|
||||||
static char *
|
static char *
|
||||||
quotearg_n_options (int n, char const *arg,
|
quotearg_n_options (int n, char const *arg, size_t argsize,
|
||||||
struct quoting_options const *options)
|
struct quoting_options const *options)
|
||||||
{
|
{
|
||||||
/* Preallocate a slot 0 buffer, so that the caller can always quote
|
/* Preallocate a slot 0 buffer, so that the caller can always quote
|
||||||
@@ -579,13 +590,13 @@ quotearg_n_options (int n, char const *arg,
|
|||||||
{
|
{
|
||||||
size_t size = slotvec[n].size;
|
size_t size = slotvec[n].size;
|
||||||
char *val = slotvec[n].val;
|
char *val = slotvec[n].val;
|
||||||
size_t qsize = quotearg_buffer (val, size, arg, (size_t) -1, options);
|
size_t qsize = quotearg_buffer (val, size, arg, argsize, options);
|
||||||
|
|
||||||
if (size <= qsize)
|
if (size <= qsize)
|
||||||
{
|
{
|
||||||
slotvec[n].size = size = qsize + 1;
|
slotvec[n].size = size = qsize + 1;
|
||||||
slotvec[n].val = val = xrealloc (val == slot0 ? 0 : val, size);
|
slotvec[n].val = val = xrealloc (val == slot0 ? 0 : val, size);
|
||||||
quotearg_buffer (val, size, arg, (size_t) -1, options);
|
quotearg_buffer (val, size, arg, argsize, options);
|
||||||
}
|
}
|
||||||
|
|
||||||
return val;
|
return val;
|
||||||
@@ -595,7 +606,7 @@ quotearg_n_options (int n, char const *arg,
|
|||||||
char *
|
char *
|
||||||
quotearg_n (int n, char const *arg)
|
quotearg_n (int n, char const *arg)
|
||||||
{
|
{
|
||||||
return quotearg_n_options (n, arg, &default_quoting_options);
|
return quotearg_n_options (n, arg, (size_t) -1, &default_quoting_options);
|
||||||
}
|
}
|
||||||
|
|
||||||
char *
|
char *
|
||||||
@@ -604,13 +615,29 @@ quotearg (char const *arg)
|
|||||||
return quotearg_n (0, arg);
|
return quotearg_n (0, arg);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Return quoting options for STYLE, with no extra quoting. */
|
||||||
|
static struct quoting_options
|
||||||
|
quoting_options_from_style (enum quoting_style style)
|
||||||
|
{
|
||||||
|
struct quoting_options o;
|
||||||
|
o.style = style;
|
||||||
|
memset (o.quote_these_too, 0, sizeof o.quote_these_too);
|
||||||
|
return o;
|
||||||
|
}
|
||||||
|
|
||||||
char *
|
char *
|
||||||
quotearg_n_style (int n, enum quoting_style s, char const *arg)
|
quotearg_n_style (int n, enum quoting_style s, char const *arg)
|
||||||
{
|
{
|
||||||
struct quoting_options o;
|
struct quoting_options const o = quoting_options_from_style (s);
|
||||||
o.style = s;
|
return quotearg_n_options (n, arg, (size_t) -1, &o);
|
||||||
memset (o.quote_these_too, 0, sizeof o.quote_these_too);
|
}
|
||||||
return quotearg_n_options (n, arg, &o);
|
|
||||||
|
char *
|
||||||
|
quotearg_n_style_mem (int n, enum quoting_style s,
|
||||||
|
char const *arg, size_t argsize)
|
||||||
|
{
|
||||||
|
struct quoting_options const o = quoting_options_from_style (s);
|
||||||
|
return quotearg_n_options (n, arg, argsize, &o);
|
||||||
}
|
}
|
||||||
|
|
||||||
char *
|
char *
|
||||||
@@ -625,7 +652,7 @@ quotearg_char (char const *arg, char ch)
|
|||||||
struct quoting_options options;
|
struct quoting_options options;
|
||||||
options = default_quoting_options;
|
options = default_quoting_options;
|
||||||
set_char_quoting (&options, ch, 1);
|
set_char_quoting (&options, ch, 1);
|
||||||
return quotearg_n_options (0, arg, &options);
|
return quotearg_n_options (0, arg, (size_t) -1, &options);
|
||||||
}
|
}
|
||||||
|
|
||||||
char *
|
char *
|
||||||
|
|||||||
@@ -104,6 +104,12 @@ char *quotearg PARAMS ((char const *arg));
|
|||||||
options to specify the quoting method. */
|
options to specify the quoting method. */
|
||||||
char *quotearg_n_style PARAMS ((int n, enum quoting_style s, char const *arg));
|
char *quotearg_n_style PARAMS ((int n, enum quoting_style s, char const *arg));
|
||||||
|
|
||||||
|
/* Use style S and storage slot N to return a quoted version of the
|
||||||
|
argument ARG of size ARGSIZE. This is like quotearg_n_style
|
||||||
|
(N, S, ARG), except it can quote null bytes. */
|
||||||
|
char *quotearg_n_style_mem PARAMS ((int n, enum quoting_style s,
|
||||||
|
char const *arg, size_t argsize));
|
||||||
|
|
||||||
/* Equivalent to quotearg_n_style (0, S, ARG). */
|
/* Equivalent to quotearg_n_style (0, S, ARG). */
|
||||||
char *quotearg_style PARAMS ((enum quoting_style s, char const *arg));
|
char *quotearg_style PARAMS ((enum quoting_style s, char const *arg));
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user