diff options
author | Garrett Regier <garrettregier@gmail.com> | 2017-06-16 17:14:35 -0700 |
---|---|---|
committer | Garrett Regier <garrettregier@gmail.com> | 2017-06-16 17:16:32 -0700 |
commit | 0c01de6d988539a3929f0ee9bbc39f1245ae0cdf (patch) | |
tree | 89d63c55b34944d209bfbef24c15328d6d8c10a6 /json-glib/json-generator.c | |
parent | d78ad648942637fb9212d1d93670509d4c7f687b (diff) | |
download | json-glib-0c01de6d988539a3929f0ee9bbc39f1245ae0cdf.tar.gz |
generator: Add an GString-based method
This allows callers to avoid extra allocations
when dumping to a preexisting string.
https://bugzilla.gnome.org/show_bug.cgi?id=773504
Diffstat (limited to 'json-glib/json-generator.c')
-rw-r--r-- | json-glib/json-generator.c | 41 |
1 files changed, 30 insertions, 11 deletions
diff --git a/json-glib/json-generator.c b/json-glib/json-generator.c index 0afe881..346be65 100644 --- a/json-glib/json-generator.c +++ b/json-glib/json-generator.c @@ -478,6 +478,35 @@ json_generator_new (void) } /** + * json_generator_to_gstring: + * @generator: a #JsonGenerator + * @string: a #GString + * + * Generates a JSON data stream from @generator + * and appends it to @string. + * + * Return value: (transfer none): a #GString holding a JSON data stream. + * Use g_string_free() to free the allocated resources. + * + * Since: 1.4 + */ +GString * +json_generator_to_gstring (JsonGenerator *generator, + GString *string) +{ + JsonNode *root; + + g_return_val_if_fail (JSON_IS_GENERATOR (generator), NULL); + g_return_val_if_fail (string != NULL, NULL); + + root = generator->priv->root; + if (root != NULL) + dump_node (generator, string, 0, NULL, root); + + return string; +} + +/** * json_generator_to_data: * @generator: a #JsonGenerator * @length: (out): return location for the length of the returned @@ -493,22 +522,12 @@ gchar * json_generator_to_data (JsonGenerator *generator, gsize *length) { - JsonNode *root; GString *string; g_return_val_if_fail (JSON_IS_GENERATOR (generator), NULL); - root = generator->priv->root; - if (!root) - { - if (length) - *length = 0; - - return NULL; - } - string = g_string_new (""); - dump_node (generator, string, 0, NULL, root); + json_generator_to_gstring (generator, string); if (length) *length = string->len; |