static json_object_to_json_string_fn json_object_int_to_json_string;
static json_object_to_json_string_fn json_object_string_to_json_string;
static json_object_to_json_string_fn json_object_array_to_json_string;
+static json_object_to_json_string_fn _json_object_userdata_to_json_string;
/* ref count debugging */
errno = ENOMEM;
return NULL;
}
- json_object_set_serializer(jso, json_object_userdata_to_json_string,
+ json_object_set_serializer(jso, _json_object_userdata_to_json_string,
new_ds, json_object_free_userdata);
return jso;
}
+/*
+ * A wrapper around json_object_userdata_to_json_string() used only
+ * by json_object_new_double_s() just so json_object_set_double() can
+ * detect when it needs to reset the serializer to the default.
+ */
+static int _json_object_userdata_to_json_string(struct json_object *jso,
+ struct printbuf *pb, int level, int flags)
+{
+ return json_object_userdata_to_json_string(jso, pb, level, flags);
+}
+
int json_object_userdata_to_json_string(struct json_object *jso,
struct printbuf *pb, int level, int flags)
{
if (!jso || jso->o_type!=json_type_double)
return 0;
jso->o.c_double=new_value;
- if (jso->_to_json_string == &json_object_userdata_to_json_string)
+ if (jso->_to_json_string == &_json_object_userdata_to_json_string)
json_object_set_serializer(jso, NULL, NULL, NULL);
return 1;
}
if (!src->_userdata && !src->_user_delete)
return 0;
- if (dst->_to_json_string == json_object_userdata_to_json_string)
+ if (dst->_to_json_string == json_object_userdata_to_json_string ||
+ dst->_to_json_string == _json_object_userdata_to_json_string)
{
dst->_userdata = strdup(src->_userdata);
}
* The userdata field is used to store the string representation, so it
* can't be used for other data if this function is used.
*
- * An equivalent sequence of calls is:
+ * A roughly equivalent sequence of calls, with the difference being that
+ * the serialization function won't be reset by json_object_set_double(), is:
* @code
* jso = json_object_new_double(d);
* json_object_set_serializer(jso, json_object_userdata_to_json_string,
* if it is not without any further actions. If type of obj is json_type_double
* the object value is changed to new_value
*
+ * If the object was created with json_object_new_double_s(), the serialization
+ * function is reset to the default and the cached serialized value is cleared.
+ *
* @param obj the json_object instance
* @param new_value the value to be set
* @returns 1 if value is set correctly, 0 otherwise