diff --git a/src/libostree/ostree-core.c b/src/libostree/ostree-core.c index 98d2f8a8..aa03c3c0 100644 --- a/src/libostree/ostree-core.c +++ b/src/libostree/ostree-core.c @@ -395,19 +395,17 @@ ostree_set_xattrs (GFile *f, } gboolean -ostree_parse_metadata_file (const char *path, +ostree_parse_metadata_file (GFile *file, OstreeSerializedVariantType *out_type, GVariant **out_variant, GError **error) { - GFile *pathf = NULL; gboolean ret = FALSE; GVariant *ret_variant = NULL; GVariant *container = NULL; guint32 ret_type; - pathf = ot_util_new_file_for_path (path); - if (!ot_util_variant_map (pathf, G_VARIANT_TYPE (OSTREE_SERIALIZED_VARIANT_FORMAT), + if (!ot_util_variant_map (file, G_VARIANT_TYPE (OSTREE_SERIALIZED_VARIANT_FORMAT), &container, error)) goto out; @@ -417,7 +415,8 @@ ostree_parse_metadata_file (const char *path, if (ret_type <= 0 || ret_type > OSTREE_SERIALIZED_VARIANT_LAST) { g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED, - "Corrupted metadata object '%s'; invalid type %d", path, ret_type); + "Corrupted metadata object '%s'; invalid type %d", + ot_gfile_get_path_cached (file), ret_type); goto out; } @@ -430,7 +429,6 @@ ostree_parse_metadata_file (const char *path, g_variant_unref (ret_variant); if (container != NULL) g_variant_unref (container); - g_clear_object (&pathf); return ret; } diff --git a/src/libostree/ostree-core.h b/src/libostree/ostree-core.h index 32d4c006..ba5320ee 100644 --- a/src/libostree/ostree-core.h +++ b/src/libostree/ostree-core.h @@ -102,7 +102,7 @@ GVariant *ostree_get_xattrs_for_file (GFile *f, gboolean ostree_set_xattrs (GFile *f, GVariant *xattrs, GCancellable *cancellable, GError **error); -gboolean ostree_parse_metadata_file (const char *path, +gboolean ostree_parse_metadata_file (GFile *file, OstreeSerializedVariantType *out_type, GVariant **out_variant, GError **error); diff --git a/src/libostree/ostree-repo.c b/src/libostree/ostree-repo.c index 82f9eb8c..59258338 100644 --- a/src/libostree/ostree-repo.c +++ b/src/libostree/ostree-repo.c @@ -1675,11 +1675,13 @@ ostree_repo_load_variant (OstreeRepo *self, OstreeSerializedVariantType ret_type; GVariant *ret_variant = NULL; char *path = NULL; + GFile *f = NULL; g_return_val_if_fail (error == NULL || *error == NULL, FALSE); path = ostree_repo_get_object_path (self, sha256, OSTREE_OBJECT_TYPE_META); - if (!ostree_parse_metadata_file (path, &ret_type, &ret_variant, error)) + f = ot_util_new_file_for_path (path); + if (!ostree_parse_metadata_file (f, &ret_type, &ret_variant, error)) goto out; ret = TRUE; @@ -1689,6 +1691,7 @@ ostree_repo_load_variant (OstreeRepo *self, out: if (ret_variant) g_variant_unref (ret_variant); + g_clear_object (&f); g_free (path); return ret; }