diff options
Diffstat (limited to 'common.c')
-rw-r--r-- | common.c | 20 |
1 files changed, 19 insertions, 1 deletions
@@ -782,6 +782,24 @@ 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) { switch (value->type) @@ -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: { |