Blame


1 cfa37a7b 2004-04-10 devnull .TH QUOTE 3
2 cfa37a7b 2004-04-10 devnull .SH NAME
3 cfa37a7b 2004-04-10 devnull quotestrdup, quoterunestrdup, unquotestrdup, unquoterunestrdup, quotestrfmt, quoterunestrfmt, quotefmtinstall, doquote, needsrcquote \- quoted character strings
4 cfa37a7b 2004-04-10 devnull .SH SYNOPSIS
5 cfa37a7b 2004-04-10 devnull .B #include <u.h>
6 cfa37a7b 2004-04-10 devnull .br
7 cfa37a7b 2004-04-10 devnull .B #include <libc.h>
8 cfa37a7b 2004-04-10 devnull .PP
9 cfa37a7b 2004-04-10 devnull .B
10 cfa37a7b 2004-04-10 devnull char *quotestrdup(char *s)
11 cfa37a7b 2004-04-10 devnull .PP
12 cfa37a7b 2004-04-10 devnull .B
13 cfa37a7b 2004-04-10 devnull Rune *quoterunestrdup(Rune *s)
14 cfa37a7b 2004-04-10 devnull .PP
15 cfa37a7b 2004-04-10 devnull .B
16 cfa37a7b 2004-04-10 devnull char *unquotestrdup(char *s)
17 cfa37a7b 2004-04-10 devnull .PP
18 cfa37a7b 2004-04-10 devnull .B
19 cfa37a7b 2004-04-10 devnull Rune *unquoterunestrdup(Rune *s)
20 cfa37a7b 2004-04-10 devnull .PP
21 cfa37a7b 2004-04-10 devnull .B
22 cfa37a7b 2004-04-10 devnull int quotestrfmt(Fmt*)
23 cfa37a7b 2004-04-10 devnull .PP
24 cfa37a7b 2004-04-10 devnull .B
25 cfa37a7b 2004-04-10 devnull int quoterunestrfmt(Fmt*)
26 cfa37a7b 2004-04-10 devnull .PP
27 cfa37a7b 2004-04-10 devnull .B
28 cfa37a7b 2004-04-10 devnull void quotefmtinstall(void)
29 cfa37a7b 2004-04-10 devnull .PP
30 cfa37a7b 2004-04-10 devnull .B
31 cfa37a7b 2004-04-10 devnull int (*doquote)(int c)
32 cfa37a7b 2004-04-10 devnull .PP
33 cfa37a7b 2004-04-10 devnull .B
34 cfa37a7b 2004-04-10 devnull int needsrcquote(int c)
35 cfa37a7b 2004-04-10 devnull .PP
36 cfa37a7b 2004-04-10 devnull .SH DESCRIPTION
37 cfa37a7b 2004-04-10 devnull These routines manipulate character strings, either adding or removing
38 cfa37a7b 2004-04-10 devnull quotes as necessary.
39 cfa37a7b 2004-04-10 devnull In the quoted form, the strings are in the style of
40 cfa37a7b 2004-04-10 devnull .IR rc (1) ,
41 cfa37a7b 2004-04-10 devnull with single quotes surrounding the string.
42 cfa37a7b 2004-04-10 devnull Embedded single quotes are indicated by a doubled single quote.
43 cfa37a7b 2004-04-10 devnull For instance,
44 cfa37a7b 2004-04-10 devnull .IP
45 cfa37a7b 2004-04-10 devnull .EX
46 cfa37a7b 2004-04-10 devnull Don't worry!
47 cfa37a7b 2004-04-10 devnull .EE
48 cfa37a7b 2004-04-10 devnull .PP
49 cfa37a7b 2004-04-10 devnull when quoted becomes
50 cfa37a7b 2004-04-10 devnull .IP
51 cfa37a7b 2004-04-10 devnull .EX
52 cfa37a7b 2004-04-10 devnull \&'Don''t worry!'
53 cfa37a7b 2004-04-10 devnull .EE
54 cfa37a7b 2004-04-10 devnull .PP
55 cfa37a7b 2004-04-10 devnull The empty string is represented by two quotes,
56 cfa37a7b 2004-04-10 devnull .BR '' .
57 cfa37a7b 2004-04-10 devnull .PP
58 cfa37a7b 2004-04-10 devnull The first four functions act as variants of
59 cfa37a7b 2004-04-10 devnull .B strdup
60 cfa37a7b 2004-04-10 devnull (see
61 d32deab1 2020-08-16 rsc .MR strcat (3) ).
62 cfa37a7b 2004-04-10 devnull Each returns a
63 cfa37a7b 2004-04-10 devnull freshly allocated copy of the string, created using
64 d32deab1 2020-08-16 rsc .MR malloc (3) .
65 cfa37a7b 2004-04-10 devnull .I Quotestrdup
66 cfa37a7b 2004-04-10 devnull returns a quoted copy of
67 cfa37a7b 2004-04-10 devnull .IR s ,
68 cfa37a7b 2004-04-10 devnull while
69 cfa37a7b 2004-04-10 devnull .I unquotestrdup
70 cfa37a7b 2004-04-10 devnull returns a copy of
71 cfa37a7b 2004-04-10 devnull .IR s
72 cfa37a7b 2004-04-10 devnull with the quotes evaluated.
73 cfa37a7b 2004-04-10 devnull The
74 cfa37a7b 2004-04-10 devnull .I rune
75 cfa37a7b 2004-04-10 devnull versions of these functions do the same for
76 cfa37a7b 2004-04-10 devnull .CW Rune
77 cfa37a7b 2004-04-10 devnull strings (see
78 d32deab1 2020-08-16 rsc .MR runestrcat (3) ).
79 cfa37a7b 2004-04-10 devnull .PP
80 cfa37a7b 2004-04-10 devnull The string returned by
81 cfa37a7b 2004-04-10 devnull .I quotestrdup
82 cfa37a7b 2004-04-10 devnull or
83 cfa37a7b 2004-04-10 devnull .I quoterunestrdup
84 cfa37a7b 2004-04-10 devnull has the following properties:
85 cfa37a7b 2004-04-10 devnull .TP
86 cfa37a7b 2004-04-10 devnull 1.
87 cfa37a7b 2004-04-10 devnull If the original string
88 cfa37a7b 2004-04-10 devnull .IR s
89 cfa37a7b 2004-04-10 devnull is empty, the returned string is
90 cfa37a7b 2004-04-10 devnull .BR '' .
91 cfa37a7b 2004-04-10 devnull .TP
92 cfa37a7b 2004-04-10 devnull 2.
93 cfa37a7b 2004-04-10 devnull If
94 cfa37a7b 2004-04-10 devnull .I s
95 cfa37a7b 2004-04-10 devnull contains no quotes, blanks, or control characters,
96 cfa37a7b 2004-04-10 devnull the returned string is identical to
97 cfa37a7b 2004-04-10 devnull .IR s .
98 cfa37a7b 2004-04-10 devnull .TP
99 cfa37a7b 2004-04-10 devnull 3.
100 cfa37a7b 2004-04-10 devnull If
101 cfa37a7b 2004-04-10 devnull .I s
102 cfa37a7b 2004-04-10 devnull needs quotes to be added, the first character of the returned
103 cfa37a7b 2004-04-10 devnull string will be a quote.
104 cfa37a7b 2004-04-10 devnull For example,
105 cfa37a7b 2004-04-10 devnull .B hello\ world
106 cfa37a7b 2004-04-10 devnull becomes
107 cfa37a7b 2004-04-10 devnull .B \&'hello\ world'
108 cfa37a7b 2004-04-10 devnull not
109 cfa37a7b 2004-04-10 devnull .BR hello'\ 'world .
110 cfa37a7b 2004-04-10 devnull .PP
111 cfa37a7b 2004-04-10 devnull The function pointer
112 cfa37a7b 2004-04-10 devnull .I doquote
113 cfa37a7b 2004-04-10 devnull is
114 cfa37a7b 2004-04-10 devnull .B nil
115 cfa37a7b 2004-04-10 devnull by default.
116 cfa37a7b 2004-04-10 devnull If it is non-nil, characters are passed to that function to see if they should
117 cfa37a7b 2004-04-10 devnull be quoted.
118 cfa37a7b 2004-04-10 devnull This mechanism allows programs to specify that
119 cfa37a7b 2004-04-10 devnull characters other than blanks, control characters, or quotes be quoted.
120 cfa37a7b 2004-04-10 devnull Regardless of the return value of
121 cfa37a7b 2004-04-10 devnull .IR *doquote ,
122 cfa37a7b 2004-04-10 devnull blanks, control characters, and quotes are always quoted.
123 cfa37a7b 2004-04-10 devnull .I Needsrcquote
124 cfa37a7b 2004-04-10 devnull is provided as a
125 cfa37a7b 2004-04-10 devnull .I doquote
126 cfa37a7b 2004-04-10 devnull function that flags any character special to
127 d32deab1 2020-08-16 rsc .MR rc (1) .
128 cfa37a7b 2004-04-10 devnull .PP
129 cfa37a7b 2004-04-10 devnull .I Quotestrfmt
130 cfa37a7b 2004-04-10 devnull and
131 cfa37a7b 2004-04-10 devnull .I quoterunestrfmt
132 cfa37a7b 2004-04-10 devnull are
133 d32deab1 2020-08-16 rsc .MR print (3)
134 cfa37a7b 2004-04-10 devnull formatting routines that produce quoted strings as output.
135 cfa37a7b 2004-04-10 devnull They may be installed by hand, but
136 cfa37a7b 2004-04-10 devnull .I quotefmtinstall
137 cfa37a7b 2004-04-10 devnull installs them under the standard format characters
138 cfa37a7b 2004-04-10 devnull .B q
139 cfa37a7b 2004-04-10 devnull and
140 cfa37a7b 2004-04-10 devnull .BR Q .
141 cfa37a7b 2004-04-10 devnull (They are not installed automatically.)
142 cfa37a7b 2004-04-10 devnull If the format string includes the alternate format character
143 cfa37a7b 2004-04-10 devnull .BR # ,
144 cfa37a7b 2004-04-10 devnull for example
145 cfa37a7b 2004-04-10 devnull .BR %#q ,
146 cfa37a7b 2004-04-10 devnull the printed string will always be quoted; otherwise quotes will only be provided if necessary
147 cfa37a7b 2004-04-10 devnull to avoid ambiguity.
148 cfa37a7b 2004-04-10 devnull In
149 cfa37a7b 2004-04-10 devnull .B <libc.h>
150 cfa37a7b 2004-04-10 devnull there are
151 cfa37a7b 2004-04-10 devnull .B #pragma
152 cfa37a7b 2004-04-10 devnull statements so the compiler can type-check uses of
153 cfa37a7b 2004-04-10 devnull .B %q
154 cfa37a7b 2004-04-10 devnull and
155 cfa37a7b 2004-04-10 devnull .B %Q
156 cfa37a7b 2004-04-10 devnull in
157 d32deab1 2020-08-16 rsc .MR print (3)
158 cfa37a7b 2004-04-10 devnull format strings.
159 cfa37a7b 2004-04-10 devnull .SH SOURCE
160 c3674de4 2005-01-11 devnull .B \*9/src/lib9/quote.c
161 cfa37a7b 2004-04-10 devnull .br
162 c3674de4 2005-01-11 devnull .B \*9/src/lib9/fmt/fmtquote.c
163 cfa37a7b 2004-04-10 devnull .SH "SEE ALSO
164 d32deab1 2020-08-16 rsc .MR rc (1) ,
165 d32deab1 2020-08-16 rsc .MR malloc (3) ,
166 d32deab1 2020-08-16 rsc .MR print (3) ,
167 d32deab1 2020-08-16 rsc .MR strcat (3)
168 c8b6342d 2005-01-13 devnull .SH BUGS
169 c8b6342d 2005-01-13 devnull Because it is provided by the format library,
170 c8b6342d 2005-01-13 devnull .I doquote
171 c8b6342d 2005-01-13 devnull is a preprocessor macro defined as
172 c8b6342d 2005-01-13 devnull .IR fmtdoquote ;
173 c8b6342d 2005-01-13 devnull see
174 d32deab1 2020-08-16 rsc .MR intro (3) .