diff options
author | Philip Withnall <philip@tecnocode.co.uk> | 2023-04-14 12:01:28 +0000 |
---|---|---|
committer | Philip Withnall <philip@tecnocode.co.uk> | 2023-04-14 12:01:28 +0000 |
commit | 89dbdb9ab45721189e195c7e70ed620143d840f7 (patch) | |
tree | ce4286ed40b025303d4c151d20ada54c5586b277 | |
parent | 0854af0fdb6d527a8d1999835ac2c5059976c210 (diff) | |
parent | c70e06b42823950d7adeabf100cba6a004f9199f (diff) | |
download | gvdb-main.tar.gz |
Add getter for GVDB table contents
See merge request GNOME/gvdb!19
-rw-r--r-- | gvdb/gvdb-builder.c | 34 | ||||
-rw-r--r-- | gvdb/gvdb-builder.h | 4 |
2 files changed, 29 insertions, 9 deletions
diff --git a/gvdb/gvdb-builder.c b/gvdb/gvdb-builder.c index 5dae03e..336f6bb 100644 --- a/gvdb/gvdb-builder.c +++ b/gvdb/gvdb-builder.c @@ -509,28 +509,44 @@ file_builder_serialise (FileBuilder *fb, return result; } +GBytes * +gvdb_table_get_contents (GHashTable *table, + gboolean byteswap) +{ + struct gvdb_pointer root; + FileBuilder *fb; + GString *str; + GBytes *res; + gsize str_len; + + fb = file_builder_new (byteswap); + file_builder_add_hash (fb, table, &root); + str = file_builder_serialise (fb, root); + + str_len = str->len; + res = g_bytes_new_take (g_string_free (str, FALSE), str_len); + + return res; +} + gboolean gvdb_table_write_contents (GHashTable *table, const gchar *filename, gboolean byteswap, GError **error) { - struct gvdb_pointer root; + GBytes *content; gboolean status; - FileBuilder *fb; - GString *str; g_return_val_if_fail (table != NULL, FALSE); g_return_val_if_fail (filename != NULL, FALSE); g_return_val_if_fail (error == NULL || *error == NULL, FALSE); - fb = file_builder_new (byteswap); - file_builder_add_hash (fb, table, &root); - str = file_builder_serialise (fb, root); - file_builder_free (fb); + content = gvdb_table_get_contents (table, byteswap); + + status = g_file_set_contents (filename, g_bytes_get_data (content, NULL), g_bytes_get_size (content), error); - status = g_file_set_contents (filename, str->str, str->len, error); - g_string_free (str, TRUE); + g_bytes_unref (content); return status; } diff --git a/gvdb/gvdb-builder.h b/gvdb/gvdb-builder.h index 30757d0..e64a7b9 100644 --- a/gvdb/gvdb-builder.h +++ b/gvdb/gvdb-builder.h @@ -63,4 +63,8 @@ gboolean gvdb_table_write_contents_finish (GHashTa GAsyncResult *result, GError **error); +G_GNUC_INTERNAL +GBytes * gvdb_table_get_contents (GHashTable *table, + gboolean byteswap); + #endif /* __gvdb_builder_h__ */ |