[ostree/wip/packfile-rebase2] core: Move some bits down into core



commit 998e1dabd0ff820df7c76e1081a09d54b190211d
Author: Colin Walters <walters verbum org>
Date:   Tue Mar 27 18:34:54 2012 -0400

    core: Move some bits down into core

 src/libostree/ostree-core.c |  103 +++++++++++++++++++++++++++++++++++++
 src/libostree/ostree-core.h |    9 +++
 src/libostree/ostree-repo.c |  120 +++---------------------------------------
 3 files changed, 121 insertions(+), 111 deletions(-)
---
diff --git a/src/libostree/ostree-core.c b/src/libostree/ostree-core.c
index 98f6845..f2e5770 100644
--- a/src/libostree/ostree-core.c
+++ b/src/libostree/ostree-core.c
@@ -28,6 +28,9 @@
 #include <sys/types.h>
 #include <attr/xattr.h>
 
+#define ALIGN_VALUE(this, boundary) \
+  (( ((unsigned long)(this)) + (((unsigned long)(boundary)) -1)) & (~(((unsigned long)(boundary))-1)))
+
 gboolean
 ostree_validate_checksum_string (const char *sha256,
                                  GError    **error)
@@ -1207,3 +1210,103 @@ ostree_create_temp_hardlink (GFile            *dir,
   g_clear_object (&possible_file);
   return ret;
 }
+
+gboolean
+ostree_read_pack_entry (guchar        *pack_data,
+                        guint64        pack_len,
+                        guint64        offset,
+                        gboolean       trusted,
+                        GVariant     **out_entry,
+                        GCancellable  *cancellable,
+                        GError       **error)
+{
+  gboolean ret = FALSE;
+  GVariant *ret_entry = NULL;
+  guint64 entry_start;
+  guint64 entry_end;
+  guint32 entry_len;
+
+  if (G_UNLIKELY (!(offset < pack_len)))
+    {
+      g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED,
+                   "Corrupted pack index; out of range offset %" G_GUINT64_FORMAT,
+                   offset);
+      goto out;
+    }
+  if (G_UNLIKELY (!((offset & 0x3) == 0)))
+    {
+      g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED,
+                   "Corrupted pack index; unaligned offset %" G_GUINT64_FORMAT,
+                   offset);
+      goto out;
+    }
+
+  entry_start = ALIGN_VALUE (offset + 4, 8);
+  if (G_UNLIKELY (!(entry_start < pack_len)))
+    {
+      g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED,
+                   "Corrupted pack index; out of range data offset %" G_GUINT64_FORMAT,
+                   entry_start);
+      goto out;
+    }
+
+  g_assert ((((guint64)pack_data+offset) & 0x3) == 0);
+  entry_len = GUINT32_FROM_BE (*((guint32*)(pack_data+offset)));
+
+  entry_end = entry_start + entry_len;
+  if (G_UNLIKELY (!(entry_end < pack_len)))
+    {
+      g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED,
+                   "Corrupted pack index; out of range entry length %u",
+                   entry_len);
+      goto out;
+    }
+
+  ret_entry = g_variant_new_from_data (OSTREE_PACK_FILE_CONTENT_VARIANT_FORMAT,
+                                       pack_data+entry_start, entry_len,
+                                       trusted, NULL, NULL);
+  ret = TRUE;
+  ot_transfer_out_value (out_entry, &ret_entry);
+ out:
+  ot_clear_gvariant (&ret_entry);
+  return ret;
+}
+
+GInputStream *
+ostree_read_pack_entry_as_stream (GVariant *pack_entry)
+{
+  GInputStream *memory_input;
+  GInputStream *ret_input = NULL;
+  GVariant *pack_data = NULL;
+  guchar entry_flags;
+  gconstpointer data_ptr;
+  gsize data_len;
+
+  g_variant_get_child (pack_entry, 1, "y", &entry_flags);
+  g_variant_get_child (pack_entry, 3, "@ay", &pack_data);
+
+  data_ptr = g_variant_get_fixed_array (pack_data, &data_len, 1);
+  memory_input = g_memory_input_stream_new_from_data (data_ptr, data_len, NULL);
+  g_object_set_data_full ((GObject*)memory_input, "ostree-mem-gvariant",
+                          pack_data, (GDestroyNotify) g_variant_unref);
+
+  if (entry_flags & OSTREE_PACK_FILE_ENTRY_FLAG_GZIP)
+    {
+      GConverter *decompressor;
+
+      decompressor = (GConverter*)g_zlib_decompressor_new (G_ZLIB_COMPRESSOR_FORMAT_GZIP);
+      ret_input = (GInputStream*)g_object_new (G_TYPE_CONVERTER_INPUT_STREAM,
+                                               "converter", decompressor,
+                                               "base-stream", memory_input,
+                                               "close-base-stream", TRUE,
+                                               NULL);
+      g_object_unref (decompressor);
+    }
+  else
+    {
+      ret_input = memory_input;
+      memory_input = NULL;
+    }
+
+  return ret_input;
+}
diff --git a/src/libostree/ostree-core.h b/src/libostree/ostree-core.h
index 447e338..fde739c 100644
--- a/src/libostree/ostree-core.h
+++ b/src/libostree/ostree-core.h
@@ -265,5 +265,14 @@ gboolean ostree_parse_archived_file_meta (GVariant         *data,
                                           GVariant        **out_xattrs,
                                           GError          **error);
 
