summaryrefslogtreecommitdiff
path: root/json-glib/json-generator.c
diff options
context:
space:
mode:
authorGarrett Regier <garrettregier@gmail.com>2017-06-16 17:14:35 -0700
committerGarrett Regier <garrettregier@gmail.com>2017-06-16 17:16:32 -0700
commit0c01de6d988539a3929f0ee9bbc39f1245ae0cdf (patch)
tree89d63c55b34944d209bfbef24c15328d6d8c10a6 /json-glib/json-generator.c
parentd78ad648942637fb9212d1d93670509d4c7f687b (diff)
downloadjson-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.c41
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;