]> git.saurik.com Git - bison.git/blame - lib/quotearg.h
(getargs) [MSDOS]: Don't assume optarg != NULL
[bison.git] / lib / quotearg.h
CommitLineData
ff4a34be 1/* quotearg.h - quote arguments for output
7601152f
PE
2
3 Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software
4 Foundation, Inc.
ff4a34be
AD
5
6 This program is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 2, or (at your option)
9 any later version.
10
11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
15
16 You should have received a copy of the GNU General Public License
17 along with this program; if not, write to the Free Software Foundation,
18 Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
19
20/* Written by Paul Eggert <eggert@twinsun.com> */
21
1a715ef2
AD
22#ifndef QUOTEARG_H_
23# define QUOTEARG_H_ 1
24
f6cf0f6e
PE
25# include <stddef.h>
26
ff4a34be
AD
27/* Basic quoting styles. */
28enum quoting_style
29 {
30 literal_quoting_style, /* --quoting-style=literal */
31 shell_quoting_style, /* --quoting-style=shell */
32 shell_always_quoting_style, /* --quoting-style=shell-always */
33 c_quoting_style, /* --quoting-style=c */
34 escape_quoting_style, /* --quoting-style=escape */
35 locale_quoting_style, /* --quoting-style=locale */
36 clocale_quoting_style /* --quoting-style=clocale */
37 };
38
39/* For now, --quoting-style=literal is the default, but this may change. */
1a715ef2
AD
40# ifndef DEFAULT_QUOTING_STYLE
41# define DEFAULT_QUOTING_STYLE literal_quoting_style
42# endif
ff4a34be
AD
43
44/* Names of quoting styles and their corresponding values. */
45extern char const *const quoting_style_args[];
46extern enum quoting_style const quoting_style_vals[];
47
48struct quoting_options;
49
ff4a34be
AD
50/* The functions listed below set and use a hidden variable
51 that contains the default quoting style options. */
52
53/* Allocate a new set of quoting options, with contents initially identical
54 to O if O is not null, or to the default if O is null.
55 It is the caller's responsibility to free the result. */
f6cf0f6e 56struct quoting_options *clone_quoting_options (struct quoting_options *o);
ff4a34be
AD
57
58/* Get the value of O's quoting style. If O is null, use the default. */
f6cf0f6e 59enum quoting_style get_quoting_style (struct quoting_options *o);
ff4a34be
AD
60
61/* In O (or in the default if O is null),
62 set the value of the quoting style to S. */
f6cf0f6e 63void set_quoting_style (struct quoting_options *o, enum quoting_style s);
ff4a34be
AD
64
65/* In O (or in the default if O is null),
66 set the value of the quoting options for character C to I.
67 Return the old value. Currently, the only values defined for I are
68 0 (the default) and 1 (which means to quote the character even if
69 it would not otherwise be quoted). */
f6cf0f6e 70int set_char_quoting (struct quoting_options *o, char c, int i);
ff4a34be
AD
71
72/* Place into buffer BUFFER (of size BUFFERSIZE) a quoted version of
73 argument ARG (of size ARGSIZE), using O to control quoting.
74 If O is null, use the default.
75 Terminate the output with a null character, and return the written
76 size of the output, not counting the terminating null.
77 If BUFFERSIZE is too small to store the output string, return the
78 value that would have been returned had BUFFERSIZE been large enough.
79 If ARGSIZE is -1, use the string length of the argument for ARGSIZE. */
f6cf0f6e
PE
80size_t quotearg_buffer (char *buffer, size_t buffersize,
81 char const *arg, size_t argsize,
82 struct quoting_options const *o);
ff4a34be
AD
83
84/* Use storage slot N to return a quoted version of the string ARG.
85 Use the default quoting options.
86 The returned value points to static storage that can be
87 reused by the next call to this function with the same value of N.
88 N must be nonnegative. */
f6cf0f6e 89char *quotearg_n (int n, char const *arg);
ff4a34be
AD
90
91/* Equivalent to quotearg_n (0, ARG). */
f6cf0f6e 92char *quotearg (char const *arg);
ff4a34be
AD
93
94/* Use style S and storage slot N to return a quoted version of the string ARG.
95 This is like quotearg_n (N, ARG), except that it uses S with no other
96 options to specify the quoting method. */
f6cf0f6e 97char *quotearg_n_style (int n, enum quoting_style s, char const *arg);
ff4a34be 98
8434f222
PE
99/* Use style S and storage slot N to return a quoted version of the
100 argument ARG of size ARGSIZE. This is like quotearg_n_style
101 (N, S, ARG), except it can quote null bytes. */
f6cf0f6e
PE
102char *quotearg_n_style_mem (int n, enum quoting_style s,
103 char const *arg, size_t argsize);
8434f222 104
ff4a34be 105/* Equivalent to quotearg_n_style (0, S, ARG). */
f6cf0f6e 106char *quotearg_style (enum quoting_style s, char const *arg);
ff4a34be
AD
107
108/* Like quotearg (ARG), except also quote any instances of CH. */
f6cf0f6e 109char *quotearg_char (char const *arg, char ch);
ff4a34be
AD
110
111/* Equivalent to quotearg_char (ARG, ':'). */
f6cf0f6e 112char *quotearg_colon (char const *arg);
1a715ef2
AD
113
114#endif /* !QUOTEARG_H_ */