diff --git a/src/libostree/ostree-repo.c b/src/libostree/ostree-repo.c index 2a26ffed..5c4e941e 100644 --- a/src/libostree/ostree-repo.c +++ b/src/libostree/ostree-repo.c @@ -4618,7 +4618,6 @@ ostree_repo_add_gpg_signature_summary (OstreeRepo *self, { gboolean ret = FALSE; g_autoptr(GBytes) summary_data = NULL; - g_autoptr(GFile) summary_file = NULL; g_autoptr(GFile) signature_path = NULL; g_autoptr(GVariant) existing_signatures = NULL; g_autoptr(GVariant) new_metadata = NULL; @@ -4626,8 +4625,7 @@ ostree_repo_add_gpg_signature_summary (OstreeRepo *self, guint i; signature_path = g_file_resolve_relative_path (self->repodir, "summary.sig"); - summary_file = g_file_resolve_relative_path (self->repodir, "summary"); - summary_data = gs_file_map_readonly (summary_file, cancellable, error); + summary_data = ot_file_mapat_bytes (self->repo_dir_fd, "summary", error); if (!summary_data) goto out; diff --git a/src/libotutil/ot-fs-utils.c b/src/libotutil/ot-fs-utils.c index 4d45cd06..46a0405b 100644 --- a/src/libotutil/ot-fs-utils.c +++ b/src/libotutil/ot-fs-utils.c @@ -230,3 +230,24 @@ ot_openat_ignore_enoent (int dfd, out: return ret; } + +GBytes * +ot_file_mapat_bytes (int dfd, + const char *path, + GError **error) +{ + glnx_fd_close int fd = openat (dfd, path, O_RDONLY | O_CLOEXEC); + g_autoptr(GMappedFile) mfile = NULL; + + if (fd < 0) + { + glnx_set_error_from_errno (error); + return FALSE; + } + + mfile = g_mapped_file_new_from_fd (fd, FALSE, error); + if (!mfile) + return FALSE; + + return g_mapped_file_get_bytes (mfile); +} diff --git a/src/libotutil/ot-fs-utils.h b/src/libotutil/ot-fs-utils.h index cfeea74d..27f0f38e 100644 --- a/src/libotutil/ot-fs-utils.h +++ b/src/libotutil/ot-fs-utils.h @@ -66,4 +66,8 @@ gboolean ot_openat_ignore_enoent (int dfd, int *out_fd, GError **error); +GBytes *ot_file_mapat_bytes (int dfd, + const char *path, + GError **error); + G_END_DECLS