diff -u1 ChangeLog.v0 ChangeLog --- ChangeLog.v0 2012-10-21 00:10:14.043857761 +0200 +++ ChangeLog 2012-10-21 00:16:32.119146504 +0200 @@ -1 +1,15 @@ +2012-10-21 Oskar Liljeblad + + quotearg-file: new module + * lib/quotearg-file.c: + New file: set QUOTEARG_FILE and include quotearg.c. + * lib/quotearg-file.h: New file. + * lib/quotearg.c: + When QUOTEARG_FILE is defined, generate only quotearg_file_restyled + and quotearg_file non-static functions. Otherwise everything is as + before, with the exception of default_quoting_options which is no + longer static to prevent a duplicate symbol in quotearg-file.o. + * modules/quotearg-file: New file. + * MODULES.html.sh (Misc): Add it. + 2012-10-16 Paul Eggert diff -u -p /dev/null lib/quotearg-file.c --- /dev/null 2012-08-16 17:10:46.538105184 +0200 +++ lib/quotearg-file.c 2012-10-20 23:40:18.696655540 +0200 @@ -0,0 +1,19 @@ +/* quotearg-file.c - quote arguments for output, writing result to file + + Copyright (C) 2012 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 + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#define QUOTEARG_FILE +#include "quotearg.c" diff -u /dev/null lib/quotearg-file.h --- /dev/null 2012-08-16 17:10:46.538105184 +0200 +++ lib/quotearg-file.h 2012-10-20 23:56:34.364873603 +0200 @@ -0,0 +1,34 @@ +/* quotearg-file.h - prototypes for quotearg-file.c + + Copyright (C) 2012 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 + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#ifndef QUOTEARG_FILE_H_ +# define QUOTEARG_FILE_H_ 1 + +#include "quotearg.h" + +/* Write to file handle FH a quoted version of + argument ARG (of size ARGSIZE), using O to control quoting. + If O is null, use the default. + Return the written size of the output, or EOF if there was an + error. + If ARGSIZE is SIZE_MAX, use the string length of the argument for + ARGSIZE. */ +ssize_t +quotearg_file (FILE *fh, char const *arg, size_t argsize, + struct quoting_options const *o); + +#endif /* !QUOTEARG_FILE_H_ */ diff -u -p quotearg.c.v0 quotearg.c --- lib/quotearg.c.v0 2012-10-21 00:28:50.841568855 +0200 +++ lib/quotearg.c 2012-10-21 00:30:18.078326996 +0200 @@ -37,6 +37,9 @@ #include #include #include +#ifdef QUOTEARG_FILE +#include +#endif #include #include #include @@ -71,6 +74,7 @@ struct quoting_options char const *right_quote; }; +#ifndef QUOTEARG_FILE /* Names of quoting styles. */ char const *const quoting_style_args[] = { @@ -97,10 +101,16 @@ enum quoting_style const quoting_style_v locale_quoting_style, clocale_quoting_style }; +#endif /* !defined QUOTEARG_FILE */ /* The default quoting options. */ -static struct quoting_options default_quoting_options; +#ifndef QUOTEARG_FILE +struct quoting_options default_quoting_options; +#else +extern struct quoting_options default_quoting_options; +#endif +#ifndef QUOTEARG_FILE /* Allocate a new set of quoting options, with contents initially identical to O if O is not null, or to the default if O is null. It is the caller's responsibility to free the result. */ @@ -184,6 +194,7 @@ quoting_options_from_style (enum quoting o.style = style; return o; } +#endif /* !defined QUOTEARG_FILE */ /* MSGID approximates a quotation mark. Return its translation if it has one; otherwise, return either it or "\"", depending on S. @@ -238,8 +249,13 @@ gettext_quote (char const *msgid, enum q ARGSIZE, O), except it breaks O into its component pieces and is not careful about errno. */ +#ifndef QUOTEARG_FILE static size_t quotearg_buffer_restyled (char *buffer, size_t buffersize, +#else +static ssize_t +quotearg_file_restyled (FILE *fh, +#endif char const *arg, size_t argsize, enum quoting_style quoting_style, int flags, unsigned int const *quote_these_too, @@ -254,6 +270,7 @@ quotearg_buffer_restyled (char *buffer, bool unibyte_locale = MB_CUR_MAX == 1; bool elide_outer_quotes = (flags & QA_ELIDE_OUTER_QUOTES) != 0; +#ifndef QUOTEARG_FILE #define STORE(c) \ do \ { \ @@ -262,6 +279,16 @@ quotearg_buffer_restyled (char *buffer, len++; \ } \ while (0) +#else +#define STORE(c) \ + do \ + { \ + if (fputc((c), fh) == EOF) \ + return EOF; \ + len++; \ + } \ + while (0) +#endif switch (quoting_style) { @@ -642,15 +669,21 @@ quotearg_buffer_restyled (char *buffer, for (; *quote_string; quote_string++) STORE (*quote_string); +#ifndef QUOTEARG_FILE if (len < buffersize) buffer[len] = '\0'; +#endif return len; force_outer_quoting_style: /* Don't reuse quote_these_too, since the addition of outer quotes sufficiently quotes the specified characters. */ - return quotearg_buffer_restyled (buffer, buffersize, arg, argsize, - quoting_style, +#ifndef QUOTEARG_FILE + return quotearg_buffer_restyled (buffer, buffersize, +#else + return quotearg_file_restyled (fh, +#endif + arg, argsize, quoting_style, flags & ~QA_ELIDE_OUTER_QUOTES, NULL, left_quote, right_quote); } @@ -664,6 +697,7 @@ quotearg_buffer_restyled (char *buffer, value that would have been returned had BUFFERSIZE been large enough. If ARGSIZE is SIZE_MAX, use the string length of the argument for ARGSIZE. */ +#ifndef QUOTEARG_FILE size_t quotearg_buffer (char *buffer, size_t buffersize, char const *arg, size_t argsize, @@ -677,7 +711,23 @@ quotearg_buffer (char *buffer, size_t bu errno = e; return r; } +#else +ssize_t +quotearg_file (FILE *fh, char const *arg, size_t argsize, + struct quoting_options const *o) +{ + struct quoting_options const *p = o ? o : &default_quoting_options; + int e = errno; + ssize_t r = quotearg_file_restyled (fh, arg, argsize, p->style, p->flags, + p->quote_these_too, p->left_quote, + p->right_quote); + if (r != EOF) + errno = e; + return r; +} +#endif +#ifndef QUOTEARG_FILE /* Equivalent to quotearg_alloc (ARG, ARGSIZE, NULL, O). */ char * quotearg_alloc (char const *arg, size_t argsize, @@ -949,3 +999,4 @@ quote (char const *name) { return quote_n (0, name); } +#endif /* !defined QUOTEARG_FILE*/ diff -u /dev/null modules/quotearg-file --- /dev/null 2012-08-16 17:10:46.538105184 +0200 +++ modules/quotearg-file 2012-10-20 23:59:42.554450663 +0200 @@ -0,0 +1,23 @@ +Description: +Quote arguments for use in error messages, writing the result to a file. + +Files: +lib/quotearg-file.h +lib/quotearg-file.c + +Depends-on: +quotearg + +configure.ac: + +Makefile.am: +lib_SOURCES += quotearg-file.c + +Include: +"quotearg-file.h" + +License: +GPL + +Maintainer: +Oskar Liljeblad diff -u MODULES.html.sh.v0 MODULES.html.sh --- MODULES.html.sh.v0 2012-10-21 00:02:21.195775367 +0200 +++ MODULES.html.sh 2012-10-21 00:02:33.607879091 +0200 @@ -3454,6 +3454,7 @@ func_module ptsname_r func_module pty func_module quotearg + func_module quotearg-file func_module quote func_module readutmp func_module random_r