Merge branch 'jobol-issue-165'

This commit is contained in:
Eric Haszlakiewicz
2016-08-09 07:38:18 -04:00
3 changed files with 58 additions and 13 deletions

View File

@@ -295,20 +295,35 @@ void json_object_set_serializer(json_object *jso,
/* extended conversion to string */ /* extended conversion to string */
const char* json_object_to_json_string_ext(struct json_object *jso, int flags) const char* json_object_to_json_string_length(struct json_object *jso, int flags, size_t *length)
{ {
const char *r = NULL;
size_t s = 0;
if (!jso) if (!jso)
return "null"; {
s = 4;
if ((!jso->_pb) && !(jso->_pb = printbuf_new())) r = "null";
return NULL; }
else if ((jso->_pb) || (jso->_pb = printbuf_new()))
{
printbuf_reset(jso->_pb); printbuf_reset(jso->_pb);
if(jso->_to_json_string(jso, jso->_pb, 0, flags) < 0) if(jso->_to_json_string(jso, jso->_pb, 0, flags) >= 0)
return NULL; {
s = (size_t)jso->_pb->bpos;
r = jso->_pb->buf;
}
}
return jso->_pb->buf; if (length)
*length = s;
return r;
}
const char* json_object_to_json_string_ext(struct json_object *jso, int flags)
{
return json_object_to_json_string_length(jso, flags, NULL);
} }
/* backwards-compatible conversion to string */ /* backwards-compatible conversion to string */

View File

@@ -223,6 +223,16 @@ extern const char* json_object_to_json_string(struct json_object *obj);
extern const char* json_object_to_json_string_ext(struct json_object *obj, int extern const char* json_object_to_json_string_ext(struct json_object *obj, int
flags); flags);
/** Stringify object to json format
* @see json_object_to_json_string() for details on how to free string.
* @param obj the json_object instance
* @param flags formatting options, see JSON_C_TO_STRING_PRETTY and other constants
* @param length a pointer where, if not NULL, the length (without null) is stored
* @returns a string in JSON format and the length if not NULL
*/
extern const char* json_object_to_json_string_length(struct json_object *obj, int
flags, size_t *length);
/** /**
* Returns the userdata set by json_object_set_userdata() or * Returns the userdata set by json_object_set_userdata() or
* json_object_set_serializer() * json_object_set_serializer()

View File

@@ -28,7 +28,27 @@ static int sort_fn (const void *j1, const void *j2)
} }
#ifdef TEST_FORMATTED #ifdef TEST_FORMATTED
#define json_object_to_json_string(obj) json_object_to_json_string_ext(obj,sflags) static const char *to_json_string(json_object *obj, int flags)
{
size_t length;
char *copy;
const char *result;
result = json_object_to_json_string_length(obj, flags, &length);
copy = strndup(result, length);
if (copy == NULL)
printf("to_json_string: Allocation failed!\n");
else {
result = json_object_to_json_string_ext(obj, flags);
if (length != strlen(result))
printf("to_json_string: Length mismatch!\n");
if (strcmp(copy, result) != 0)
printf("to_json_string: Comparison Failed!\n");
free(copy);
}
return result;
}
#define json_object_to_json_string(obj) to_json_string(obj,sflags)
#else #else
/* no special define */ /* no special define */
#endif #endif