From 0dbbe3f55352241d290403577dfebed802d6fd9a Mon Sep 17 00:00:00 2001 From: Akim Demaille Date: Thu, 1 Nov 2012 06:47:03 -0700 Subject: [PATCH] quote: provide a means to escape strings with nul characters * lib/quote.h, lib/quotearg.c (quote_mem, quote_n_mem): New functions. (quote, quote_n): Rename formal arguments for consistency with quotearg. --- ChangeLog | 7 +++++++ lib/quote.h | 25 +++++++++++++++++++------ lib/quotearg.c | 22 +++++++++++++++++----- 3 files changed, 43 insertions(+), 11 deletions(-) diff --git a/ChangeLog b/ChangeLog index bf77930a1..720b7a276 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2012-11-01 Akim Demaille + + quote: provide a means to escape strings with nul characters + * lib/quote.h, lib/quotearg.c (quote_mem, quote_n_mem): New functions. + (quote, quote_n): Rename formal arguments for consistency with + quotearg. + 2012-10-30 Paul Eggert test-raise: don't assume 199 is an invalid signal diff --git a/lib/quote.h b/lib/quote.h index b30b166dd..e3b332d64 100644 --- a/lib/quote.h +++ b/lib/quote.h @@ -18,16 +18,29 @@ #ifndef QUOTE_H_ # define QUOTE_H_ 1 +# include + /* The quoting options used by quote_n and quote. Its type is incomplete, so it's useful only in expressions like '"e_quoting_options'. */ extern struct quoting_options quote_quoting_options; -/* Return an unambiguous printable representation of NAME, - allocated in slot N, suitable for diagnostics. */ -char const *quote_n (int n, char const *name); +/* Return an unambiguous printable representation of ARG (of size + ARGSIZE), allocated in slot N, suitable for diagnostics. If + ARGSIZE is SIZE_MAX, use the string length of the argument for + ARGSIZE. */ +char const *quote_n_mem (int n, char const *arg, size_t argsize); + +/* Return an unambiguous printable representation of ARG (of size + ARGSIZE), suitable for diagnostics. If ARGSIZE is SIZE_MAX, use + the string length of the argument for ARGSIZE. */ +char const *quote_mem (char const *arg, size_t argsize); + +/* Return an unambiguous printable representation of ARG, allocated in + slot N, suitable for diagnostics. */ +char const *quote_n (int n, char const *arg); -/* Return an unambiguous printable representation of NAME, - suitable for diagnostics. */ -char const *quote (char const *name); +/* Return an unambiguous printable representation of ARG, suitable for + diagnostics. */ +char const *quote (char const *arg); #endif /* !QUOTE_H_ */ diff --git a/lib/quotearg.c b/lib/quotearg.c index 1ea583d9c..7fb866d5c 100644 --- a/lib/quotearg.c +++ b/lib/quotearg.c @@ -929,7 +929,7 @@ quotearg_custom_mem (char const *left_quote, char const *right_quote, } -/* The quoting option used by quote_n and quote. */ +/* The quoting option used by the functions of quote.h. */ struct quoting_options quote_quoting_options = { locale_quoting_style, @@ -939,13 +939,25 @@ struct quoting_options quote_quoting_options = }; char const * -quote_n (int n, char const *name) +quote_n_mem (int n, char const *arg, size_t argsize) { - return quotearg_n_options (n, name, SIZE_MAX, "e_quoting_options); + return quotearg_n_options (n, arg, argsize, "e_quoting_options); } char const * -quote (char const *name) +quote_mem (char const *arg, size_t argsize) { - return quote_n (0, name); + return quote_n_mem (0, arg, argsize); +} + +char const * +quote_n (int n, char const *arg) +{ + return quote_n_mem (n, arg, SIZE_MAX); +} + +char const * +quote (char const *arg) +{ + return quote_n (0, arg); } -- 2.11.0