diff options
Diffstat (limited to 'src/lib/common.c')
-rw-r--r-- | src/lib/common.c | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/src/lib/common.c b/src/lib/common.c index 111366782..338e9316c 100644 --- a/src/lib/common.c +++ b/src/lib/common.c | |||
@@ -404,6 +404,61 @@ char *replace_cntrl_chars(const char *str, char c) { | |||
404 | return rv; | 404 | return rv; |
405 | } | 405 | } |
406 | 406 | ||
407 | char *escape_cntrl_chars(const char *str) { | ||
408 | if (str) { | ||
409 | unsigned int cntrl_chars = 0; | ||
410 | const char *c = str; | ||
411 | while (*c) { | ||
412 | switch (*c++) { | ||
413 | case '\b': | ||
414 | case '\a': | ||
415 | case '\e': | ||
416 | case '\f': | ||
417 | case '\n': | ||
418 | case '\r': | ||
419 | case '\t': | ||
420 | case '\v': | ||
421 | case '\"': | ||
422 | case '\'': | ||
423 | case '\?': | ||
424 | case '\\': | ||
425 | ++cntrl_chars; | ||
426 | default: break; | ||
427 | } | ||
428 | } | ||
429 | char *rv = malloc(strlen(str) + cntrl_chars + 1); | ||
430 | char *ptr = rv; | ||
431 | if (!rv) | ||
432 | errExit("malloc"); | ||
433 | c = str; | ||
434 | while (*c) { | ||
435 | if (iscntrl(*c)) { | ||
436 | *ptr++ = '\\'; | ||
437 | switch (*c) { | ||
438 | case '\b': *ptr++ = 'b'; break; | ||
439 | case '\a': *ptr++ = 'a'; break; | ||
440 | case '\e': *ptr++ = 'e'; break; | ||
441 | case '\f': *ptr++ = 'f'; break; | ||
442 | case '\n': *ptr++ = 'n'; break; | ||
443 | case '\r': *ptr++ = 'r'; break; | ||
444 | case '\t': *ptr++ = 't'; break; | ||
445 | case '\v': *ptr++ = 'v'; break; | ||
446 | case '\"': *ptr++ = '\"'; break; | ||
447 | case '\'': *ptr++ = '\''; break; | ||
448 | case '\?': *ptr++ = '?'; break; | ||
449 | case '\\': *ptr++ = '\\'; break; | ||
450 | } | ||
451 | } else { | ||
452 | *ptr++ = *c; | ||
453 | } | ||
454 | c++; | ||
455 | } | ||
456 | *ptr = '\0'; | ||
457 | return rv; | ||
458 | } | ||
459 | return NULL; | ||
460 | } | ||
461 | |||
407 | int has_cntrl_chars(const char *str) { | 462 | int has_cntrl_chars(const char *str) { |
408 | assert(str); | 463 | assert(str); |
409 | 464 | ||