Line | Source | Count |
1 | | - |
2 | | - |
3 | | - |
4 | | - |
5 | | - |
6 | | - |
7 | | - |
8 | | - |
9 | | - |
10 | | - |
11 | | - |
12 | | - |
13 | | - |
14 | | - |
15 | | - |
16 | | - |
17 | | - |
18 | | - |
19 | | - |
20 | | - |
21 | | - |
22 | | - |
23 | | - |
24 | | - |
25 | | - |
26 | | - |
27 | | - |
28 | | - |
29 | | - |
30 | | - |
31 | | - |
32 | | - |
33 | #include "includes.h" | - |
34 | #if !defined(HAVE_STRNVIS) || defined(BROKEN_STRNVIS) | - |
35 | | - |
36 | #include <sys/types.h> | - |
37 | #include <errno.h> | - |
38 | #include <ctype.h> | - |
39 | #include <limits.h> | - |
40 | #include <string.h> | - |
41 | #include <stdlib.h> | - |
42 | | - |
43 | #include "vis.h" | - |
44 | | - |
45 | #define isoctal(c) (((u_char)(c)) >= '0' && ((u_char)(c)) <= '7') | - |
46 | #define isvisible(c,flag) \ | - |
47 | (((c) == '\\' || (flag & VIS_ALL) == 0) && \ | - |
48 | (((u_int)(c) <= UCHAR_MAX && isascii((u_char)(c)) && \ | - |
49 | (((c) != '*' && (c) != '?' && (c) != '[' && (c) != '#') || \ | - |
50 | (flag & VIS_GLOB) == 0) && isgraph((u_char)(c))) || \ | - |
51 | ((flag & VIS_SP) == 0 && (c) == ' ') || \ | - |
52 | ((flag & VIS_TAB) == 0 && (c) == '\t') || \ | - |
53 | ((flag & VIS_NL) == 0 && (c) == '\n') || \ | - |
54 | ((flag & VIS_SAFE) && ((c) == '\b' || \ | - |
55 | (c) == '\007' || (c) == '\r' || \ | - |
56 | isgraph((u_char)(c)))))) | - |
57 | | - |
58 | | - |
59 | | - |
60 | | - |
61 | char * | - |
62 | vis(char *dst, int c, int flag, int nextc) | - |
63 | { | - |
64 | if (isvisible(c, flag)) {TRUE | never evaluated | FALSE | evaluated 12 times by 1 test |
TRUE | never evaluated | FALSE | evaluated 12 times by 1 test |
TRUE | never evaluated | FALSE | never evaluated |
TRUE | never evaluated | FALSE | never evaluated |
TRUE | never evaluated | FALSE | never evaluated |
TRUE | never evaluated | FALSE | never evaluated |
TRUE | never evaluated | FALSE | never evaluated |
TRUE | never evaluated | FALSE | never evaluated |
TRUE | never evaluated | FALSE | never evaluated |
TRUE | never evaluated | FALSE | never evaluated |
TRUE | never evaluated | FALSE | never evaluated |
TRUE | never evaluated | FALSE | never evaluated |
TRUE | never evaluated | FALSE | never evaluated |
TRUE | never evaluated | FALSE | never evaluated |
TRUE | never evaluated | FALSE | never evaluated |
TRUE | never evaluated | FALSE | never evaluated |
TRUE | never evaluated | FALSE | never evaluated |
TRUE | never evaluated | FALSE | never evaluated |
TRUE | never evaluated | FALSE | never evaluated |
TRUE | never evaluated | FALSE | never evaluated |
TRUE | never evaluated | FALSE | never evaluated |
| 0-12 |
65 | if ((c == '"' && (flag & VIS_DQ) != 0) ||TRUE | never evaluated | FALSE | never evaluated |
TRUE | never evaluated | FALSE | never evaluated |
| 0 |
66 | (c == '\\' && (flag & VIS_NOSLASH) == 0))TRUE | never evaluated | FALSE | never evaluated |
TRUE | never evaluated | FALSE | never evaluated |
| 0 |
67 | *dst++ = '\\'; never executed: *dst++ = '\\'; | 0 |
68 | *dst++ = c; | - |
69 | *dst = '\0'; | - |
70 | return (dst); never executed: return (dst); | 0 |
71 | } | - |
72 | | - |
73 | if (flag & VIS_CSTYLE) {TRUE | never evaluated | FALSE | evaluated 12 times by 1 test |
| 0-12 |
74 | switch(c) { | - |
75 | case '\n': never executed: case '\n': | 0 |
76 | *dst++ = '\\'; | - |
77 | *dst++ = 'n'; | - |
78 | goto done; never executed: goto done; | 0 |
79 | case '\r': never executed: case '\r': | 0 |
80 | *dst++ = '\\'; | - |
81 | *dst++ = 'r'; | - |
82 | goto done; never executed: goto done; | 0 |
83 | case '\b': never executed: case '\b': | 0 |
84 | *dst++ = '\\'; | - |
85 | *dst++ = 'b'; | - |
86 | goto done; never executed: goto done; | 0 |
87 | case '\a': never executed: case '\a': | 0 |
88 | *dst++ = '\\'; | - |
89 | *dst++ = 'a'; | - |
90 | goto done; never executed: goto done; | 0 |
91 | case '\v': never executed: case '\v': | 0 |
92 | *dst++ = '\\'; | - |
93 | *dst++ = 'v'; | - |
94 | goto done; never executed: goto done; | 0 |
95 | case '\t': never executed: case '\t': | 0 |
96 | *dst++ = '\\'; | - |
97 | *dst++ = 't'; | - |
98 | goto done; never executed: goto done; | 0 |
99 | case '\f': never executed: case '\f': | 0 |
100 | *dst++ = '\\'; | - |
101 | *dst++ = 'f'; | - |
102 | goto done; never executed: goto done; | 0 |
103 | case ' ': never executed: case ' ': | 0 |
104 | *dst++ = '\\'; | - |
105 | *dst++ = 's'; | - |
106 | goto done; never executed: goto done; | 0 |
107 | case '\0': never executed: case '\0': | 0 |
108 | *dst++ = '\\'; | - |
109 | *dst++ = '0'; | - |
110 | if (isoctal(nextc)) {TRUE | never evaluated | FALSE | never evaluated |
TRUE | never evaluated | FALSE | never evaluated |
| 0 |
111 | *dst++ = '0'; | - |
112 | *dst++ = '0'; | - |
113 | } never executed: end of block | 0 |
114 | goto done; never executed: goto done; | 0 |
115 | } | - |
116 | } never executed: end of block | 0 |
117 | if (((c & 0177) == ' ') || (flag & VIS_OCTAL) ||TRUE | never evaluated | FALSE | evaluated 12 times by 1 test |
TRUE | evaluated 12 times by 1 test | FALSE | never evaluated |
| 0-12 |
118 | ((flag & VIS_GLOB) && (c == '*' || c == '?' || c == '[' || c == '#'))) {TRUE | never evaluated | FALSE | never evaluated |
TRUE | never evaluated | FALSE | never evaluated |
TRUE | never evaluated | FALSE | never evaluated |
TRUE | never evaluated | FALSE | never evaluated |
TRUE | never evaluated | FALSE | never evaluated |
| 0 |
119 | *dst++ = '\\'; | - |
120 | *dst++ = ((u_char)c >> 6 & 07) + '0'; | - |
121 | *dst++ = ((u_char)c >> 3 & 07) + '0'; | - |
122 | *dst++ = ((u_char)c & 07) + '0'; | - |
123 | goto done;executed 12 times by 1 test: goto done; | 12 |
124 | } | - |
125 | if ((flag & VIS_NOSLASH) == 0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
126 | *dst++ = '\\'; never executed: *dst++ = '\\'; | 0 |
127 | if (c & 0200) {TRUE | never evaluated | FALSE | never evaluated |
| 0 |
128 | c &= 0177; | - |
129 | *dst++ = 'M'; | - |
130 | } never executed: end of block | 0 |
131 | if (iscntrl((u_char)c)) {TRUE | never evaluated | FALSE | never evaluated |
| 0 |
132 | *dst++ = '^'; | - |
133 | if (c == 0177)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
134 | *dst++ = '?'; never executed: *dst++ = '?'; | 0 |
135 | else | - |
136 | *dst++ = c + '@'; never executed: *dst++ = c + '@'; | 0 |
137 | } else { | - |
138 | *dst++ = '-'; | - |
139 | *dst++ = c; | - |
140 | } never executed: end of block | 0 |
141 | done: code before this statement never executed: done: | 0 |
142 | *dst = '\0'; | - |
143 | return (dst);executed 12 times by 1 test: return (dst); | 12 |
144 | } | - |
145 | DEF_WEAK(vis); | - |
146 | | - |
147 | | - |
148 | | - |
149 | | - |
150 | | - |
151 | | - |
152 | | - |
153 | | - |
154 | | - |
155 | | - |
156 | | - |
157 | | - |
158 | | - |
159 | | - |
160 | int | - |
161 | strvis(char *dst, const char *src, int flag) | - |
162 | { | - |
163 | char c; | - |
164 | char *start; | - |
165 | | - |
166 | for (start = dst; (c = *src);)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
167 | dst = vis(dst, c, flag, *++src); never executed: dst = vis(dst, c, flag, *++src); | 0 |
168 | *dst = '\0'; | - |
169 | return (dst - start); never executed: return (dst - start); | 0 |
170 | } | - |
171 | DEF_WEAK(strvis); | - |
172 | | - |
173 | int | - |
174 | strnvis(char *dst, const char *src, size_t siz, int flag) | - |
175 | { | - |
176 | char *start, *end; | - |
177 | char tbuf[5]; | - |
178 | int c, i; | - |
179 | | - |
180 | i = 0; | - |
181 | for (start = dst, end = start + siz - 1; (c = *src) && dst < end; ) {TRUE | evaluated 4200 times by 1 test | FALSE | evaluated 40 times by 1 test |
TRUE | evaluated 4200 times by 1 test | FALSE | never evaluated |
| 0-4200 |
182 | if (isvisible(c, flag)) {TRUE | never evaluated | FALSE | evaluated 4200 times by 1 test |
TRUE | evaluated 4200 times by 1 test | FALSE | never evaluated |
TRUE | evaluated 4200 times by 1 test | FALSE | never evaluated |
TRUE | evaluated 4200 times by 1 test | FALSE | never evaluated |
TRUE | evaluated 4200 times by 1 test | FALSE | never evaluated |
TRUE | evaluated 4200 times by 1 test | FALSE | never evaluated |
TRUE | evaluated 4200 times by 1 test | FALSE | never evaluated |
TRUE | evaluated 4200 times by 1 test | FALSE | never evaluated |
TRUE | never evaluated | FALSE | never evaluated |
TRUE | evaluated 3720 times by 1 test | FALSE | evaluated 480 times by 1 test |
TRUE | evaluated 480 times by 1 test | FALSE | never evaluated |
TRUE | evaluated 480 times by 1 test | FALSE | never evaluated |
TRUE | never evaluated | FALSE | never evaluated |
TRUE | never evaluated | FALSE | never evaluated |
TRUE | never evaluated | FALSE | never evaluated |
TRUE | never evaluated | FALSE | never evaluated |
TRUE | never evaluated | FALSE | never evaluated |
TRUE | never evaluated | FALSE | never evaluated |
TRUE | never evaluated | FALSE | never evaluated |
TRUE | never evaluated | FALSE | never evaluated |
TRUE | never evaluated | FALSE | never evaluated |
| 0-4200 |
183 | if ((c == '"' && (flag & VIS_DQ) != 0) ||TRUE | never evaluated | FALSE | evaluated 4200 times by 1 test |
TRUE | never evaluated | FALSE | never evaluated |
| 0-4200 |
184 | (c == '\\' && (flag & VIS_NOSLASH) == 0)) {TRUE | never evaluated | FALSE | evaluated 4200 times by 1 test |
TRUE | never evaluated | FALSE | never evaluated |
| 0-4200 |
185 | | - |
186 | if (dst + 1 >= end) {TRUE | never evaluated | FALSE | never evaluated |
| 0 |
187 | i = 2; | - |
188 | break; never executed: break; | 0 |
189 | } | - |
190 | *dst++ = '\\'; | - |
191 | } never executed: end of block | 0 |
192 | i = 1; | - |
193 | *dst++ = c; | - |
194 | src++; | - |
195 | } else {executed 4200 times by 1 test: end of block | 4200 |
196 | i = vis(tbuf, c, flag, *++src) - tbuf; | - |
197 | if (dst + i <= end) {TRUE | never evaluated | FALSE | never evaluated |
| 0 |
198 | memcpy(dst, tbuf, i); | - |
199 | dst += i; | - |
200 | } else { never executed: end of block | 0 |
201 | src--; | - |
202 | break; never executed: break; | 0 |
203 | } | - |
204 | } | - |
205 | } | - |
206 | if (siz > 0)TRUE | evaluated 40 times by 1 test | FALSE | never evaluated |
| 0-40 |
207 | *dst = '\0';executed 40 times by 1 test: *dst = '\0'; | 40 |
208 | if (dst + i > end) {TRUE | never evaluated | FALSE | evaluated 40 times by 1 test |
| 0-40 |
209 | | - |
210 | while ((c = *src))TRUE | never evaluated | FALSE | never evaluated |
| 0 |
211 | dst += vis(tbuf, c, flag, *++src) - tbuf; never executed: dst += vis(tbuf, c, flag, *++src) - tbuf; | 0 |
212 | } never executed: end of block | 0 |
213 | return (dst - start);executed 40 times by 1 test: return (dst - start); | 40 |
214 | } | - |
215 | | - |
216 | int | - |
217 | stravis(char **outp, const char *src, int flag) | - |
218 | { | - |
219 | char *buf; | - |
220 | int len, serrno; | - |
221 | | - |
222 | buf = reallocarray(NULL, 4, strlen(src) + 1); | - |
223 | if (buf == NULL)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
224 | return -1; never executed: return -1; | 0 |
225 | len = strvis(buf, src, flag); | - |
226 | serrno = errno; | - |
227 | *outp = realloc(buf, len + 1); | - |
228 | if (*outp == NULL) {TRUE | never evaluated | FALSE | never evaluated |
| 0 |
229 | *outp = buf; | - |
230 | errno = serrno; | - |
231 | } never executed: end of block | 0 |
232 | return (len); never executed: return (len); | 0 |
233 | } | - |
234 | | - |
235 | int | - |
236 | strvisx(char *dst, const char *src, size_t len, int flag) | - |
237 | { | - |
238 | char c; | - |
239 | char *start; | - |
240 | | - |
241 | for (start = dst; len > 1; len--) {TRUE | never evaluated | FALSE | never evaluated |
| 0 |
242 | c = *src; | - |
243 | dst = vis(dst, c, flag, *++src); | - |
244 | } never executed: end of block | 0 |
245 | if (len)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
246 | dst = vis(dst, *src, flag, '\0'); never executed: dst = vis(dst, *src, flag, '\0'); | 0 |
247 | *dst = '\0'; | - |
248 | return (dst - start); never executed: return (dst - start); | 0 |
249 | } | - |
250 | | - |
251 | #endif | - |
| | |