diff --git a/Makefile-ostadmin.am b/Makefile-ostadmin.am index d8305dcb..6872a21a 100644 --- a/Makefile-ostadmin.am +++ b/Makefile-ostadmin.am @@ -25,5 +25,5 @@ ostadmin_SOURCES = src/ostadmin/main.c \ src/ostadmin/ot-admin-main.c \ $(NULL) -ostadmin_CFLAGS = $(AM_CFLAGS) -I$(srcdir)/src/libotutil -I$(srcdir)/src/ostadmin -DLOCALEDIR=\"$(datadir)/locale\" $(OT_DEP_GIO_UNIX_CFLAGS) -ostadmin_LDADD = libotutil.la $(OT_DEP_GIO_UNIX_LIBS) +ostadmin_CFLAGS = $(AM_CFLAGS) -I$(srcdir)/src/libotutil -I$(srcdir)/src/libostree -I$(srcdir)/src/ostadmin -DLOCALEDIR=\"$(datadir)/locale\" $(OT_DEP_GIO_UNIX_CFLAGS) +ostadmin_LDADD = libotutil.la libostree.la $(OT_DEP_GIO_UNIX_LIBS) diff --git a/src/libostree/ostree-core.c b/src/libostree/ostree-core.c index 61718d5b..5d2b07e2 100644 --- a/src/libostree/ostree-core.c +++ b/src/libostree/ostree-core.c @@ -20,12 +20,17 @@ * Author: Colin Walters */ +/* for mkdtemp */ +#define _GNU_SOURCE + #include "config.h" #include "ostree.h" #include "otutil.h" #include +#include +#include #include #define ALIGN_VALUE(this, boundary) \ @@ -1303,6 +1308,40 @@ ostree_create_temp_regular_file (GFile *dir, return ret; } +gboolean +ostree_create_temp_dir (GFile *dir, + const char *prefix, + const char *suffix, + GFile **out_file, + GCancellable *cancellable, + GError **error) +{ + gboolean ret = FALSE; + ot_lfree char *template = NULL; + ot_lobj GFile *ret_file = NULL; + + if (dir == NULL) + dir = g_file_new_for_path (g_get_tmp_dir ()); + + template = g_strdup_printf ("%s/%s-XXXXXX-%s", + ot_gfile_get_path_cached (dir), + prefix ? prefix : "tmp", + suffix ? suffix : "tmp"); + + if (mkdtemp (template) == NULL) + { + ot_util_set_error_from_errno (error, errno); + goto out; + } + + ret_file = g_file_new_for_path (template); + + ret = TRUE; + ot_transfer_out_value (out_file, &ret_file); + out: + return ret; +} + gboolean ostree_read_pack_entry_raw (guchar *pack_data, guint64 pack_len, diff --git a/src/libostree/ostree-core.h b/src/libostree/ostree-core.h index bc08d387..3617b01e 100644 --- a/src/libostree/ostree-core.h +++ b/src/libostree/ostree-core.h @@ -297,6 +297,13 @@ gboolean ostree_create_temp_regular_file (GFile *dir, GCancellable *cancellable, GError **error); +gboolean ostree_create_temp_dir (GFile *dir, + const char *prefix, + const char *suffix, + GFile **out_file, + GCancellable *cancellable, + GError **error); + gboolean ostree_read_pack_entry_raw (guchar *pack_data, guint64 pack_len, guint64 object_offset, diff --git a/src/ostadmin/ot-admin-builtin-deploy.c b/src/ostadmin/ot-admin-builtin-deploy.c index 64549e47..509cb143 100644 --- a/src/ostadmin/ot-admin-builtin-deploy.c +++ b/src/ostadmin/ot-admin-builtin-deploy.c @@ -23,7 +23,7 @@ #include "config.h" #include "ot-admin-builtins.h" -#include "otutil.h" +#include "ostree.h" #include #include @@ -74,12 +74,14 @@ update_initramfs (const char *release, if (!g_file_query_exists (initramfs_file, NULL)) { ot_lptrarray GPtrArray *mkinitramfs_args = NULL; - ot_lfree char *tmpdir = NULL; + ot_lobj GFile *tmpdir = NULL; ot_lfree char *initramfs_tmp_path = NULL; ot_lobj GFile *initramfs_tmp_file = NULL; ot_lobj GFileInfo *initramfs_tmp_info = NULL; - if ((tmpdir = g_dir_make_tmp ("ostree-initramfs.XXXXXX", error)) == NULL) + + if (!ostree_create_temp_dir (NULL, "ostree-initramfs", NULL, &tmpdir, + cancellable, error)) goto out; last_deploy_path = g_build_filename ("/ostree", last_deploy_target, NULL); @@ -95,7 +97,7 @@ update_initramfs (const char *release, "--mount-proc", "/proc", "--mount-bind", "/dev", "/dev", "--mount-bind", "/ostree/var", "/var", - "--mount-bind", tmpdir, "/tmp", + "--mount-bind", ot_gfile_get_path_cached (tmpdir), "/tmp", "--mount-bind", "/ostree/modules", "/lib/modules", last_deploy_path, "dracut", "-f", "/tmp/initramfs-ostree.img", release, @@ -106,13 +108,9 @@ update_initramfs (const char *release, if (!ot_spawn_sync_checked (NULL, (char**)mkinitramfs_args->pdata, NULL, G_SPAWN_SEARCH_PATH, NULL, NULL, NULL, NULL, error)) - { - (void) unlink (initramfs_tmp_path); - goto out; - } + goto out; - initramfs_tmp_path = g_build_filename (tmpdir, "initramfs-ostree.img", NULL); - initramfs_tmp_file = g_file_new_for_path (initramfs_tmp_path); + initramfs_tmp_file = g_file_get_child (tmpdir, "initramfs-ostree.img"); initramfs_tmp_info = g_file_query_info (initramfs_tmp_file, OSTREE_GIO_FAST_QUERYINFO, G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS, cancellable, error); @@ -131,8 +129,8 @@ update_initramfs (const char *release, g_print ("Created: %s\n", ot_gfile_get_path_cached (initramfs_file)); - (void) unlink (initramfs_tmp_path); - (void) rmdir (tmpdir); + (void) ot_gfile_unlink (initramfs_tmp_file, NULL, NULL); + (void) rmdir (ot_gfile_get_path_cached (tmpdir)); } ret = TRUE;