projects
/
openvswitch
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
ovs-vsctl: Allow "get" commands to create @names also.
[openvswitch]
/
lib
/
json.c
diff --git
a/lib/json.c
b/lib/json.c
index 10fa3c121011a88876a5b43097b70de89a608572..5887f677a42d731f71ade48ea1368f196bcb2c9d 100644
(file)
--- a/
lib/json.c
+++ b/
lib/json.c
@@
-277,7
+277,7
@@
json_real_create(double real)
void
json_object_put(struct json *json, const char *name, struct json *value)
{
void
json_object_put(struct json *json, const char *name, struct json *value)
{
-
shash_add(json->u.object, name, value
);
+
json_destroy(shash_replace(json->u.object, name, value)
);
}
void
}
void
@@
-607,7
+607,6
@@
json_lex_number(struct json_parser *p)
const char *cp = ds_cstr(&p->buffer);
unsigned long long int significand = 0;
struct json_token token;
const char *cp = ds_cstr(&p->buffer);
unsigned long long int significand = 0;
struct json_token token;
- int sig_digits = 0;
bool imprecise = false;
bool negative = false;
int pow10 = 0;
bool imprecise = false;
bool negative = false;
int pow10 = 0;
@@
-621,7
+620,6
@@
json_lex_number(struct json_parser *p)
/* At least one integer digit, but 0 may not be used as a leading digit for
* a longer number. */
significand = 0;
/* At least one integer digit, but 0 may not be used as a leading digit for
* a longer number. */
significand = 0;
- sig_digits = 0;
if (*cp == '0') {
cp++;
if (isdigit(*cp)) {
if (*cp == '0') {
cp++;
if (isdigit(*cp)) {
@@
-632,7
+630,6
@@
json_lex_number(struct json_parser *p)
do {
if (significand <= ULLONG_MAX / 10) {
significand = significand * 10 + (*cp - '0');
do {
if (significand <= ULLONG_MAX / 10) {
significand = significand * 10 + (*cp - '0');
- sig_digits++;
} else {
pow10++;
if (*cp != '0') {
} else {
pow10++;
if (*cp != '0') {
@@
-656,7
+653,6
@@
json_lex_number(struct json_parser *p)
do {
if (significand <= ULLONG_MAX / 10) {
significand = significand * 10 + (*cp - '0');
do {
if (significand <= ULLONG_MAX / 10) {
significand = significand * 10 + (*cp - '0');
- sig_digits++;
pow10--;
} else if (*cp != '0') {
imprecise = true;
pow10--;
} else if (*cp != '0') {
imprecise = true;
@@
-709,7
+705,6
@@
json_lex_number(struct json_parser *p)
*
* We suppress negative zeros as a matter of policy. */
if (!significand) {
*
* We suppress negative zeros as a matter of policy. */
if (!significand) {
- struct json_token token;
token.type = T_INTEGER;
token.u.integer = 0;
json_parser_input(p, &token);
token.type = T_INTEGER;
token.u.integer = 0;
json_parser_input(p, &token);
@@
-719,12
+714,10
@@
json_lex_number(struct json_parser *p)
if (!imprecise) {
while (pow10 > 0 && significand < ULLONG_MAX / 10) {
significand *= 10;
if (!imprecise) {
while (pow10 > 0 && significand < ULLONG_MAX / 10) {
significand *= 10;
- sig_digits++;
pow10--;
}
while (pow10 < 0 && significand % 10 == 0) {
significand /= 10;
pow10--;
}
while (pow10 < 0 && significand % 10 == 0) {
significand /= 10;
- sig_digits--;
pow10++;
}
if (pow10 == 0
pow10++;
}
if (pow10 == 0
@@
-1192,7
+1185,7
@@
json_parser_put_value(struct json_parser *p, struct json *value)
}
}
}
}
-static
struct json_parser_node *
+static
void
json_parser_push(struct json_parser *p,
struct json *new_json, enum json_parse_state new_state)
{
json_parser_push(struct json_parser *p,
struct json *new_json, enum json_parse_state new_state)
{
@@
-1211,12
+1204,10
@@
json_parser_push(struct json_parser *p,
node = &p->stack[p->height++];
node->json = new_json;
p->parse_state = new_state;
node = &p->stack[p->height++];
node->json = new_json;
p->parse_state = new_state;
- return node;
} else {
json_destroy(new_json);
json_error(p, "input exceeds maximum nesting depth %d",
JSON_MAX_HEIGHT);
} else {
json_destroy(new_json);
json_error(p, "input exceeds maximum nesting depth %d",
JSON_MAX_HEIGHT);
- return NULL;
}
}
}
}