core: Add API to convert csum -> checksum without malloc()
Just doing some profiling, this was in the top malloc() callers.
This commit is contained in:
parent
a305c79f7a
commit
a821420711
|
|
@ -948,23 +948,27 @@ ostree_checksum_to_bytes_v (const char *checksum)
|
||||||
return ot_gvariant_new_bytearray ((guchar*)result, 32);
|
return ot_gvariant_new_bytearray ((guchar*)result, 32);
|
||||||
}
|
}
|
||||||
|
|
||||||
char *
|
void
|
||||||
ostree_checksum_from_bytes (const guchar *csum)
|
ostree_checksum_inplace_from_bytes (const guchar *csum,
|
||||||
|
char *buf)
|
||||||
{
|
{
|
||||||
static const gchar hexchars[] = "0123456789abcdef";
|
static const gchar hexchars[] = "0123456789abcdef";
|
||||||
char *ret;
|
|
||||||
guint i, j;
|
guint i, j;
|
||||||
|
|
||||||
ret = g_malloc (65);
|
|
||||||
|
|
||||||
for (i = 0, j = 0; i < 32; i++, j += 2)
|
for (i = 0, j = 0; i < 32; i++, j += 2)
|
||||||
{
|
{
|
||||||
guchar byte = csum[i];
|
guchar byte = csum[i];
|
||||||
ret[j] = hexchars[byte >> 4];
|
buf[j] = hexchars[byte >> 4];
|
||||||
ret[j+1] = hexchars[byte & 0xF];
|
buf[j+1] = hexchars[byte & 0xF];
|
||||||
|
}
|
||||||
|
buf[j] = '\0';
|
||||||
}
|
}
|
||||||
ret[j] = '\0';
|
|
||||||
|
|
||||||
|
char *
|
||||||
|
ostree_checksum_from_bytes (const guchar *csum)
|
||||||
|
{
|
||||||
|
char *ret = g_malloc (65);
|
||||||
|
ostree_checksum_inplace_from_bytes (csum, ret);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -113,6 +113,9 @@ GVariant *ostree_checksum_to_bytes_v (const char *checksum);
|
||||||
char * ostree_checksum_from_bytes (const guchar *bytes);
|
char * ostree_checksum_from_bytes (const guchar *bytes);
|
||||||
char * ostree_checksum_from_bytes_v (GVariant *bytes);
|
char * ostree_checksum_from_bytes_v (GVariant *bytes);
|
||||||
|
|
||||||
|
void ostree_checksum_inplace_from_bytes (const guchar *bytes,
|
||||||
|
char *buf);
|
||||||
|
|
||||||
const guchar *ostree_checksum_bytes_peek (GVariant *bytes);
|
const guchar *ostree_checksum_bytes_peek (GVariant *bytes);
|
||||||
|
|
||||||
int ostree_cmp_checksum_bytes (const guchar *a, const guchar *b);
|
int ostree_cmp_checksum_bytes (const guchar *a, const guchar *b);
|
||||||
|
|
|
||||||
|
|
@ -816,7 +816,7 @@ ostree_repo_file_tree_query_child (OstreeRepoFile *self,
|
||||||
ot_lvariant GVariant *tree_child_metadata = NULL;
|
ot_lvariant GVariant *tree_child_metadata = NULL;
|
||||||
ot_lvariant GVariant *content_csum_v = NULL;
|
ot_lvariant GVariant *content_csum_v = NULL;
|
||||||
ot_lvariant GVariant *meta_csum_v = NULL;
|
ot_lvariant GVariant *meta_csum_v = NULL;
|
||||||
ot_lfree char *tmp_checksum = NULL;
|
char tmp_checksum[65];
|
||||||
GFileAttributeMatcher *matcher = NULL;
|
GFileAttributeMatcher *matcher = NULL;
|
||||||
|
|
||||||
if (!ostree_repo_file_ensure_resolved (self, error))
|
if (!ostree_repo_file_ensure_resolved (self, error))
|
||||||
|
|
@ -833,8 +833,8 @@ ostree_repo_file_tree_query_child (OstreeRepoFile *self,
|
||||||
if (n < c)
|
if (n < c)
|
||||||
{
|
{
|
||||||
g_variant_get_child (files_variant, n, "(&s@ay)", &name, &content_csum_v);
|
g_variant_get_child (files_variant, n, "(&s@ay)", &name, &content_csum_v);
|
||||||
g_free (tmp_checksum);
|
ostree_checksum_inplace_from_bytes (ostree_checksum_bytes_peek (content_csum_v),
|
||||||
tmp_checksum = ostree_checksum_from_bytes_v (content_csum_v);
|
tmp_checksum);
|
||||||
|
|
||||||
if (!ostree_repo_load_file (self->repo, tmp_checksum, NULL, &ret_info, NULL,
|
if (!ostree_repo_load_file (self->repo, tmp_checksum, NULL, &ret_info, NULL,
|
||||||
cancellable, error))
|
cancellable, error))
|
||||||
|
|
@ -850,8 +850,8 @@ ostree_repo_file_tree_query_child (OstreeRepoFile *self,
|
||||||
{
|
{
|
||||||
g_variant_get_child (dirs_variant, n, "(&s@ay@ay)",
|
g_variant_get_child (dirs_variant, n, "(&s@ay@ay)",
|
||||||
&name, NULL, &meta_csum_v);
|
&name, NULL, &meta_csum_v);
|
||||||
g_free (tmp_checksum);
|
ostree_checksum_inplace_from_bytes (ostree_checksum_bytes_peek (meta_csum_v),
|
||||||
tmp_checksum = ostree_checksum_from_bytes_v (meta_csum_v);
|
tmp_checksum);
|
||||||
|
|
||||||
if (!query_child_info_dir (self->repo, tmp_checksum,
|
if (!query_child_info_dir (self->repo, tmp_checksum,
|
||||||
matcher, flags, &ret_info,
|
matcher, flags, &ret_info,
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue