MCPcopy Create free account
hub / github.com/OpenSIPS/opensips / log_escape_json_buf

Function log_escape_json_buf

dprint.c:235–306  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

233#define DP_JSON_MSG_END "\"}"
234
235static int log_escape_json_buf(char *src, int src_len, char *dst, int dst_max_len)
236{
237 int i, j = 0;
238 int rlen = 0;
239
240 /* calculate the required length in the dst buffer */
241 for (i=0; i<src_len; i++) {
242 rlen++;
243
244 switch (src[i]) {
245 case '\\':
246 case '\"':
247 case '\b':
248 case '\f':
249 case '\n':
250 case '\r':
251 case '\t':
252 rlen++; /* +1 for the backslash */
253 break;
254 default:
255 if (src[i] < 32)
256 rlen += 6; /* +6 for \uXXXX */
257 }
258 }
259
260 if (rlen>dst_max_len) {
261 stderr_dprint_tmp_err("buffer too small! needed: %d\n", rlen);
262 return -1;
263 } else if (rlen == src_len) {
264 /* nothing needs to be escaped */
265 memcpy(dst, src, src_len);
266 return src_len;
267 }
268
269 for (i=0; i<src_len; i++) {
270 if (src[i] > 31 && src[i] != '\\' && src[i] != '\"') {
271 dst[j++] = src[i];
272 } else {
273 dst[j++] = '\\';
274
275 switch (src[i]) {
276 case '\\':
277 dst[j++] = '\\';
278 break;
279 case '\"':
280 dst[j++] = '\"';
281 break;
282 case '\b':
283 dst[j++] = 'b';
284 break;
285 case '\f':
286 dst[j++] = 'f';
287 break;
288 case '\n':
289 dst[j++] = 'n';
290 break;
291 case '\r':
292 dst[j++] = 'r';

Callers 1

log_print_jsonFunction · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected