From 83e159d9451fce521a04c2bf09bb6abe866c6231 Mon Sep 17 00:00:00 2001
From: Přemysl Janouch 
Date: Sat, 2 May 2015 04:02:23 +0200
Subject: config: finish config_item_write() implementation
---
 common.c | 20 +++++++++++++++++++-
 1 file changed, 19 insertions(+), 1 deletion(-)
diff --git a/common.c b/common.c
index 3dee9a5..67781dc 100644
--- a/common.c
+++ b/common.c
@@ -781,6 +781,24 @@ struct config_writer
 static void config_item_write_object_innards
 	(struct config_writer *self, struct config_item_ *object);
 
+static void
+config_item_write_string (struct str *output, const struct str *s)
+{
+	str_append_c (output, '"');
+	for (size_t i = 0; i < s->len; i++)
+	{
+		unsigned char c = s->str[i];
+		if      (c == '\n')  str_append        (output, "\\n");
+		else if (c == '\r')  str_append        (output, "\\r");
+		else if (c == '\t')  str_append        (output, "\\t");
+		else if (c == '\\')  str_append        (output, "\\\\");
+		else if (c == '"')   str_append        (output, "\\\"");
+		else if (c < 32)     str_append_printf (output, "\\x%02x", c);
+		else                 str_append_c      (output, c);
+	}
+	str_append_c (output, '"');
+}
+
 static void
 config_item_write_value (struct config_writer *self, struct config_item_ *value)
 {
@@ -797,7 +815,7 @@ config_item_write_value (struct config_writer *self, struct config_item_ *value)
 		break;
 	case CONFIG_ITEM_STRING:
 	case CONFIG_ITEM_STRING_ARRAY:
-		// TODO
+		config_item_write_string (self->output, &value->value.string);
 		break;
 	case CONFIG_ITEM_OBJECT:
 	{
-- 
cgit v1.2.3-70-g09d2