#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;
		}
	}

}