+gboolean ostree_read_pack_entry (guchar           *pack_data,
+                                 guint64           pack_len,
+                                 guint64           object_offset,
+                                 gboolean          trusted,
+                                 GVariant        **out_entry,
+                                 GCancellable     *cancellable,
+                                 GError          **error);
+
+GInputStream *ostree_read_pack_entry_as_stream (GVariant *pack_entry);
 
 #endif /* _OSTREE_REPO */
diff --git a/src/libostree/ostree-repo.c b/src/libostree/ostree-repo.c
index 6ee96d4..9672460 100644
--- a/src/libostree/ostree-repo.c
+++ b/src/libostree/ostree-repo.c
@@ -40,9 +40,6 @@
 #include "ostree-libarchive-input-stream.h"
 #endif
 
-#define ALIGN_VALUE(this, boundary) \
-  (( ((unsigned long)(this)) + (((unsigned long)(boundary)) -1)) & (~(((unsigned long)(boundary))-1)))
-
 enum {
   PROP_0,
 
@@ -2663,106 +2660,6 @@ bsearch_in_pack_index (GVariant   *index_contents,
 }
 
 static gboolean
-read_pack_entry (gboolean       trusted,
-                 guchar        *pack_data,
-                 guint64        pack_len,
-                 guint64        offset,
-                 GVariant     **out_entry,
-                 GCancellable  *cancellable,
-                 GError       **error)
-{
-  gboolean ret = FALSE;
-  GVariant *ret_entry = NULL;
-  guint64 entry_start;
-  guint64 entry_end;
-  guint32 entry_len;
-
-  if (G_UNLIKELY (!(offset < pack_len)))
-    {
-      g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED,
-                   "Corrupted pack index; out of range offset %" G_GUINT64_FORMAT,
-                   offset);
-      goto out;
-    }
-  if (G_UNLIKELY (!((offset & 0x3) == 0)))
-    {
-      g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED,
-                   "Corrupted pack index; unaligned offset %" G_GUINT64_FORMAT,
-                   offset);
-      goto out;
-    }
-
-  entry_start = ALIGN_VALUE (offset + 4, 8);
-  if (G_UNLIKELY (!(entry_start < pack_len)))
-    {
-      g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED,
-                   "Corrupted pack index; out of range data offset %" G_GUINT64_FORMAT,
-                   entry_start);
-      goto out;
-    }
-
-  g_assert ((((guint64)pack_data+offset) & 0x3) == 0);
-  entry_len = GUINT32_FROM_BE (*((guint32*)(pack_data+offset)));
-
-  entry_end = entry_start + entry_len;
-  if (G_UNLIKELY (!(entry_end < pack_len)))
-    {
-      g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED,
-                   "Corrupted pack index; out of range entry length %u",
-                   entry_len);
-      goto out;
-    }
-
-  ret_entry = g_variant_new_from_data (OSTREE_PACK_FILE_CONTENT_VARIANT_FORMAT,
-                                       pack_data+entry_start, entry_len,
-                                       trusted, NULL, NULL);
-  ret = TRUE;
-  ot_transfer_out_value (out_entry, &ret_entry);
- out:
-  ot_clear_gvariant (&ret_entry);
-  return ret;
-}
-
-static GInputStream *
-get_pack_entry_stream (GVariant        *pack_entry)
-{
-  GInputStream *memory_input;
-  GInputStream *ret_input = NULL;
-  GVariant *pack_data = NULL;
-  guchar entry_flags;
-  gconstpointer data_ptr;
-  gsize data_len;
-
-  g_variant_get_child (pack_entry, 1, "y", &entry_flags);
-  g_variant_get_child (pack_entry, 3, "@ay", &pack_data);
-
-  data_ptr = g_variant_get_fixed_array (pack_data, &data_len, 1);
-  memory_input = g_memory_input_stream_new_from_data (data_ptr, data_len, NULL);
-  g_object_set_data_full ((GObject*)memory_input, "ostree-mem-gvariant",
-                          pack_data, (GDestroyNotify) g_variant_unref);
-
-  if (entry_flags & OSTREE_PACK_FILE_ENTRY_FLAG_GZIP)
-    {
-      GConverter *decompressor;
-
-      decompressor = (GConverter*)g_zlib_decompressor_new (G_ZLIB_COMPRESSOR_FORMAT_GZIP);
-      ret_input = (GInputStream*)g_object_new (G_TYPE_CONVERTER_INPUT_STREAM,
-                                               "converter", decompressor,
-                                               "base-stream", memory_input,
-                                               "close-base-stream", TRUE,
-                                               NULL);
-      g_object_unref (decompressor);
-    }
-  else
-    {
-      ret_input = memory_input;
-      memory_input = NULL;
-    }
-
-  return ret_input;
-}
-
-static gboolean
 get_pack_entry_as_variant (GVariant            *pack_entry,
                            const GVariantType  *type,
                            gboolean             trusted,
@@ -2775,7 +2672,7 @@ get_pack_entry_as_variant (GVariant            *pack_entry,
   GMemoryOutputStream *data_stream;
   GVariant *ret_variant;
 
-  stream = get_pack_entry_stream (pack_entry);
+  stream = ostree_read_pack_entry_as_stream (pack_entry);
   
   data_stream = (GMemoryOutputStream*)g_memory_output_stream_new (NULL, 0, g_realloc, g_free);
 
@@ -2859,10 +2756,11 @@ ostree_repo_load_file (OstreeRepo         *self,
                                               &content_pack_data, &content_pack_len,
                                               cancellable, error))
                 goto out;
-              if (!read_pack_entry (TRUE, content_pack_data, content_pack_len, content_pack_offset,
-                                    &packed_object, cancellable, error))
+              if (!ostree_read_pack_entry (content_pack_data, content_pack_len,
+                                           content_pack_offset, TRUE,
+                                           &packed_object, cancellable, error))
                 goto out;
-              ret_input = get_pack_entry_stream (packed_object);
+              ret_input = ostree_read_pack_entry_as_stream (packed_object);
             }
           else if (content_loose_path != NULL)
             {
@@ -3210,12 +3108,12 @@ ostree_repo_load_variant (OstreeRepo  *self,
                                       cancellable, error))
         goto out;
       
-      if (!read_pack_entry (TRUE, pack_data, pack_len, object_offset, &packed_object,
-                            cancellable, error))
+      if (!ostree_read_pack_entry (pack_data, pack_len, object_offset,
+                                   TRUE, &packed_object, cancellable, error))
         goto out;
 
-      if (!get_pack_entry_as_variant (packed_object, OSTREE_SERIALIZED_VARIANT_FORMAT, TRUE, &container_variant,
-                                      cancellable, error))
+      if (!get_pack_entry_as_variant (packed_object, OSTREE_SERIALIZED_VARIANT_FORMAT, TRUE,
+                                      &container_variant, cancellable, error))
         goto out;
       
       g_variant_get (container_variant, "(uv)",



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