diff options
author | Alexander Larsson <alexl@redhat.com> | 2016-04-25 13:32:01 +0200 |
---|---|---|
committer | Alexander Larsson <alexl@redhat.com> | 2016-04-25 18:59:17 +0200 |
commit | 2d74810cbc7d0e243fca97f2301d7f150775f01b (patch) | |
tree | ce3f2933fcad553154c62ad4a5ed4907e04acdcc /common | |
parent | f340105b4cf225a195766b1365c657e5c6f60081 (diff) | |
download | xdg-app-2d74810cbc7d0e243fca97f2301d7f150775f01b.tar.gz |
common: Add (and use) xdg_app_summary_lookup_ref helper
Diffstat (limited to 'common')
-rw-r--r-- | common/xdg-app-dir.c | 5 | ||||
-rw-r--r-- | common/xdg-app-utils.c | 28 | ||||
-rw-r--r-- | common/xdg-app-utils.h | 3 |
3 files changed, 33 insertions, 3 deletions
diff --git a/common/xdg-app-dir.c b/common/xdg-app-dir.c index d6704ae..fa45f2d 100644 --- a/common/xdg-app-dir.c +++ b/common/xdg-app-dir.c @@ -2791,7 +2791,6 @@ xdg_app_dir_find_remote_ref (XdgAppDir *self, g_autoptr(GVariant) summary = NULL; g_autoptr(GVariant) refs = NULL; g_autoptr(GBytes) summary_bytes = NULL; - int pos; if (!xdg_app_dir_ensure_repo (self, NULL, error)) return NULL; @@ -2847,14 +2846,14 @@ xdg_app_dir_find_remote_ref (XdgAppDir *self, summary = g_variant_new_from_bytes (OSTREE_SUMMARY_GVARIANT_FORMAT, summary_bytes, FALSE); refs = g_variant_get_child_value (summary, 0); - if (app_ref && xdg_app_variant_bsearch_str (refs, app_ref, &pos)) + if (app_ref && xdg_app_summary_lookup_ref (summary, app_ref, NULL)) { if (is_app) *is_app = TRUE; return g_steal_pointer (&app_ref); } - if (runtime_ref && xdg_app_variant_bsearch_str (refs, runtime_ref, &pos)) + if (runtime_ref && xdg_app_summary_lookup_ref (summary, runtime_ref, NULL)) { if (is_app) *is_app = FALSE; diff --git a/common/xdg-app-utils.c b/common/xdg-app-utils.c index 584995e..5ea82a0 100644 --- a/common/xdg-app-utils.c +++ b/common/xdg-app-utils.c @@ -1457,6 +1457,34 @@ xdg_app_variant_bsearch_str (GVariant *array, } gboolean +xdg_app_summary_lookup_ref (GVariant *summary, const char *ref, char **out_checksum) +{ + g_autoptr(GVariant) refs = g_variant_get_child_value (summary, 0); + int pos; + g_autoptr(GVariant) refdata = NULL; + g_autoptr(GVariant) reftargetdata = NULL; + g_autoptr(GVariant) commit_data = NULL; + guint64 commit_size; + g_autoptr(GVariant) commit_csum_v = NULL; + g_autoptr(GBytes) commit_bytes = NULL; + + if (!xdg_app_variant_bsearch_str (refs, ref, &pos)) + return FALSE; + + refdata = g_variant_get_child_value (refs, pos); + reftargetdata = g_variant_get_child_value (refdata, 1); + g_variant_get (reftargetdata, "(t@ay@a{sv})", &commit_size, &commit_csum_v, NULL); + + if (!ostree_validate_structureof_csum_v (commit_csum_v, NULL)) + return FALSE; + + if (out_checksum) + *out_checksum = ostree_checksum_from_bytes_v (commit_csum_v); + + return TRUE; +} + +gboolean xdg_app_repo_set_title (OstreeRepo *repo, const char *title, GError **error) diff --git a/common/xdg-app-utils.h b/common/xdg-app-utils.h index 8f3f3bc..6715d27 100644 --- a/common/xdg-app-utils.h +++ b/common/xdg-app-utils.h @@ -48,6 +48,9 @@ GBytes * xdg_app_read_stream (GInputStream *in, gboolean xdg_app_variant_bsearch_str (GVariant *array, const char *str, int *out_pos); +gboolean xdg_app_summary_lookup_ref (GVariant *summary, + const char *ref, + char **out_checksum); gboolean xdg_app_has_name_prefix (const char *string, const char *name); |