From: JayRJoshi Date: Wed, 23 Mar 2016 13:34:15 +0000 (+0530) Subject: tests: add print_quoted_string function to libtests X-Git-Tag: v4.12~508 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=17654da6211277a277e05b9d08c16530a0a4a529;p=strace tests: add print_quoted_string function to libtests * tests/tests.h (print_quoted_string): New prototype. * tests/print_quoted_string.c: New file. * tests/Makefile.am (libtests_a_SOURCES): Add it. --- diff --git a/tests/Makefile.am b/tests/Makefile.am index 30053821..add44efe 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -46,6 +46,7 @@ libtests_a_SOURCES = \ hexdump_strdup.c \ hexquote_strndup.c \ inode_of_sockfd.c \ + print_quoted_string.c \ tail_alloc.c \ tests.h \ tprintf.c \ diff --git a/tests/print_quoted_string.c b/tests/print_quoted_string.c new file mode 100644 index 00000000..18a9ccfb --- /dev/null +++ b/tests/print_quoted_string.c @@ -0,0 +1,67 @@ +#include "tests.h" + +#include +#include + +/* + * Based on string_quote() from util.c. + * Assumes instr is NUL-terminated. + */ + +void +print_quoted_string(const char *instr) +{ + const unsigned char *str = (const unsigned char*) instr; + int c; + + while ((c = *(str++))) { + switch (c) { + case '\"': + printf("\\\""); + break; + case '\\': + printf("\\\\"); + break; + case '\f': + printf("\\f"); + break; + case '\n': + printf("\\n"); + break; + case '\r': + printf("\\r"); + break; + case '\t': + printf("\\t"); + break; + case '\v': + printf("\\v"); + break; + default: + if (c >= ' ' && c <= 0x7e) + putchar(c); + else { + putchar('\\'); + + char c1 = '0' + (c & 0x7); + char c2 = '0' + ((c >> 3) & 0x7); + char c3 = '0' + (c >> 6); + + if (*str >= '0' && *str <= '9') { + /* Print \octal */ + putchar(c3); + putchar(c2); + } else { + /* Print \[[o]o]o */ + if (c3 != '0') + putchar(c3); + if (c3 != '0' || c2 != '0') + putchar(c2); + } + putchar(c1); + } + break; + } + } + +} diff --git a/tests/tests.h b/tests/tests.h index 826f8b2f..d8632ba3 100644 --- a/tests/tests.h +++ b/tests/tests.h @@ -75,6 +75,9 @@ const char *hexquote_strndup(const char *, size_t); /* Return inode number of socket descriptor. */ unsigned long inode_of_sockfd(int); +/* Print string in quoted form. */ +void print_quoted_string(const char *str); + # define ARRAY_SIZE(arg) ((unsigned int) (sizeof(arg) / sizeof((arg)[0]))) # define LENGTH_OF(arg) ((unsigned int) sizeof(arg) - 1)