/*
- * Copyright (c) 2009, 2010, 2011, 2012, 2014 Nicira, Inc.
+ * Copyright (c) 2009, 2010, 2011, 2012, 2014, 2015 Nicira, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
static void json_parser_input(struct json_parser *, struct json_token *);
static void json_error(struct json_parser *p, const char *format, ...)
- PRINTF_FORMAT(2, 3);
+ OVS_PRINTF_FORMAT(2, 3);
\f
const char *
json_type_to_string(enum json_type type)
json_lex_4hex(const char *cp, const char *end, int *valuep)
{
unsigned int value;
+ bool ok;
if (cp + 4 > end) {
return "quoted string ends within \\u escape";
}
- value = hexits_value(cp, 4, NULL);
- if (value == UINT_MAX) {
+ value = hexits_value(cp, 4, &ok);
+ if (!ok) {
return "malformed \\u escape";
}
if (!value) {
* lexer will never pass in a string that ends in a single
* backslash, but json_string_unescape() has other callers that
* are not as careful.*/
+ ds_clear(&out);
ds_put_cstr(&out, "quoted string may not end with backslash");
goto exit;
}
return ok;
}
+void
+json_string_escape(const char *in, struct ds *out)
+{
+ struct json json = {
+ .type = JSON_STRING,
+ .u.string = CONST_CAST(char *, in),
+ };
+ json_to_ds(&json, 0, out);
+}
+
static void
json_parser_input_string(struct json_parser *p, const char *s)
{