[ostree] core: Switch to using mkdtemp() so we only depend on GLib 2.28



commit cbd4ade053b7bee04be339ba5a3937a98804d910
Author: Colin Walters <walters verbum org>
Date:   Tue May 29 22:34:11 2012 -0400

    core: Switch to using mkdtemp() so we only depend on GLib 2.28
    
    We claim to build against 2.28, let's actually make it work.

 Makefile-ostadmin.am                   |    4 +-
 src/libostree/ostree-core.c            |   39 ++++++++++++++++++++++++++++++++
 src/libostree/ostree-core.h            |    7 +++++
 src/ostadmin/ot-admin-builtin-deploy.c |   22 ++++++++---------
 4 files changed, 58 insertions(+), 14 deletions(-)
---
diff --git a/Makefile-ostadmin.am b/Makefile-ostadmin.am
index d8305dc..6872a21 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 61718d5..5d2b07e 100644
--- a/src/libostree/ostree-core.c
+++ b/src/libostree/ostree-core.c
@@ -20,12 +20,17 @@
  * Author: Colin Walters <walters verbum org>
  */
 
+/* for mkdtemp */
+#define _GNU_SOURCE
+
 #include "config.h"
 
 #include "ostree.h"
 #include "otutil.h"
 
 #include <sys/types.h>
+#include <stdio.h>
+#include <stdlib.h>
 #include <attr/xattr.h>
 
 #define ALIGN_VALUE(this, boundary) \
@@ -1304,6 +1309,40 @@ ostree_create_temp_regular_file (GFile            *dir,
 }
 
 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,
                             guint64        offset,
diff --git a/src/libostree/ostree-core.h b/src/libostree/ostree-core.h
index bc08d38..3617b01 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 64549e4..509cb14 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 <glib/gi18n.h>
 #include <sys/utsname.h>
@@ -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;



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]