Beispiel #1
0
static void
encode_header (GString *g, gpointer bean)
{
	g_string_append(g, "\"id\":\"");
	metautils_gba_to_hexgstr(g, CONTENTS_HEADERS_get_id(bean));
	g_string_append_printf(g, "\",\"hash\":\"");
	metautils_gba_to_hexgstr(g, CONTENTS_HEADERS_get_hash(bean));
	g_string_append_printf(g, "\",\"size\":%"G_GINT64_FORMAT,
			CONTENTS_HEADERS_get_size(bean));
	g_string_append_printf(g, ",\"policy\":\"%s\"",
			CONTENTS_HEADERS_get_policy(bean)->str);
}
/**
 * Inserts a bean (chunk or contents_headers) in a hashtable,
 * the key being the hash of the bean
 */
static void _add_to_hashtable_cb(gpointer hashtable, gpointer bean)
{
	GHashTable *_chunks_by_hash = (GHashTable *)hashtable;
	GByteArray *hash = NULL;
	if (DESCR(bean) == &descr_struct_CHUNKS) {
		hash = CHUNKS_get_hash(bean);
	} else if (DESCR(bean) == &descr_struct_CONTENTS_HEADERS) {
		hash = CONTENTS_HEADERS_get_hash(bean);
	} else {
		g_assert_not_reached();
	}
	GSList *chunk_list = g_hash_table_lookup(_chunks_by_hash, hash);
	if (chunk_list != NULL) {
		/* Remove it without freeing it */
		g_hash_table_steal(_chunks_by_hash, hash);
	}
	/* No problem if the key was not found: NULL is a valid GSList* */
	g_hash_table_insert(_chunks_by_hash, hash, g_slist_prepend(chunk_list, bean));
}