* tests/tests.h (print_quoted_string): New prototype.
* tests/print_quoted_string.c: New file.
* tests/Makefile.am (libtests_a_SOURCES): Add it.
hexdump_strdup.c \
hexquote_strndup.c \
inode_of_sockfd.c \
+ print_quoted_string.c \
tail_alloc.c \
tests.h \
tprintf.c \
--- /dev/null
+#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;
+ }
+ }
+
+}
/* 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)