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.
This commit is contained in:
parent
032a9a4358
commit
17654da621
@ -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 \
|
||||
|
67
tests/print_quoted_string.c
Normal file
67
tests/print_quoted_string.c
Normal file
@ -0,0 +1,67 @@
|
||||
#include "tests.h"
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
/*
|
||||
* 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;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@ -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)
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user