#include "tests.h" #include <stdio.h> #include <stdlib.h> #include <string.h> /* * Based on string_quote() from util.c. * Assumes instr is NUL-terminated. */ void print_quoted_string(const char *instr) { print_quoted_memory(instr, strlen(instr)); } void print_quoted_memory(const char *instr, const size_t len) { const unsigned char *str = (const unsigned char*) instr; size_t i; for (i = 0; i < len; ++i) { const int c = str[i]; 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; } } }