1
/* $Id: strvis.c,v 1.5 1999/05/13 16:35:58 karls Exp $ */
5
#endif /* HAVE_CONFIG_H */
12
* Copyright (c) 1989, 1993
13
* The Regents of the University of California. All rights reserved.
15
* Redistribution and use in source and binary forms, with or without
16
* modification, are permitted provided that the following conditions
18
* 1. Redistributions of source code must retain the above copyright
19
* notice, this list of conditions and the following disclaimer.
20
* 2. Redistributions in binary form must reproduce the above copyright
21
* notice, this list of conditions and the following disclaimer in the
22
* documentation and/or other materials provided with the distribution.
23
* 3. All advertising materials mentioning features or use of this software
24
* must display the following acknowledgement:
25
* This product includes software developed by the University of
26
* California, Berkeley and its contributors.
27
* 4. Neither the name of the University nor the names of its contributors
28
* may be used to endorse or promote products derived from this software
29
* without specific prior written permission.
31
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
32
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
33
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
34
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
35
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
36
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
37
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
38
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
39
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
40
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
44
#if defined(LIBC_SCCS) && !defined(lint)
45
static char rcsid[] = "$OpenBSD: vis.c,v 1.4 1997/07/25 20:30:05 mickey Exp $";
46
#endif /* LIBC_SCCS and not lint */
49
#include <sys/types.h>
51
#endif /* !_COMMON_H_ */
53
/*#include <vis.h> */ /* get defines from compat.h */
56
#define isoctal(c) (((u_char)(c)) >= '0' && ((u_char)(c)) <= '7')
59
* vis - visually encode characters
62
vis(dst, c, flag, nextc)
67
if (((u_int)c <= UCHAR_MAX && isascii(c) && isgraph(c)) ||
68
((flag & VIS_SP) == 0 && c == ' ') ||
69
((flag & VIS_TAB) == 0 && c == '\t') ||
70
((flag & VIS_NL) == 0 && c == '\n') ||
71
((flag & VIS_SAFE) && (c == '\b' || c == '\007' || c == '\r'))) {
73
if (c == '\\' && (flag & VIS_NOSLASH) == 0)
79
if (flag & VIS_CSTYLE) {
97
#endif /* STDC_HEADERS */
120
if (isoctal(nextc)) {
127
if (((c & 0177) == ' ') || (flag & VIS_OCTAL)) {
129
*dst++ = ((u_char)c >> 6 & 07) + '0';
130
*dst++ = ((u_char)c >> 3 & 07) + '0';
131
*dst++ = ((u_char)c & 07) + '0';
134
if ((flag & VIS_NOSLASH) == 0)
156
* strvis, strvisx - visually encode characters from src into dst
158
* Dst must be 4 times the size of src to account for possible
159
* expansion. The length of dst, not including the trailing NULL,
162
* Strvisx encodes exactly len bytes from src into dst.
163
* This is useful for encoding a block of data.
166
strvis(dst, src, flag)
168
register const char *src;
174
for (start = dst; (c = *src);)
175
dst = vis(dst, c, flag, *++src);
177
return (dst - start);
181
strvisx(dst, src, len, flag)
183
register const char *src;
190
for (start = dst; len > 1; len--) {
192
dst = vis(dst, c, flag, *++src);
195
dst = vis(dst, *src, flag, '\0');
198
return (dst - start);
201
static void avoid_error __P((void));
202
static void avoid_error()
206
#endif /* !HAVE_STRVIS */