[ostree] core: Use GFile for xattr API



commit 218684786dcaa89bf7b0b173e86d917ad6af1d6c
Author: Colin Walters <walters verbum org>
Date:   Thu Nov 17 18:30:02 2011 -0500

    core: Use GFile for xattr API

 src/libostree/ostree-core.c      |   30 ++++++++++++++++++++----------
 src/libostree/ostree-core.h      |    4 ++--
 src/libostree/ostree-repo-file.c |    2 +-
 src/libostree/ostree-repo.c      |    5 ++++-
 4 files changed, 27 insertions(+), 14 deletions(-)
---
diff --git a/src/libostree/ostree-core.c b/src/libostree/ostree-core.c
index 4e6fafc..98d2f8a 100644
--- a/src/libostree/ostree-core.c
+++ b/src/libostree/ostree-core.c
@@ -123,15 +123,18 @@ read_xattr_name_array (const char *path,
 }
 
 GVariant *
-ostree_get_xattrs_for_path (const char *path,
-                              GError    **error)
+ostree_get_xattrs_for_file (GFile      *f,
+                            GError    **error)
 {
+  const char *path;
   GVariant *ret = NULL;
   GVariantBuilder builder;
   char *xattr_names = NULL;
   char *xattr_names_canonical = NULL;
   ssize_t bytes_read;
 
+  path = ot_gfile_get_path_cached (f);
+
   g_variant_builder_init (&builder, G_VARIANT_TYPE ("a(ayay)"));
 
   bytes_read = llistxattr (path, NULL, 0);
@@ -175,6 +178,7 @@ ostree_stat_and_checksum_file (int dir_fd, const char *path,
                                struct stat *out_stbuf,
                                GError **error)
 {
+  GFile *f = NULL;
   GChecksum *content_sha256 = NULL;
   GChecksum *content_and_meta_sha256 = NULL;
   char *stat_string = NULL;
@@ -188,6 +192,8 @@ ostree_stat_and_checksum_file (int dir_fd, const char *path,
   char *device_id = NULL;
   struct stat stbuf;
 
+  f = ot_util_new_file_for_path (path);
+
   basename = g_path_get_basename (path);
 
   if (dir_fd == -1)
@@ -221,7 +227,7 @@ ostree_stat_and_checksum_file (int dir_fd, const char *path,
 
   if (objtype == OSTREE_OBJECT_TYPE_FILE)
     {
-      xattrs = ostree_get_xattrs_for_path (path, error);
+      xattrs = ostree_get_xattrs_for_file (f, error);
       if (!xattrs)
         goto out;
     }
@@ -286,6 +292,7 @@ ostree_stat_and_checksum_file (int dir_fd, const char *path,
   *out_checksum = content_and_meta_sha256;
   ret = TRUE;
  out:
+  g_clear_object (&f);
   if (fd >= 0)
     close (fd);
   if (temp_dir != NULL)
@@ -324,7 +331,7 @@ ostree_get_directory_metadata (GFile        *dir,
       goto out;
     }
 
-  xattrs = ostree_get_xattrs_for_path (ot_gfile_get_path_cached (dir), error);
+  xattrs = ostree_get_xattrs_for_file (dir, error);
   if (!xattrs)
     goto out;
 
@@ -348,11 +355,17 @@ ostree_get_directory_metadata (GFile        *dir,
 }
 
 gboolean
-ostree_set_xattrs (const char *path, GVariant *xattrs, GCancellable *cancellable, GError **error)
+ostree_set_xattrs (GFile  *f, 
+                   GVariant *xattrs, 
+                   GCancellable *cancellable, 
+                   GError **error)
 {
+  const char *path;
   gboolean ret = FALSE;
   int i, n;
 
+  path = ot_gfile_get_path_cached (f);
+
   n = g_variant_n_children (xattrs);
   for (i = 0; i < n; i++)
     {
@@ -462,7 +475,6 @@ ostree_pack_object (GOutputStream     *output,
                     GError          **error)
 {
   gboolean ret = FALSE;
-  const char *path = NULL;
   GFileInfo *finfo = NULL;
   GFileInputStream *instream = NULL;
   gboolean pack_builder_initialized = FALSE;
@@ -471,8 +483,6 @@ ostree_pack_object (GOutputStream     *output,
   GVariant *xattrs = NULL;
   gsize bytes_written;
 
-  path = ot_gfile_get_path_cached (file);
-
   finfo = g_file_query_info (file, "standard::type,standard::size,standard::is-symlink,standard::symlink-target,unix::*",
                              G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS, cancellable, error);
   if (!finfo)
@@ -510,7 +520,7 @@ ostree_pack_object (GOutputStream     *output,
       g_variant_builder_add (&pack_builder, "u", GUINT32_TO_BE (gid));
       g_variant_builder_add (&pack_builder, "u", GUINT32_TO_BE (mode));
 
-      xattrs = ostree_get_xattrs_for_path (path, error);
+      xattrs = ostree_get_xattrs_for_file (file, error);
       if (!xattrs)
         goto out;
       g_variant_builder_add (&pack_builder, "@a(ayay)", xattrs);
@@ -856,7 +866,7 @@ unpack_file (const char   *path,
         }
     }
 
-  if (!ostree_set_xattrs (dest_path, xattrs, NULL, error))
+  if (!ostree_set_xattrs (file, xattrs, NULL, error))
     goto out;
 
   if (ret_checksum)
diff --git a/src/libostree/ostree-core.h b/src/libostree/ostree-core.h
index 69ec769..32d4c00 100644
--- a/src/libostree/ostree-core.h
+++ b/src/libostree/ostree-core.h
@@ -96,10 +96,10 @@ char *ostree_get_relative_object_path (const char *checksum,
                                        OstreeObjectType type,
                                        gboolean         archive);
 
-GVariant *ostree_get_xattrs_for_path (const char   *path,
+GVariant *ostree_get_xattrs_for_file (GFile       *f,
                                       GError     **error);
 
-gboolean ostree_set_xattrs (const char *path, GVariant *xattrs,
+gboolean ostree_set_xattrs (GFile *f, GVariant *xattrs,
                             GCancellable *cancellable, GError **error);
 
 gboolean ostree_parse_metadata_file (const char                  *path,
diff --git a/src/libostree/ostree-repo-file.c b/src/libostree/ostree-repo-file.c
index 2c6934a..6c5eff4 100644
--- a/src/libostree/ostree-repo-file.c
+++ b/src/libostree/ostree-repo-file.c
@@ -323,7 +323,7 @@ _ostree_repo_file_get_xattrs (OstreeRepoFile  *self,
   else
     {
       local_file = _ostree_repo_file_nontree_get_local (self);
-      ret_xattrs = ostree_get_xattrs_for_path (ot_gfile_get_path_cached (local_file), error);
+      ret_xattrs = ostree_get_xattrs_for_file (local_file, error);
     }
 
   ret = TRUE;
diff --git a/src/libostree/ostree-repo.c b/src/libostree/ostree-repo.c
index dc8b0df..82f9eb8 100644
--- a/src/libostree/ostree-repo.c
+++ b/src/libostree/ostree-repo.c
@@ -1710,10 +1710,12 @@ checkout_one_directory (OstreeRepo  *self,
                         GError         **error)
 {
   gboolean ret = FALSE;
+  GFile *dest_file = NULL;
   char *dest_path = NULL;
   GVariant *xattr_variant = NULL;
 
   dest_path = g_build_filename (destination, dirname, NULL);
+  dest_file = ot_util_new_file_for_path (dest_path);
 
   if (!_ostree_repo_file_get_xattrs (dir, &xattr_variant, NULL, error))
     goto out;
@@ -1725,7 +1727,7 @@ checkout_one_directory (OstreeRepo  *self,
       goto out;
     }
 
-  if (!ostree_set_xattrs (dest_path, xattr_variant, cancellable, error))
+  if (!ostree_set_xattrs (dest_file, xattr_variant, cancellable, error))
     goto out;
       
   if (!checkout_tree (self, dir, dest_path, cancellable, error))
@@ -1733,6 +1735,7 @@ checkout_one_directory (OstreeRepo  *self,
 
   ret = TRUE;
  out:
+  g_clear_object (&dest_file);
   g_free (dest_path);
   if (xattr_variant)
     g_variant_unref (xattr_variant);



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