lib: Add a helper for mmap->bytes with openat(), use it in repo

This kills another GSystem consumer...I think down the line I'd like
to do something like "detect whether file is > 1k if so, mmap,
otherwise just readall()" so we can use this helper in more places.

Closes: #319
Approved by: jlebon
This commit is contained in:
Colin Walters 2016-06-03 11:00:10 -04:00 committed by Atomic Bot
parent 3a03a35071
commit 70e5489258
3 changed files with 26 additions and 3 deletions

View File

@ -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;

View File

@ -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);
}

View File

@ -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