bootconfig: Add ostree_bootconfig_parser_write_at

This fd-relative API will be used by later libostree porting in the
deploy code path.
This commit is contained in:
Colin Walters 2015-04-20 22:23:39 -04:00
parent 506a891e36
commit 3a4f90cf8e
2 changed files with 28 additions and 12 deletions

View File

@ -158,18 +158,18 @@ write_key (OstreeBootconfigParser *self,
g_string_append (buf, value);
g_string_append_c (buf, '\n');
}
gboolean
ostree_bootconfig_parser_write (OstreeBootconfigParser *self,
GFile *output,
GCancellable *cancellable,
GError **error)
ostree_bootconfig_parser_write_at (OstreeBootconfigParser *self,
int dfd,
const char *path,
GCancellable *cancellable,
GError **error)
{
gboolean ret = FALSE;
GHashTableIter hashiter;
gpointer hashkey, hashvalue;
GString *buf = g_string_new ("");
g_autoptr(GBytes) bytes = NULL;
guint i;
g_autoptr(GHashTable) written_overrides = NULL;
@ -205,18 +205,28 @@ ostree_bootconfig_parser_write (OstreeBootconfigParser *self,
write_key (self, buf, hashkey, hashvalue);
}
bytes = g_string_free_to_bytes (buf);
buf = NULL;
if (!ot_gfile_replace_contents_fsync (output, bytes,
cancellable, error))
if (!glnx_file_replace_contents_at (dfd, path, (guint8*)buf->str, buf->len,
GLNX_FILE_REPLACE_NODATASYNC,
cancellable, error))
goto out;
ret = TRUE;
out:
if (buf) g_string_free (buf, TRUE);
if (buf)
g_string_free (buf, TRUE);
return ret;
}
gboolean
ostree_bootconfig_parser_write (OstreeBootconfigParser *self,
GFile *output,
GCancellable *cancellable,
GError **error)
{
return ostree_bootconfig_parser_write_at (self,
AT_FDCWD, gs_file_get_path_cached (output),
cancellable, error);
}
static void
ostree_bootconfig_parser_finalize (GObject *object)

View File

@ -52,6 +52,12 @@ gboolean ostree_bootconfig_parser_write (OstreeBootconfigParser *self,
GCancellable *cancellable,
GError **error);
gboolean ostree_bootconfig_parser_write_at (OstreeBootconfigParser *self,
int dfd,
const char *path,
GCancellable *cancellable,
GError **error);
void ostree_bootconfig_parser_set (OstreeBootconfigParser *self,
const char *key,
const char *value);