Skip to content

Commit

Permalink
json: New function json_string_escape().
Browse files Browse the repository at this point in the history
This saves some cut-and-paste duplicated code elsewhere and will have
additional users in upcoming commits.

Signed-off-by: Ben Pfaff <[email protected]>
Acked-by: Russell Bryant <[email protected]>
  • Loading branch information
blp committed Apr 20, 2015
1 parent f4471a0 commit 3b62677
Show file tree
Hide file tree
Showing 4 changed files with 16 additions and 27 deletions.
12 changes: 11 additions & 1 deletion lib/json.c
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* 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.
Expand Down Expand Up @@ -879,6 +879,16 @@ json_string_unescape(const char *in, size_t in_len, char **outp)
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)
{
Expand Down
3 changes: 2 additions & 1 deletion lib/json.h
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright (c) 2009, 2010 Nicira, Inc.
* Copyright (c) 2009, 2010, 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.
Expand Down Expand Up @@ -131,6 +131,7 @@ void json_to_ds(const struct json *, int flags, struct ds *);
/* JSON string formatting operations. */

bool json_string_unescape(const char *in, size_t in_len, char **outp);
void json_string_escape(const char *in, struct ds *out);

#ifdef __cplusplus
}
Expand Down
12 changes: 1 addition & 11 deletions ovn/lib/expr.c
Original file line number Diff line number Diff line change
Expand Up @@ -282,16 +282,6 @@ find_bitwise_range(const union mf_subvalue *sv, int width,
*startp = *n_bitsp = 0;
}

static void
expr_format_string(const char *s, struct ds *ds)
{
struct json json = {
.type = JSON_STRING,
.u.string = CONST_CAST(char *, s),
};
json_to_ds(&json, 0, ds);
}

static void
expr_format_cmp(const struct expr *e, struct ds *s)
{
Expand All @@ -300,7 +290,7 @@ expr_format_cmp(const struct expr *e, struct ds *s)
if (!e->cmp.symbol->width) {
ds_put_format(s, "%s %s ", e->cmp.symbol->name,
expr_relop_to_string(e->cmp.relop));
expr_format_string(e->cmp.string, s);
json_string_escape(e->cmp.string, s);
return;
}

Expand Down
16 changes: 2 additions & 14 deletions ovn/lib/lex.c
Original file line number Diff line number Diff line change
Expand Up @@ -128,16 +128,6 @@ lex_token_format_masked_integer(const struct lex_token *token, struct ds *s)
}
}

static void
lex_token_format_string(const char *s, struct ds *ds)
{
struct json json = {
.type = JSON_STRING,
.u.string = CONST_CAST(char *, s),
};
json_to_ds(&json, 0, ds);
}

/* Appends a string representation of 'token' to 's', in a format that can be
* losslessly parsed back by the lexer. (LEX_T_END and LEX_T_ERROR can't be
* parsed back.) */
Expand All @@ -155,14 +145,12 @@ lex_token_format(struct lex_token *token, struct ds *s)

case LEX_T_ERROR:
ds_put_cstr(s, "error(");
lex_token_format_string(token->s, s);
json_string_escape(token->s, s);
ds_put_char(s, ')');
break;

case LEX_T_STRING:
lex_token_format_string(token->s, s);
break;

json_string_escape(token->s, s);
break;

case LEX_T_INTEGER:
Expand Down

0 comments on commit 3b62677

Please sign in to comment.